디졸브 로직 변경, 보스별로 디졸브 효과 추가
This commit is contained in:
parent
9600505116
commit
da427f4ca3
@ -4137,11 +4137,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
value: -200
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
value: -50
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -6595,11 +6595,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
value: 170
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
value: 30
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -10755,11 +10755,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
value: 30
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -11816,11 +11816,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
value: -200
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
value: -120
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -15485,11 +15485,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
value: 30
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
value: 30
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3997465226346976133, guid: b7ec42093fecf23439afbcf6ebd755db, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
@ -18564,11 +18564,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
value: -200
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
value: 20
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6818895542156988354, guid: 7e26271972658154fa0725b5a06a9d0f, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
|
@ -1,4 +1,5 @@
|
||||
using BlueWater.Interfaces;
|
||||
using System.Collections;
|
||||
using BlueWater.Interfaces;
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
|
||||
@ -78,6 +79,32 @@ namespace BlueWater.Enemies.Bosses
|
||||
|
||||
// Methods
|
||||
#region Methods
|
||||
|
||||
protected override IEnumerator DissolveCoroutine(float start, float end, float dissolveTime)
|
||||
{
|
||||
if (!IsDissolveActive)
|
||||
{
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, end);
|
||||
SpriteRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield break;
|
||||
}
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, start);
|
||||
SpriteRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= dissolveTime)
|
||||
{
|
||||
var value = Mathf.Lerp(start, end, elapsedTime / dissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
SpriteRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, end);
|
||||
SpriteRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
}
|
||||
|
||||
private void FlipVisualLook()
|
||||
{
|
||||
|
@ -1,8 +1,10 @@
|
||||
using BehaviorDesigner.Runtime;
|
||||
using System.Collections;
|
||||
using BehaviorDesigner.Runtime;
|
||||
using BlueWater.Interfaces;
|
||||
using Pathfinding;
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
namespace BlueWater.Enemies.Bosses
|
||||
{
|
||||
@ -76,6 +78,19 @@ namespace BlueWater.Enemies.Bosses
|
||||
|
||||
public IAstarAI AstarAi;
|
||||
protected MaterialPropertyBlock MaterialPropertyBlock;
|
||||
|
||||
[Title("디졸브 스폰 효과")]
|
||||
[SerializeField]
|
||||
protected bool IsDissolveActive = true;
|
||||
|
||||
[SerializeField]
|
||||
protected float SpawnDissolveTime = 2f;
|
||||
|
||||
[SerializeField]
|
||||
protected float DieDissolveTime = 1f;
|
||||
|
||||
// Hashes
|
||||
protected static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
|
||||
|
||||
#endregion
|
||||
|
||||
@ -150,6 +165,7 @@ namespace BlueWater.Enemies.Bosses
|
||||
|
||||
// Abstract methods
|
||||
public virtual void Initialize() { }
|
||||
protected abstract IEnumerator DissolveCoroutine(float start, float end, float dissolveTime);
|
||||
|
||||
protected abstract void Die();
|
||||
|
||||
|
@ -31,16 +31,6 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
|
||||
public BoomBarrelData BoomBarrelData { get; private set; }
|
||||
public GhostBarrelMapController GhostBarrelMapController { get; private set; }
|
||||
|
||||
[Title("효과")]
|
||||
[SerializeField]
|
||||
private float _spawnDissolveTime = 2f;
|
||||
|
||||
[SerializeField]
|
||||
private float _dieDissolveTime = 1f;
|
||||
|
||||
// Hashes
|
||||
private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
|
||||
|
||||
#endregion
|
||||
|
||||
@ -78,26 +68,10 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
BossHealthPoint.Initialize(true, BossData.MaxHealthPoint,
|
||||
BossData.DisplayName, GhostBarrelMapController.ParticleInstanceLocation);
|
||||
BossSkillController.Initialize(BossData.SkillDataList);
|
||||
|
||||
yield return null;
|
||||
|
||||
SpineController.PlayAnimation(BoomBarrelAnimation.Empty.ToString(), false);
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= _spawnDissolveTime)
|
||||
{
|
||||
if (CurrentHealthPoint == 0) yield break;
|
||||
|
||||
var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
|
||||
|
||||
BehaviorTree.EnableBehavior();
|
||||
HitBoxCollider.enabled = true;
|
||||
@ -131,19 +105,7 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
|
||||
//await SpineController.WaitForAnimationCompletion(dieTrack);
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= _dieDissolveTime)
|
||||
{
|
||||
var value = Mathf.Lerp(1f, 0f, elapsedTime / _dieDissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
|
||||
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
@ -32,16 +32,6 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
|
||||
public GhostBarrelData GhostBarrelData { get; private set; }
|
||||
public GhostBarrelMapController GhostBarrelMapController { get; private set; }
|
||||
|
||||
[Title("효과")]
|
||||
[SerializeField]
|
||||
private float _spawnDissolveTime = 2f;
|
||||
|
||||
[SerializeField]
|
||||
private float _dieDissolveTime = 1f;
|
||||
|
||||
// Hashes
|
||||
private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
|
||||
|
||||
#endregion
|
||||
|
||||
@ -85,21 +75,7 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
|
||||
SpineController.PlayAnimation(BoomBarrelAnimation.In.ToString(), false);
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= _spawnDissolveTime)
|
||||
{
|
||||
if (CurrentHealthPoint == 0) yield break;
|
||||
|
||||
var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
|
||||
|
||||
BehaviorTree.EnableBehavior();
|
||||
HitBoxCollider.enabled = true;
|
||||
@ -135,19 +111,7 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
|
||||
//await SpineController.WaitForAnimationCompletion(dieTrack);
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= _dieDissolveTime)
|
||||
{
|
||||
var value = Mathf.Lerp(1f, 0f, elapsedTime / _dieDissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
|
||||
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
@ -31,16 +31,6 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
|
||||
public LavaBarrelData LavaBarrelData { get; private set; }
|
||||
public GhostBarrelMapController GhostBarrelMapController { get; private set; }
|
||||
|
||||
[Title("효과")]
|
||||
[SerializeField]
|
||||
private float _spawnDissolveTime = 2f;
|
||||
|
||||
[SerializeField]
|
||||
private float _dieDissolveTime = 1f;
|
||||
|
||||
// Hashes
|
||||
private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
|
||||
|
||||
#endregion
|
||||
|
||||
@ -79,25 +69,9 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
BossData.DisplayName, GhostBarrelMapController.ParticleInstanceLocation);
|
||||
BossSkillController.Initialize(BossData.SkillDataList);
|
||||
|
||||
yield return null;
|
||||
|
||||
SpineController.PlayAnimation(BoomBarrelAnimation.Empty.ToString(), false);
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= _spawnDissolveTime)
|
||||
{
|
||||
if (CurrentHealthPoint == 0) yield break;
|
||||
|
||||
var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
|
||||
|
||||
BehaviorTree.EnableBehavior();
|
||||
HitBoxCollider.enabled = true;
|
||||
@ -131,19 +105,7 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
|
||||
//await SpineController.WaitForAnimationCompletion(dieTrack);
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= _dieDissolveTime)
|
||||
{
|
||||
var value = Mathf.Lerp(1f, 0f, elapsedTime / _dieDissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
|
||||
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
@ -31,16 +31,6 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
|
||||
public SwordBarrelData SwordBarrelData { get; private set; }
|
||||
public GhostBarrelMapController GhostBarrelMapController { get; private set; }
|
||||
|
||||
[Title("효과")]
|
||||
[SerializeField]
|
||||
private float _spawnDissolveTime = 2f;
|
||||
|
||||
[SerializeField]
|
||||
private float _dieDissolveTime = 1f;
|
||||
|
||||
// Hashes
|
||||
private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
|
||||
|
||||
#endregion
|
||||
|
||||
@ -78,26 +68,10 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
BossHealthPoint.Initialize(true, BossData.MaxHealthPoint,
|
||||
BossData.DisplayName, GhostBarrelMapController.ParticleInstanceLocation);
|
||||
BossSkillController.Initialize(BossData.SkillDataList);
|
||||
|
||||
yield return null;
|
||||
|
||||
SpineController.PlayAnimation(BoomBarrelAnimation.Empty.ToString(), false);
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= _spawnDissolveTime)
|
||||
{
|
||||
if (CurrentHealthPoint == 0) yield break;
|
||||
|
||||
var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
|
||||
|
||||
BehaviorTree.EnableBehavior();
|
||||
HitBoxCollider.enabled = true;
|
||||
@ -131,19 +105,7 @@ namespace BlueWater.Enemies.Bosses.GhostBarrel
|
||||
|
||||
//await SpineController.WaitForAnimationCompletion(dieTrack);
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= _dieDissolveTime)
|
||||
{
|
||||
var value = Mathf.Lerp(1f, 0f, elapsedTime / _dieDissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
|
||||
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using BlueWater.Items;
|
||||
using System.Collections;
|
||||
using BlueWater.Items;
|
||||
using BlueWater.Maps;
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
@ -36,23 +37,37 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros
|
||||
RhinocerosData = BossData as RhinocerosData;
|
||||
BossMapController = MapManager.Instance.RhinocerosMapController;
|
||||
}
|
||||
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
StartCoroutine(InitializeCoroutine());
|
||||
}
|
||||
|
||||
private IEnumerator InitializeCoroutine()
|
||||
{
|
||||
BossHealthPoint.Initialize(true, RhinocerosData.MaxHealthPoint,
|
||||
RhinocerosData.DisplayName, BossMapController.ParticleInstanceLocation);
|
||||
BossSkillController.Initialize(BossData.SkillDataList);
|
||||
SetMoveSpeed(RhinocerosData.MoveSpeed);
|
||||
StopMove();
|
||||
|
||||
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
|
||||
|
||||
BehaviorTree.EnableBehavior();
|
||||
HitBoxCollider.enabled = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// Methods
|
||||
#region Methods
|
||||
|
||||
protected override void Die()
|
||||
{
|
||||
StartCoroutine(DieCoroutine());
|
||||
}
|
||||
|
||||
protected override async void Die()
|
||||
private IEnumerator DieCoroutine()
|
||||
{
|
||||
BossSkillController.StopAllCoroutine();
|
||||
BehaviorTree.DisableBehavior();
|
||||
@ -67,10 +82,10 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros
|
||||
|
||||
AnimationController.SetAnimationTrigger("isDead");
|
||||
BossMapController.ClearMap(gameObject);
|
||||
while (AnimationController.GetCurrentAnimationNormalizedTime() <= 1f)
|
||||
{
|
||||
await Awaitable.NextFrameAsync();
|
||||
}
|
||||
|
||||
yield return new WaitUntil(() => AnimationController.GetCurrentAnimationNormalizedTime() >= 1f);
|
||||
|
||||
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
|
||||
|
||||
ItemManager.Instance.ItemDropRandomPosition(BossData.CharacterIdx, transform.position);
|
||||
Destroy(gameObject);
|
||||
|
@ -7,20 +7,6 @@ namespace BlueWater.Enemies.Bosses.SandMole
|
||||
{
|
||||
public class MiniSandMole : SandMole
|
||||
{
|
||||
// Variables
|
||||
#region Variables
|
||||
[Title("효과")]
|
||||
[SerializeField]
|
||||
private float _spawnDissolveTime = 2f;
|
||||
|
||||
//[SerializeField]
|
||||
//private float _dieDissolveTime = 1f;
|
||||
|
||||
// Hashes
|
||||
private static readonly int _dissolveValueHash = Shader.PropertyToID("_DissolveValue");
|
||||
|
||||
#endregion
|
||||
|
||||
// Initialize methods
|
||||
#region Initialize methods
|
||||
|
||||
@ -28,11 +14,6 @@ namespace BlueWater.Enemies.Bosses.SandMole
|
||||
{
|
||||
StartCoroutine(InitializeCoroutine());
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// Methods
|
||||
#region Methods
|
||||
|
||||
private IEnumerator InitializeCoroutine()
|
||||
{
|
||||
@ -43,21 +24,7 @@ namespace BlueWater.Enemies.Bosses.SandMole
|
||||
SetMoveSpeed(SandMoleData.MoveSpeed);
|
||||
StopMove();
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 0f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= _spawnDissolveTime)
|
||||
{
|
||||
if (CurrentHealthPoint == 0) yield break;
|
||||
|
||||
var value = Mathf.Lerp(0f, 1f, elapsedTime / _spawnDissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, 1f);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
|
||||
|
||||
SpineController.SetSkin(SandMoleSkin.Normal.ToString());
|
||||
var isRoar = false;
|
||||
@ -79,7 +46,17 @@ namespace BlueWater.Enemies.Bosses.SandMole
|
||||
HitBoxCollider.enabled = true;
|
||||
}
|
||||
|
||||
protected override async void Die()
|
||||
#endregion
|
||||
|
||||
// Methods
|
||||
#region Methods
|
||||
|
||||
protected override void Die()
|
||||
{
|
||||
StartCoroutine(DieCoroutine());
|
||||
}
|
||||
|
||||
private IEnumerator DieCoroutine()
|
||||
{
|
||||
BossSkillController.StopAllCoroutine();
|
||||
SandMoleStatus.StopAllCoroutine();
|
||||
@ -95,8 +72,11 @@ namespace BlueWater.Enemies.Bosses.SandMole
|
||||
|
||||
SpineController.SetSkin(SandMoleSkin.Idle.ToString());
|
||||
var dieTrack = SpineController.PlayAnimation(SandMoleAnimation.Die.ToString(), false);
|
||||
|
||||
yield return new WaitUntil(() => dieTrack.IsComplete);
|
||||
|
||||
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
|
||||
|
||||
await SpineController.WaitForAnimationCompletion(dieTrack);
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
|
@ -98,12 +98,7 @@ namespace BlueWater.Enemies.Bosses.SandMole
|
||||
{
|
||||
StartCoroutine(InitializeCoroutine());
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// Methods
|
||||
#region Methods
|
||||
|
||||
|
||||
private IEnumerator InitializeCoroutine()
|
||||
{
|
||||
HitBoxCollider.enabled = false;
|
||||
@ -114,6 +109,8 @@ namespace BlueWater.Enemies.Bosses.SandMole
|
||||
SetMoveSpeed(SandMoleData.MoveSpeed);
|
||||
StopMove();
|
||||
|
||||
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
|
||||
|
||||
SpineController.SetSkin(SandMoleSkin.Normal.ToString());
|
||||
var isCameraShakeActive = false;
|
||||
var roarTrack = SpineController.PlayAnimation(SandMoleAnimation.Roar.ToString(), false);
|
||||
@ -135,7 +132,17 @@ namespace BlueWater.Enemies.Bosses.SandMole
|
||||
HitBoxCollider.enabled = true;
|
||||
}
|
||||
|
||||
protected override async void Die()
|
||||
#endregion
|
||||
|
||||
// Methods
|
||||
#region Methods
|
||||
|
||||
protected override void Die()
|
||||
{
|
||||
StartCoroutine(DieCoroutine());
|
||||
}
|
||||
|
||||
private IEnumerator DieCoroutine()
|
||||
{
|
||||
BossSkillController.StopAllCoroutine();
|
||||
SandMoleStatus.StopAllCoroutine();
|
||||
@ -152,8 +159,11 @@ namespace BlueWater.Enemies.Bosses.SandMole
|
||||
SpineController.SetSkin(SandMoleSkin.Idle.ToString());
|
||||
var dieTrack = SpineController.PlayAnimation(SandMoleAnimation.Die.ToString(), false);
|
||||
SandMoleMapController.ClearMap(gameObject);
|
||||
|
||||
yield return new WaitUntil(() => dieTrack.IsComplete);
|
||||
|
||||
yield return StartCoroutine(DissolveCoroutine(1f, 0f, DieDissolveTime));
|
||||
|
||||
await SpineController.WaitForAnimationCompletion(dieTrack);
|
||||
ItemManager.Instance.ItemDropRandomPosition(BossData.CharacterIdx, transform.position);
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using BlueWater.Interfaces;
|
||||
using System.Collections;
|
||||
using BlueWater.Interfaces;
|
||||
using BlueWater.Players;
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
@ -64,6 +65,32 @@ namespace BlueWater.Enemies.Bosses
|
||||
|
||||
// Methods
|
||||
#region Methods
|
||||
|
||||
protected override IEnumerator DissolveCoroutine(float start, float end, float dissolveTime)
|
||||
{
|
||||
if (!IsDissolveActive)
|
||||
{
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, end);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
yield break;
|
||||
}
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, start);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
|
||||
var elapsedTime = 0f;
|
||||
while (elapsedTime <= dissolveTime)
|
||||
{
|
||||
var value = Mathf.Lerp(start, end, elapsedTime / dissolveTime);
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, value);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
elapsedTime += Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
|
||||
MaterialPropertyBlock.SetFloat(_dissolveValueHash, end);
|
||||
MeshRenderer.SetPropertyBlock(MaterialPropertyBlock);
|
||||
}
|
||||
|
||||
protected virtual void FlipVisualLook()
|
||||
{
|
||||
|
@ -1,3 +1,4 @@
|
||||
using System.Collections;
|
||||
using BlueWater.Items;
|
||||
using BlueWater.Maps;
|
||||
using Sirenix.OdinInspector;
|
||||
@ -40,18 +41,31 @@ namespace BlueWater.Enemies.Bosses.TitanSlime
|
||||
|
||||
public void Initialize(int level, bool hasRabbit)
|
||||
{
|
||||
StartCoroutine(InitializeCoroutine(level, hasRabbit));
|
||||
}
|
||||
|
||||
private IEnumerator InitializeCoroutine(int level, bool hasRabbit)
|
||||
{
|
||||
HitBoxCollider.enabled = false;
|
||||
_rabbit.enabled = false;
|
||||
var titanSlimeState = TitanSlimeData.TitanSlimeState.Find(list => list.Level == level);
|
||||
TitanSlimeState = new TitanSlimeState(titanSlimeState, hasRabbit);
|
||||
transform.localScale = Vector3.one * TitanSlimeState.Size;
|
||||
_rabbit.enabled = TitanSlimeState.HasRabbit;
|
||||
MinCoolDown = TitanSlimeState.RandomCooldown.x;
|
||||
MaxCoolDown = TitanSlimeState.RandomCooldown.y;
|
||||
|
||||
BossHealthPoint.Initialize(TitanSlimeState.HasRabbit, TitanSlimeState.MaxHp,
|
||||
TitanSlimeData.DisplayName, _titanSlimeMapController.ParticleInstanceLocation);
|
||||
BossSkillController.Initialize(BossData.SkillDataList);
|
||||
|
||||
if (TitanSlimeState.HasRabbit && titanSlimeState.Level == 1)
|
||||
{
|
||||
yield return StartCoroutine(DissolveCoroutine(0f, 1f, SpawnDissolveTime));
|
||||
}
|
||||
_rabbit.enabled = TitanSlimeState.HasRabbit;
|
||||
|
||||
BehaviorTree.EnableBehavior();
|
||||
HitBoxCollider.enabled = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
Loading…
Reference in New Issue
Block a user