using System;
using System.Collections.Generic;
using Unity.BossRoom.Gameplay.GameplayObjects.Character;
using Unity.BossRoom.VisualEffects;
namespace Unity.BossRoom.Gameplay.Actions
{
public partial class ChargedLaunchProjectileAction
{
///
/// A list of the special particle graphics we spawned.
///
///
/// Performance note: repeatedly creating and destroying GameObjects is not optimal, and on low-resource platforms
/// (like mobile devices), it can lead to major performance problems. On mobile platforms, visual graphics should
/// use object-pooling (i.e. reusing the same GameObjects repeatedly). But that's outside the scope of this demo.
///
private List m_Graphics = new List();
private bool m_ChargeEnded;
public override bool OnStartClient(ClientCharacter clientCharacter)
{
base.OnStartClient(clientCharacter);
m_Graphics = InstantiateSpecialFXGraphics(clientCharacter.transform, true);
return true;
}
public override bool OnUpdateClient(ClientCharacter clientCharacter)
{
return !m_ChargeEnded;
}
public override void CancelClient(ClientCharacter clientCharacter)
{
if (!m_ChargeEnded)
{
foreach (var graphic in m_Graphics)
{
if (graphic)
{
graphic.Shutdown();
}
}
}
}
public override void OnStoppedChargingUpClient(ClientCharacter clientCharacter, float finalChargeUpPercentage)
{
m_ChargeEnded = true;
foreach (var graphic in m_Graphics)
{
if (graphic)
{
graphic.Shutdown();
}
}
// the graphics will now take care of themselves and shutdown, so we can forget about 'em
m_Graphics.Clear();
}
}
}