+ Item관련 Excel, Json, So 수정 + DropItemTable 로직 수정 + 아이템 프리팹에서 Enable Interaction 체크하면 직접 룻팅, 해제하면 자동 룻팅 + 체력회복 아이템 추가 + 개발자 메뉴 상호작용 "F1" 키를 통해 접근 가능 + 보스 맵은 마법진을 상호작용하면 보스전 시작 + 맵 안에서 교전 중일 때, 투명 벽 쉐이더 추가 + 맵 마다의 통로를 통해서 이동 가능 + 선형적인 맵 구조에 맞게 리소스 및 위치 수정 + 타이틀 화면으로 이동할 때 나타나는 오류 수정(CombatUiManager OnDisable 싱글톤 문제) Closes #25, #26
122 lines
3.3 KiB
C#
122 lines
3.3 KiB
C#
using System.Collections.Generic;
|
|
using Sirenix.OdinInspector;
|
|
using UnityEngine;
|
|
|
|
namespace BlueWater.Maps
|
|
{
|
|
public abstract class MapController : MonoBehaviour
|
|
{
|
|
/// 컴포넌트
|
|
[Title("컴포넌트")]
|
|
[SerializeField, Required]
|
|
protected Transform PlayerSpawnLocation;
|
|
|
|
[field: SerializeField, Required]
|
|
public Transform EnemyInstanceLocation { get; private set; }
|
|
|
|
[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;
|
|
|
|
[SerializeField]
|
|
protected Vector2 InitializeFadeInOutTime = new(0.2f, 1f);
|
|
|
|
[SerializeField]
|
|
protected Vector2 ClearFadeInOutTime = new(0.2f, 0.3f);
|
|
|
|
protected Coroutine MapInitializeCoroutineInstance;
|
|
protected static bool IsCleared;
|
|
private bool _isQuitting;
|
|
|
|
private void Awake()
|
|
{
|
|
InitializeComponents();
|
|
}
|
|
|
|
protected virtual void Start()
|
|
{
|
|
|
|
}
|
|
|
|
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();
|
|
|
|
public void OpenMapEntrances()
|
|
{
|
|
foreach (var element in MapEntrances)
|
|
{
|
|
element.OpenMapEntrance();
|
|
}
|
|
}
|
|
|
|
public void CloseMapEntrances()
|
|
{
|
|
foreach (var element in MapEntrances)
|
|
{
|
|
element.CloseMapEntrance();
|
|
}
|
|
}
|
|
|
|
public void DestroyAllEnemies()
|
|
{
|
|
foreach (Transform element in EnemyInstanceLocation)
|
|
{
|
|
Destroy(element.gameObject);
|
|
}
|
|
}
|
|
|
|
public void DestroyAllObjects()
|
|
{
|
|
DestroyAllEnemies();
|
|
|
|
foreach (Transform element in ParticleInstanceLocation)
|
|
{
|
|
Destroy(element.gameObject);
|
|
}
|
|
}
|
|
|
|
public void MovePlayer()
|
|
{
|
|
if (!GameManager.Instance.CurrentCombatPlayer) return;
|
|
|
|
GameManager.Instance.CurrentCombatPlayer.transform.position = PlayerSpawnLocation.position;
|
|
}
|
|
|
|
public abstract void ResetMap(bool isHardReset = false);
|
|
public abstract void RestartMap();
|
|
public abstract void ClearMap();
|
|
}
|
|
} |