2024-05-08 00:28:04 +00:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using BlueWaterProject;
|
|
|
|
using Sirenix.OdinInspector;
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
// ReSharper disable once CheckNamespace
|
|
|
|
public class SlimeBossMapController : MonoBehaviour
|
|
|
|
{
|
|
|
|
// 컴포넌트
|
|
|
|
[Title("컴포넌트")]
|
|
|
|
[SerializeField] private Transform playerSpawnTransform;
|
|
|
|
[SerializeField] private Transform bossSpawnTransform;
|
|
|
|
[SerializeField] private Transform bossInstantiateTransform;
|
|
|
|
[SerializeField] private TitanSlime bossPrefab;
|
|
|
|
[SerializeField] private List<SlimeState> slimeStateList = new(5);
|
2024-05-11 21:29:16 +00:00
|
|
|
[field: SerializeField] public Transform ParticleInstantiateLocation { get; private set; }
|
|
|
|
|
|
|
|
// 추가 설정
|
|
|
|
[Title("추가 설정")]
|
|
|
|
[SerializeField] private float splitPower = 500f;
|
|
|
|
[SerializeField] private Vector3 leftSplitDirection = new(-1, 1, 0);
|
|
|
|
[SerializeField] private Vector3 rightSplitDirection = new(1, 1, 0);
|
2024-05-08 00:28:04 +00:00
|
|
|
|
|
|
|
private List<GameObject> bossInstanceList = new(10);
|
|
|
|
|
|
|
|
public void InitBossMap()
|
|
|
|
{
|
2024-05-11 21:29:16 +00:00
|
|
|
DataManager.Inst.CurrentSaveStage = SaveStage.SLIME;
|
|
|
|
AllDestroyObjects();
|
2024-05-08 00:28:04 +00:00
|
|
|
bossInstanceList = new List<GameObject>(10);
|
|
|
|
|
|
|
|
var player = GameObject.FindWithTag("CombatPlayer");
|
|
|
|
if (player && playerSpawnTransform)
|
|
|
|
{
|
|
|
|
player.transform.position = playerSpawnTransform.position;
|
|
|
|
}
|
|
|
|
|
|
|
|
InstantiateSlime(bossSpawnTransform.position, 1, true);
|
|
|
|
}
|
|
|
|
|
2024-05-11 21:29:16 +00:00
|
|
|
private TitanSlime InstantiateSlime(Vector3 instantiatePosition, int level, bool hasRabbit)
|
2024-05-08 00:28:04 +00:00
|
|
|
{
|
|
|
|
var instantiateBoss = Instantiate(bossPrefab, instantiatePosition, Quaternion.identity, bossInstantiateTransform);
|
|
|
|
var slimeState = slimeStateList.Find((list) => list.Level == level);
|
|
|
|
instantiateBoss.Init(slimeState, hasRabbit);
|
|
|
|
|
2024-05-11 21:29:16 +00:00
|
|
|
CombatUiManager.Inst.FieldBossHpSlider.SetHpSlider(instantiateBoss.MaxHp, instantiateBoss.BossName);
|
2024-05-08 00:28:04 +00:00
|
|
|
|
|
|
|
bossInstanceList.Add(instantiateBoss.gameObject);
|
2024-05-11 21:29:16 +00:00
|
|
|
|
|
|
|
return instantiateBoss;
|
2024-05-08 00:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void SpawnSplitSlimes(Vector3 deathPosition, int nextLevel, bool hasRabbit)
|
|
|
|
{
|
2024-05-11 21:29:16 +00:00
|
|
|
var instantiateBossLeft = InstantiateSlime(deathPosition, nextLevel, hasRabbit);
|
|
|
|
var instantiateBossRight = InstantiateSlime(deathPosition, nextLevel, false);
|
|
|
|
|
|
|
|
instantiateBossLeft.AddForce(leftSplitDirection, splitPower, ForceMode.Impulse);
|
|
|
|
instantiateBossRight.AddForce(rightSplitDirection, splitPower, ForceMode.Impulse);
|
2024-05-08 00:28:04 +00:00
|
|
|
}
|
|
|
|
|
2024-05-11 21:29:16 +00:00
|
|
|
public void AllDestroyBoss()
|
2024-05-08 00:28:04 +00:00
|
|
|
{
|
|
|
|
foreach (var element in bossInstanceList)
|
|
|
|
{
|
|
|
|
Destroy(element);
|
|
|
|
}
|
|
|
|
}
|
2024-05-11 21:29:16 +00:00
|
|
|
|
|
|
|
public void AllDestroyObjects()
|
|
|
|
{
|
|
|
|
foreach (var element in bossInstanceList)
|
|
|
|
{
|
|
|
|
Destroy(element);
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach (Transform element in ParticleInstantiateLocation)
|
|
|
|
{
|
|
|
|
Destroy(element.gameObject);
|
|
|
|
}
|
|
|
|
}
|
2024-05-08 00:28:04 +00:00
|
|
|
}
|