CapersProject/Assets/02.Scripts/Character/Enemy/EnemyManager.cs

95 lines
3.9 KiB
C#
Raw Normal View History

2024-06-03 18:26:03 +00:00
using System.Collections.Generic;
using BlueWater.Enemies.Bosses;
using BlueWater.Enemies.Bosses.Rhinoceros;
using BlueWater.Enemies.Bosses.SandMole;
2024-06-03 18:26:03 +00:00
using BlueWater.Enemies.Bosses.TitanSlime;
using Sirenix.OdinInspector;
using UnityEngine;
namespace BlueWater.Enemies
{
public class EnemyManager : Singleton<EnemyManager>
{
[SerializeField, Required]
private BossConfigurationSo _bossConfigurationSo;
public Dictionary<BossType, GameObject> BossConfigurationDictionary { get; private set; }
[Title("타이탄 슬라임 설정")]
[SerializeField]
private float _splitPower = 500f;
[SerializeField]
private Vector3 _leftSplitDirection = new(-0.5f, 1f, 0);
[SerializeField]
private Vector3 _rightSplitDirection = new(0.5f, 1f, 0);
protected override void OnAwake()
{
InitializeDictionary();
}
private void InitializeDictionary()
{
BossConfigurationDictionary = new Dictionary<BossType, GameObject>(_bossConfigurationSo.BossConfigurationList.Count);
foreach (var element in _bossConfigurationSo.BossConfigurationList)
{
BossConfigurationDictionary.Add(element.BossType, element.Prefab);
}
}
// Public Instantiate
public Boss InstantiateBoss(BossType bossType, Vector3 spawnPosition, Transform instantiateLocation = null)
{
if (!BossConfigurationDictionary.TryGetValue(bossType, out var bossConfiguration))
{
Debug.LogError($"보스 생성 오류 : 키값 {bossType}을(를) 확인해주세요.");
return null;
}
var instantiateBoss = Instantiate(bossConfiguration, spawnPosition, Quaternion.identity, instantiateLocation).GetComponent<Boss>();
instantiateBoss.Initialize();
return instantiateBoss;
}
2024-06-03 18:26:03 +00:00
// TitanSlime
public TitanSlime InstantiateTitanSlime(Vector3 spawnPosition, int level, bool hasRabbit, Transform instantiateLocation = null)
{
if (!BossConfigurationDictionary.TryGetValue(BossType.TitanSlime, out var titanSlimeObject))
2024-06-03 18:26:03 +00:00
{
Debug.LogError($"보스 생성 오류 : 키값 {BossType.TitanSlime}을(를) 확인해주세요.");
2024-06-03 18:26:03 +00:00
return null;
}
var instantiateBoss = Instantiate(titanSlimeObject, spawnPosition, Quaternion.identity, instantiateLocation).GetComponent<TitanSlime>();
instantiateBoss.Initialize(level, hasRabbit);
return instantiateBoss;
}
public void SpawnSplitSlimes(Vector3 deathPosition, int nextLevel, bool hasRabbit, Transform instantiateLocation = null)
{
var instantiateBossLeft = InstantiateTitanSlime(deathPosition, nextLevel, hasRabbit, instantiateLocation);
var instantiateBossRight = InstantiateTitanSlime(deathPosition, nextLevel, false, instantiateLocation);
instantiateBossLeft.AddForce(_leftSplitDirection * _splitPower, ForceMode.Impulse);
instantiateBossRight.AddForce(_rightSplitDirection * _splitPower, ForceMode.Impulse);
}
// MiniSandMole
public MiniSandMole InstantiateMiniSandMole(Vector3 spawnPosition, Transform instantiateLocation = null)
{
if (!BossConfigurationDictionary.TryGetValue(BossType.MiniSandMole, out var bossConfiguration))
{
Debug.LogError($"보스 생성 오류 : 키값 {BossType.MiniSandMole}을(를) 확인해주세요.");
return null;
}
var instantiateBoss = Instantiate(bossConfiguration, spawnPosition, Quaternion.identity, instantiateLocation).GetComponent<MiniSandMole>();
instantiateBoss.Initialize();
return instantiateBoss;
}
2024-06-03 18:26:03 +00:00
}
}