You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.3 KiB
C#

using System;
using Unity.BossRoom.Gameplay.GameplayObjects;
using Unity.BossRoom.Gameplay.GameplayObjects.Character;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Assertions;
namespace Unity.BossRoom.Gameplay.Actions
{
[CreateAssetMenu(menuName = "BossRoom/Actions/Revive Action")]
public class ReviveAction : Action
{
private bool m_ExecFired;
private ServerCharacter m_TargetCharacter;
public override bool OnStart(ServerCharacter serverCharacter)
{
if (m_Data.TargetIds == null || m_Data.TargetIds.Length == 0 || !NetworkManager.Singleton.SpawnManager.SpawnedObjects.ContainsKey(m_Data.TargetIds[0]))
{
Debug.Log("Failed to start ReviveAction. The target entity wasn't submitted or doesn't exist anymore");
return false;
}
var targetNetworkObject = NetworkManager.Singleton.SpawnManager.SpawnedObjects[m_Data.TargetIds[0]];
m_TargetCharacter = targetNetworkObject.GetComponent<ServerCharacter>();
serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim);
return true;
}
public override void Reset()
{
base.Reset();
m_ExecFired = false;
m_TargetCharacter = null;
}
public override bool OnUpdate(ServerCharacter clientCharacter)
{
if (!m_ExecFired && Time.time - TimeStarted >= Config.ExecTimeSeconds)
{
m_ExecFired = true;
if (m_TargetCharacter.LifeState == LifeState.Fainted)
{
Assert.IsTrue(Config.Amount > 0, "Revive amount must be greater than 0.");
m_TargetCharacter.Revive(clientCharacter, Config.Amount);
}
else
{
//cancel the action if the target is alive!
Cancel(clientCharacter);
return false;
}
}
return true;
}
public override void Cancel(ServerCharacter serverCharacter)
{
if (!string.IsNullOrEmpty(Config.Anim2))
{
serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim2);
}
}
}
}