A player ability that shows an eye-tint indicator for Flipper's dash recharge state. It creates a TwinAbilityEyeTint GameObject on spawn, updates its animation and tint based on player state, and destroys it on removal or death.
namespace BlockParty;
/// <summary>Shows whether Flipper's invert-recharged dash is currently available.</summary>
public sealed class FlipperDashEyeTintAbility : PlayerAbility
{
private static readonly Color EMPTY_DASH_EYE_TINT = new( 0.86f, 0.18f, 0.18f, 0.82f );
private TwinAbilityEyeTint _eyeTint;
public override void OnSpawn( Player player )
{
var tintObject = new GameObject( true, "flipper dash eye tint" );
tintObject.SetParent( player.GameObject );
tintObject.LocalPosition = Vector3.Zero;
_eyeTint = tintObject.Components.Create<TwinAbilityEyeTint>();
_eyeTint.Setup( player, adjustTwinOneWalk: false, eyeLeft: 5, eyeTop: 3, eyeWidth: 5, eyeHeight: 4 );
}
public override void OnRemoved( Player player )
{
_eyeTint?.GameObject?.Destroy();
_eyeTint = null;
}
public override void OnDeath( Player player )
{
if ( _eyeTint is not null ) _eyeTint.Tint = Color.Transparent;
}
public override void OnAnimationChanged( Player player, string animation )
{
_eyeTint?.SetAnimation( animation );
}
public override void PostTick( Player player, float dt )
{
if ( _eyeTint is not null )
_eyeTint.Tint = player.DashCharged ? Color.Transparent : EMPTY_DASH_EYE_TINT;
}
}