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.
71 lines
2.6 KiB
C#
71 lines
2.6 KiB
C#
using System;
|
|
using Unity.BossRoom.Gameplay.GameplayObjects.Character;
|
|
using Unity.BossRoom.VisualEffects;
|
|
using UnityEngine;
|
|
|
|
namespace Unity.BossRoom.Gameplay.Actions
|
|
{
|
|
public partial class ChargedShieldAction
|
|
{
|
|
/// <summary>
|
|
/// The "charging up" graphics. These are disabled as soon as the player stops charging up
|
|
/// </summary>
|
|
SpecialFXGraphic m_ChargeGraphics;
|
|
|
|
/// <summary>
|
|
/// The "I'm fully charged" graphics. This is null until instantiated
|
|
/// </summary>
|
|
SpecialFXGraphic m_ShieldGraphics;
|
|
|
|
public override bool OnUpdateClient(ClientCharacter clientCharacter)
|
|
{
|
|
return IsChargingUp() || (Time.time - m_StoppedChargingUpTime) < Config.EffectDurationSeconds;
|
|
}
|
|
|
|
public override void CancelClient(ClientCharacter clientCharacter)
|
|
{
|
|
if (IsChargingUp())
|
|
{
|
|
// we never actually stopped "charging up" so do necessary clean up here
|
|
if (m_ChargeGraphics)
|
|
{
|
|
m_ChargeGraphics.Shutdown();
|
|
}
|
|
}
|
|
|
|
if (m_ShieldGraphics)
|
|
{
|
|
m_ShieldGraphics.Shutdown();
|
|
}
|
|
}
|
|
|
|
public override void OnStoppedChargingUpClient(ClientCharacter clientCharacter, float finalChargeUpPercentage)
|
|
{
|
|
if (!IsChargingUp()) { return; }
|
|
|
|
m_StoppedChargingUpTime = Time.time;
|
|
if (m_ChargeGraphics)
|
|
{
|
|
m_ChargeGraphics.Shutdown();
|
|
m_ChargeGraphics = null;
|
|
}
|
|
|
|
// if fully charged, we show a special graphic
|
|
if (Mathf.Approximately(finalChargeUpPercentage, 1))
|
|
{
|
|
m_ShieldGraphics = InstantiateSpecialFXGraphic(Config.Spawns[1], clientCharacter.transform, true);
|
|
}
|
|
}
|
|
|
|
public override void AnticipateActionClient(ClientCharacter clientCharacter)
|
|
{
|
|
// because this action can be visually started and stopped as often and as quickly as the player wants, it's possible
|
|
// for several copies of this action to be playing at once. This can lead to situations where several
|
|
// dying versions of the action raise the end-trigger, but the animator only lowers it once, leaving the trigger
|
|
// in a raised state. So we'll make sure that our end-trigger isn't raised yet. (Generally a good idea anyway.)
|
|
clientCharacter.OurAnimator.ResetTrigger(Config.Anim2);
|
|
base.AnticipateActionClient(clientCharacter);
|
|
}
|
|
}
|
|
}
|