230 lines
5.4 KiB
C#
230 lines
5.4 KiB
C#
// (c) copyright Hutong Games, LLC 2010-2012. All rights reserved.
|
|
|
|
using UnityEngine;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[Tooltip("Base class for actions that want to run a sub FSM.")]
|
|
public abstract class RunFSMAction : FsmStateAction
|
|
{
|
|
protected Fsm runFsm;
|
|
|
|
public override void Reset()
|
|
{
|
|
runFsm = null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Forward global events to the sub FSM
|
|
/// </summary>
|
|
public override bool Event(FsmEvent fsmEvent)
|
|
{
|
|
if (runFsm != null && (fsmEvent.IsGlobal || fsmEvent.IsSystemEvent))
|
|
{
|
|
runFsm.Event(fsmEvent);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Start the FSM on entering the state
|
|
/// </summary>
|
|
public override void OnEnter()
|
|
{
|
|
if (runFsm == null)
|
|
{
|
|
Finish();
|
|
return;
|
|
}
|
|
|
|
runFsm.OnEnable();
|
|
|
|
if (!runFsm.Started)
|
|
{
|
|
runFsm.Start();
|
|
}
|
|
|
|
CheckIfFinished();
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
if (runFsm != null)
|
|
{
|
|
runFsm.Update();
|
|
CheckIfFinished();
|
|
}
|
|
else
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
|
|
public override void OnFixedUpdate()
|
|
{
|
|
if (runFsm != null)
|
|
{
|
|
runFsm.FixedUpdate();
|
|
CheckIfFinished();
|
|
}
|
|
else
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
|
|
public override void OnLateUpdate()
|
|
{
|
|
if (runFsm != null)
|
|
{
|
|
runFsm.LateUpdate();
|
|
CheckIfFinished();
|
|
}
|
|
else
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
|
|
public override void DoTriggerEnter(Collider other)
|
|
{
|
|
if (runFsm.HandleTriggerEnter)
|
|
{
|
|
runFsm.OnTriggerEnter(other);
|
|
}
|
|
}
|
|
|
|
public override void DoTriggerStay(Collider other)
|
|
{
|
|
if (runFsm.HandleTriggerStay)
|
|
{
|
|
runFsm.OnTriggerStay(other);
|
|
}
|
|
}
|
|
|
|
public override void DoTriggerExit(Collider other)
|
|
{
|
|
if (runFsm.HandleTriggerExit)
|
|
{
|
|
runFsm.OnTriggerExit(other);
|
|
}
|
|
}
|
|
|
|
public override void DoCollisionEnter(Collision collisionInfo)
|
|
{
|
|
if (runFsm.HandleCollisionEnter)
|
|
{
|
|
runFsm.OnCollisionEnter(collisionInfo);
|
|
}
|
|
}
|
|
|
|
public override void DoCollisionStay(Collision collisionInfo)
|
|
{
|
|
if (runFsm.HandleCollisionStay)
|
|
{
|
|
runFsm.OnCollisionStay(collisionInfo);
|
|
}
|
|
}
|
|
|
|
public override void DoCollisionExit(Collision collisionInfo)
|
|
{
|
|
if (runFsm.HandleCollisionExit)
|
|
{
|
|
runFsm.OnCollisionExit(collisionInfo);
|
|
}
|
|
}
|
|
|
|
public override void DoParticleCollision(GameObject other)
|
|
{
|
|
if (runFsm.HandleParticleCollision)
|
|
{
|
|
runFsm.OnParticleCollision(other);
|
|
}
|
|
}
|
|
|
|
public override void DoControllerColliderHit(ControllerColliderHit collisionInfo)
|
|
{
|
|
if (runFsm.HandleControllerColliderHit)
|
|
{
|
|
runFsm.OnControllerColliderHit(collisionInfo);
|
|
}
|
|
}
|
|
|
|
public override void DoTriggerEnter2D(Collider2D other)
|
|
{
|
|
if (runFsm.HandleTriggerEnter2D)
|
|
{
|
|
runFsm.OnTriggerEnter2D(other);
|
|
}
|
|
}
|
|
|
|
public override void DoTriggerStay2D(Collider2D other)
|
|
{
|
|
if (runFsm.HandleTriggerStay2D)
|
|
{
|
|
runFsm.OnTriggerStay2D(other);
|
|
}
|
|
}
|
|
|
|
public override void DoTriggerExit2D(Collider2D other)
|
|
{
|
|
if (runFsm.HandleTriggerExit2D)
|
|
{
|
|
runFsm.OnTriggerExit2D(other);
|
|
}
|
|
}
|
|
|
|
public override void DoCollisionEnter2D(Collision2D collisionInfo)
|
|
{
|
|
if (runFsm.HandleCollisionEnter2D)
|
|
{
|
|
runFsm.OnCollisionEnter2D(collisionInfo);
|
|
}
|
|
}
|
|
|
|
public override void DoCollisionStay2D(Collision2D collisionInfo)
|
|
{
|
|
if (runFsm.HandleCollisionStay2D)
|
|
{
|
|
runFsm.OnCollisionStay2D(collisionInfo);
|
|
}
|
|
}
|
|
|
|
public override void DoCollisionExit2D(Collision2D collisionInfo)
|
|
{
|
|
if (runFsm.HandleCollisionExit2D)
|
|
{
|
|
runFsm.OnCollisionExit2D(collisionInfo);
|
|
}
|
|
}
|
|
|
|
public override void OnGUI()
|
|
{
|
|
if (runFsm != null && runFsm.HandleOnGUI)
|
|
{
|
|
runFsm.OnGUI();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Stop the FSM on exiting the state
|
|
/// </summary>
|
|
public override void OnExit()
|
|
{
|
|
if (runFsm != null)
|
|
{
|
|
runFsm.Stop();
|
|
}
|
|
}
|
|
|
|
protected virtual void CheckIfFinished()
|
|
{
|
|
if (runFsm == null || runFsm.Finished)
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
}
|
|
}
|