using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class ProgressController : MonoBehaviour
{
// Start is called before the first frame update
[Header("Progress and enemies")]
[HideInInspector]
public List<IUpdatable> updatables = new List<IUpdatable>();
public int totalProgress = 0;
public int currentProgress = 0;
[Tooltip("If this variable is true, all the updatables of this script will be added to the update manager when the game starts. Only true if it's a start room.")]
[SerializeField] private bool startRoom;
private UpdateManager updateManager;
private bool roomEnded = false;
private bool roomStarted = false;
private RoomInformation roomInfo;
private RoomSpawner roomSpawner;
public void StartMe()
{
roomSpawner = GameObject.Find("LevelManager").GetComponent<RoomSpawner>();
updateManager = GameObject.Find("UpdateManager").GetComponent<UpdateManager>();
roomInfo = GetComponent<IRoomCreationHandler>().GetRoomInfo();
if (startRoom)
{
StartRoom();
}
}
public void UpdateProgress()
{
currentProgress++;
}
public void StartRoom()
{
roomStarted= true;
updateManager.updatables = updatables;
foreach (ExitScript e in roomInfo.exits)
{
e.ToggleExit();
}
}
public void AddToUpdatables(GameObject go)
{
IUpdatable[] upd = go.GetComponents<IUpdatable>();
foreach(IUpdatable u in upd)
{
updatables.Add(u);
}
}
private void Update()
{
if (roomStarted)
{
if (currentProgress >= totalProgress && !roomEnded)
{
List<string> list = roomSpawner.WhereCanIOpen(roomInfo.coords);
foreach (ExitScript e in roomInfo.exits)
{
foreach (string s in list)
{
if (e.gameObject.transform.parent.name == s)
Destroy(e.gameObject);
}
roomEnded = true;
}
}
}
}
}