100 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
} |