﻿#pragma once

#include "Common.h"
#include "ImageManager.h"

struct SpawnPoint
{
    int x;
    int y;
};

// CSVマップの読み込み、当たり判定、スクロール描画を担当する
class Stage
{
public:
    // タイルとマップの大きさ。座標計算の基準として各処理から参照する
    static const int tileSize = 32;
    static const int mapWidth = 40;
    static const int mapHeight = 15;
    static const int maxEnemySpawns = 32;

    // csvPathは実行フォルダを基準にしたパスを渡す
    bool Initialize(const wchar_t* csvPath);
    bool LoadFromCsv(const wchar_t* csvPath);

    bool IsSolidTile(int tileX, int tileY) const;
    bool IsSolidAtRect(const Rect& rect) const;
    bool ResolveHorizontal(Rect& rect, int moveX) const;
    bool ResolveVertical(Rect& rect, int moveY) const;

    // cameraXはワールド座標における画面左端の位置
    void Draw(int cameraX, const ImageManager& images) const;

    Rect GetGoal() const;
    int GetEnemySpawnCount() const;
    SpawnPoint GetEnemySpawn(int index) const;
    bool IsLoadedFromCsv() const;

private:
    void ClearMap();
    void SetGoalTile(int tileX, int tileY);
    void AddEnemySpawn(int tileX, int tileY);
    void DrawTile(int screenX, int screenY, const ImageManager& images) const;
    void DrawGoal(int cameraX, const ImageManager& images) const;

private:
    // 読み込んだCSVのタイル情報とゴール位置
    int tiles[mapHeight][mapWidth] = {};
    Rect goal = { 0, 0, tileSize, tileSize };
    SpawnPoint enemySpawns[maxEnemySpawns] = {};
    int enemySpawnCount = 0;
    bool loadedFromCsv = false;
};

