CapersProject/Assets/02.Scripts/Map/MapController.cs

173 lines
4.8 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using BlueWater.Audios;
using BlueWater.Enemies.Bosses;
using BlueWater.Uis;
2024-06-03 18:26:03 +00:00
using Sirenix.OdinInspector;
using UnityEngine;
namespace BlueWater.Maps
{
public abstract class MapController : MonoBehaviour
{
/// 컴포넌트
[Title("컴포넌트")]
[SerializeField, Required]
protected Transform PlayerSpawnLocation;
2024-06-03 18:26:03 +00:00
[field: SerializeField, Required]
public Transform EnemyInstanceLocation { get; private set; }
2024-06-03 18:26:03 +00:00
[field: SerializeField]
public Transform ParticleInstanceLocation { get; private set; }
[SerializeField]
protected Transform MapEntranceLocations;
[SerializeField]
protected List<MapEntrance> MapEntrances;
[SerializeField]
protected SaveStage SaveStage;
[SerializeField]
protected string BgmName;
2024-06-03 18:26:03 +00:00
[SerializeField]
protected Vector2 InitializeFadeInOutTime = new(0.2f, 1f);
2024-06-03 18:26:03 +00:00
[SerializeField]
protected Vector2 ClearFadeInOutTime = new(0.2f, 0.3f);
protected Coroutine MapInitializeCoroutineInstance;
protected static bool IsCleared;
private bool _isQuitting;
private void Awake()
2024-06-03 18:26:03 +00:00
{
InitializeComponents();
2024-06-03 18:26:03 +00:00
}
protected virtual void Start()
2024-06-03 18:26:03 +00:00
{
}
protected virtual void OnApplicationQuit()
{
_isQuitting = true;
}
protected virtual void OnDestroy()
{
if (_isQuitting) return;
}
[Button("컴포넌트 초기화")]
protected virtual void InitializeComponents()
{
PlayerSpawnLocation = transform.Find("Spawns/PlayerSpawn");
EnemyInstanceLocation = transform.Find("Enemies");
ParticleInstanceLocation = transform.Find("InstantiateObjects");
MapEntranceLocations = transform.Find("MapEntrances");
var entrancesArray = MapEntranceLocations.GetComponentsInChildren<MapEntrance>();
MapEntrances = new List<MapEntrance>(entrancesArray.Length);
MapEntrances.AddRange(entrancesArray);
}
public abstract void InitializeMap();
2024-06-03 18:26:03 +00:00
public void OpenMapEntrances()
{
foreach (var element in MapEntrances)
2024-06-03 18:26:03 +00:00
{
element.OpenMapEntrance();
2024-06-03 18:26:03 +00:00
}
}
public void CloseMapEntrances()
2024-06-03 18:26:03 +00:00
{
foreach (var element in MapEntrances)
2024-06-03 18:26:03 +00:00
{
element.CloseMapEntrance();
2024-06-03 18:26:03 +00:00
}
}
public void DestroyAllEnemies()
{
var temps = new List<Transform>();
foreach (Transform element in EnemyInstanceLocation)
2024-06-03 18:26:03 +00:00
{
temps.Add(element);
}
foreach (var element in temps)
{
Destroy(element.gameObject);
}
}
public void DestroyAllEnemiesExceptBoss()
{
var temps = new List<Transform>();
foreach (Transform element in EnemyInstanceLocation)
{
temps.Add(element);
}
foreach (var element in temps)
{
var boss = element.GetComponent<Boss>();
if (boss) continue;
Destroy(element.gameObject);
2024-06-03 18:26:03 +00:00
}
}
public void DestroyAllObjects()
{
DestroyAllEnemies();
var temps = new List<Transform>();
foreach (Transform element in ParticleInstanceLocation)
{
temps.Add(element);
}
foreach (Transform element in temps)
2024-06-03 18:26:03 +00:00
{
Destroy(element.gameObject);
2024-06-03 18:26:03 +00:00
}
}
2024-06-03 18:26:03 +00:00
public void ForceKillBoss()
{
var temps = new List<Transform>();
foreach (Transform element in EnemyInstanceLocation)
{
temps.Add(element);
}
foreach (Transform element in temps)
{
var boss = element.GetComponent<Boss>();
if (!boss) continue;
boss.ForceKillBoss();
}
}
public void MovePlayer()
{
if (!GameManager.Instance.CurrentCombatPlayer) return;
GameManager.Instance.CurrentCombatPlayer.transform.position = PlayerSpawnLocation.position;
CombatUiManager.Instance.FieldBossHealthPointUi.SetActiveHpSlider(false);
AudioManager.Instance.StopBgm();
2024-06-03 18:26:03 +00:00
}
public abstract void ResetMap(bool isHardReset = false);
public abstract void RestartMap();
public abstract void ClearMap();
2024-06-03 18:26:03 +00:00
}
}