2024-06-21 22:11:53 +00:00
|
|
|
using System.Collections.Generic;
|
2024-06-03 18:26:03 +00:00
|
|
|
using Sirenix.OdinInspector;
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
namespace BlueWater.Maps
|
|
|
|
{
|
|
|
|
public abstract class MapController : MonoBehaviour
|
|
|
|
{
|
|
|
|
/// 컴포넌트
|
|
|
|
[Title("컴포넌트")]
|
|
|
|
[SerializeField, Required]
|
2024-06-21 22:11:53 +00:00
|
|
|
protected Transform PlayerSpawnLocation;
|
2024-06-03 18:26:03 +00:00
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
[field: SerializeField, Required]
|
|
|
|
public Transform EnemyInstanceLocation { get; private set; }
|
2024-06-03 18:26:03 +00:00
|
|
|
|
|
|
|
[field: SerializeField]
|
2024-06-21 22:11:53 +00:00
|
|
|
public Transform ParticleInstanceLocation { get; private set; }
|
|
|
|
|
|
|
|
[SerializeField]
|
|
|
|
protected Transform MapEntranceLocations;
|
|
|
|
|
|
|
|
[SerializeField]
|
|
|
|
protected List<MapEntrance> MapEntrances;
|
2024-06-13 16:46:37 +00:00
|
|
|
|
|
|
|
[SerializeField]
|
|
|
|
protected SaveStage SaveStage;
|
|
|
|
|
|
|
|
[SerializeField]
|
2024-06-21 22:11:53 +00:00
|
|
|
protected string BgmName;
|
2024-06-03 18:26:03 +00:00
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
[SerializeField]
|
|
|
|
protected Vector2 InitializeFadeInOutTime = new(0.2f, 1f);
|
2024-06-03 18:26:03 +00:00
|
|
|
|
2024-06-21 22:11:53 +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
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
InitializeComponents();
|
2024-06-03 18:26:03 +00:00
|
|
|
}
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
protected virtual void Start()
|
2024-06-03 18:26:03 +00:00
|
|
|
{
|
2024-06-21 22:11:53 +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
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
public void OpenMapEntrances()
|
|
|
|
{
|
|
|
|
foreach (var element in MapEntrances)
|
2024-06-03 18:26:03 +00:00
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
element.OpenMapEntrance();
|
2024-06-03 18:26:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
public void CloseMapEntrances()
|
2024-06-03 18:26:03 +00:00
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
foreach (var element in MapEntrances)
|
2024-06-03 18:26:03 +00:00
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
element.CloseMapEntrance();
|
2024-06-03 18:26:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
public void DestroyAllEnemies()
|
|
|
|
{
|
|
|
|
foreach (Transform element in EnemyInstanceLocation)
|
2024-06-03 18:26:03 +00:00
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
Destroy(element.gameObject);
|
2024-06-03 18:26:03 +00:00
|
|
|
}
|
2024-06-21 22:11:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void DestroyAllObjects()
|
|
|
|
{
|
|
|
|
DestroyAllEnemies();
|
|
|
|
|
|
|
|
foreach (Transform element in ParticleInstanceLocation)
|
2024-06-03 18:26:03 +00:00
|
|
|
{
|
2024-06-21 22:11:53 +00:00
|
|
|
Destroy(element.gameObject);
|
2024-06-03 18:26:03 +00:00
|
|
|
}
|
2024-06-21 22:11:53 +00:00
|
|
|
}
|
2024-06-03 18:26:03 +00:00
|
|
|
|
2024-06-21 22:11:53 +00:00
|
|
|
public void MovePlayer()
|
|
|
|
{
|
|
|
|
if (!GameManager.Instance.CurrentCombatPlayer) return;
|
|
|
|
|
|
|
|
GameManager.Instance.CurrentCombatPlayer.transform.position = PlayerSpawnLocation.position;
|
2024-06-03 18:26:03 +00:00
|
|
|
}
|
2024-06-21 22:11:53 +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
|
|
|
}
|
|
|
|
}
|