using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class EnemyGenerator : MonoBehaviour
{
    public GameObject player;
    public GameObject[] spwanPoint;
    public GameObject[] EnemyGos;
    public Button[] btnEnemyTypes;
    public Button btnGenerateEnemy;
    public Text[] txts;

    private bool isCleard;
    private bool[] isEnemySelected;

    private float maxGenTime = 3f;
    private float genTime;

    private Color tmpcolor;

    void Start()
    {
        this.btnGenerateEnemy.onClick.AddListener(() =>
        {
            if (this.isCleard)
            {
                this.isCleard = false;
                this.txts[0].text = "Gnerate Off";
                Debug.Log("isCleard");
            }
            else 
            {
                this.isCleard = true;
                this.txts[0].text = "Gnerate On";
                Debug.Log("!isCleard");
            } 
        });

        this.isEnemySelected = new bool[this.EnemyGos.Length];
        for (int i = 0; i < this.btnEnemyTypes.Length; i++)
        {
            int idx = i;
            this.btnEnemyTypes[idx].onClick.AddListener(() =>
            {
                if (!this.isEnemySelected[idx]) 
                {
                    this.isEnemySelected[idx] = true;
                    if(idx == 0) this.txts[1].text = "Range On";
                    else this.txts[2].text = "Melee On";
                    Debug.LogFormat("{0} true", idx);
                } 
                else 
                {
                    this.isEnemySelected[idx] = false;
                    if (idx == 0) this.txts[1].text = "Range Off";
                    else this.txts[2].text = "Melee Off";
                    Debug.LogFormat("{0} false", idx);
                } 
            });
        }
     }


    void FixedUpdate()
    {
        float[] arrDist = new float[this.spwanPoint.Length];
        float maxDist = 0;
        int mostFarSpwanPoint = 0;
        int secondFarSpwanPoint = 0;
        for (int i = 0; i < this.spwanPoint.Length; i++)
        {
            arrDist[i] = Vector2.Distance(this.player.transform.position, this.spwanPoint[i].transform.position);
            if (maxDist < arrDist[i]) 
            {
                secondFarSpwanPoint = mostFarSpwanPoint;
                maxDist = arrDist[i];
                mostFarSpwanPoint = i;
            }
        }

        if (!this.isCleard)
        {
            this.genTime += Time.deltaTime;
            if(this.genTime >= this.maxGenTime)
            {
                for (int i = 0; i < this.EnemyGos.Length; i++)
                {
                    if (this.isEnemySelected[i])
                    {
                        var go = Instantiate(this.EnemyGos[i]);
                        go.transform.position = this.spwanPoint[mostFarSpwanPoint].transform.position;
                        go.GetComponent<AIEnemy>().Init(this.player.transform);
                    }

                    if (this.isEnemySelected[i])
                    {
                        var go = Instantiate(this.EnemyGos[i]);
                        go.transform.position = this.spwanPoint[secondFarSpwanPoint].transform.position;
                        go.GetComponent<AIEnemy>().Init(this.player.transform);
                    }
                }
                Debug.Log("Spawn");
                this.genTime = 0;
            }
        }

    }
}

 

구상한 로직은 플레이어가 해당 룸으로 입장 시 EnemyGenerator 오브젝트를 활성화 (SetActive)하여 해당 스크립트가 바로 실행되도록 구현하였으며 현재는 2가지 Enemy 종류로 테스트단계입니다. 또한, 현재는 플레이어와 가장 먼 2가지 스폰 포인트에서 Enemy 객체가 생성되도록 하였으며, 특정 조건을 통해 해당 스크립트의 isCleard변수가 true가 되었을 때 적 생성이 중단됩니다.

 

+ Recent posts