﻿#include "Shooting/ImageManager.h"
#include "Shooting/Tuning/GameTuning.h"

#include "Shooting/EnemyManager.h"

namespace dxgame::shooting
{
    void EnemyManager::Reset()
    {
        for (Enemy& enemy : enemies)
            enemy.Deactivate();

        spawnTimer = tuning::enemy::SpawnDelay;
        spawnIndex = 0;
    }

    void EnemyManager::Update(float deltaTime)
    {
        for (Enemy& enemy : enemies)
            enemy.Update(deltaTime);

        spawnTimer -= deltaTime;

        if (spawnTimer <= 0.0f)
        {
            SpawnOne();
            spawnTimer = tuning::enemy::SpawnInterval;
        }
    }

    void EnemyManager::Draw(const ImageManager& images) const
    {
        for (const Enemy& enemy : enemies)
            enemy.Draw(images);
    }

    void EnemyManager::SpawnOne()
    {
        // spawnIndexから出現レーン、速度、移動方法を順番に決める
        for (Enemy& enemy : enemies)
        {
            if (enemy.IsActive())
                continue;

            int speedLevel = spawnIndex % tuning::enemy::SpeedLevels;
            float speed = tuning::enemy::BaseSpeed + speedLevel * tuning::enemy::SpeedStep;
            int lane = spawnIndex % tuning::enemy::LaneCount;
            Vector2 startPosition =
            {
                tuning::enemy::LaneStart + lane * tuning::enemy::LaneSpacing,
                -tuning::enemy::Hitbox.height * 0.5f
            };

            Enemy::Behaviour pattern =
                (spawnIndex + 1) % tuning::enemy::WaveInterval == 0
                    ? Enemy::Behaviour::Wave
                    : Enemy::Behaviour::Straight;

            enemy.Spawn(startPosition, speed, pattern);
            ++spawnIndex;

            return;
        }
    }
}
