using System.Collections.Generic; using BlueWater.Enemies.Bosses; using BlueWater.Enemies.Bosses.Rhinoceros; using BlueWater.Enemies.Bosses.TitanSlime; using Sirenix.OdinInspector; using UnityEngine; namespace BlueWater.Enemies { public class EnemyManager : Singleton { [SerializeField, Required] private BossConfigurationSo _bossConfigurationSo; public Dictionary 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(_bossConfigurationSo.BossConfigurationList.Count); foreach (var element in _bossConfigurationSo.BossConfigurationList) { BossConfigurationDictionary.Add(element.BossType, element.Prefab); } } // TitanSlime public TitanSlime InstantiateTitanSlime(Vector3 spawnPosition, int level, bool hasRabbit, Transform instantiateLocation = null) { if (!BossConfigurationDictionary.TryGetValue(BossType.Slime, out var titanSlimeObject)) { Debug.LogError($"보스 생성 오류 : 키값 {BossType.Slime}을(를) 확인해주세요."); return null; } var instantiateBoss = Instantiate(titanSlimeObject, spawnPosition, Quaternion.identity, instantiateLocation).GetComponent(); 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); } // Rhinoceros public Rhinoceros InstantiateRhinoceros(Vector3 spawnPosition, Transform instantiateLocation = null) { if (!BossConfigurationDictionary.TryGetValue(BossType.Rhinoceros, out var bossConfiguration)) { Debug.LogError($"보스 생성 오류 : 키값 {BossType.Rhinoceros}을(를) 확인해주세요."); return null; } var instantiateBoss = Instantiate(bossConfiguration, spawnPosition, Quaternion.identity, instantiateLocation).GetComponent(); instantiateBoss.Initialize(); return instantiateBoss; } } }