Files
2024-11-20 15:21:28 +01:00

100 lines
1.9 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Effects)]
[Tooltip("Randomly flickers a Game Object on/off.")]
public class Flicker : ComponentAction<Renderer>
{
[RequiredField]
[Tooltip("The GameObject to flicker.")]
public FsmOwnerDefault gameObject;
[HasFloatSlider(0, 1)]
[Tooltip("The frequency of the flicker in seconds.")]
public FsmFloat frequency;
[HasFloatSlider(0, 1)]
[Tooltip("Amount of time flicker is On (0-1). E.g. Use 0.95 for an occasional flicker.")]
public FsmFloat amountOn;
[Tooltip("Only effect the renderer, leaving other components active.")]
public bool rendererOnly;
[Tooltip("Ignore time scale. Useful if flickering UI when the game is paused.")]
public bool realTime;
private float startTime;
private float timer;
public override void Reset()
{
gameObject = null;
frequency = 0.1f;
amountOn = 0.5f;
rendererOnly = true;
realTime = false;
}
public override void OnEnter()
{
startTime = FsmTime.RealtimeSinceStartup;
timer = 0f;
}
public override void OnUpdate()
{
// get target
var go = Fsm.GetOwnerDefaultTarget(gameObject);
if (go == null)
{
return;
}
// update time
if (realTime)
{
timer = FsmTime.RealtimeSinceStartup - startTime;
}
else
{
timer += Time.deltaTime;
}
if (timer > frequency.Value)
{
var on = Random.Range(0f,1f) < amountOn.Value;
// do flicker
if (rendererOnly)
{
if (UpdateCache(go))
{
renderer.enabled = on;
}
}
else
{
#if UNITY_3_5 || UNITY_3_4
go.active = on;
#else
go.SetActive(on);
#endif
}
// reset timer
startTime = timer;
timer = 0;
}
}
}
}