84 lines
2.6 KiB
C#
84 lines
2.6 KiB
C#
// Thanks to A3DStudio
|
|
|
|
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.Transform)]
|
|
[HelpUrl("http://hutonggames.com/playmakerforum/index.php?topic=4758.0")]
|
|
[Tooltip("Move a GameObject to another GameObject. Works like iTween Move To, but with better performance.")]
|
|
public class MoveObject : EaseFsmAction
|
|
{
|
|
[RequiredField]
|
|
public FsmOwnerDefault objectToMove;
|
|
|
|
[RequiredField]
|
|
public FsmGameObject destination;
|
|
|
|
private FsmVector3 fromValue;
|
|
private FsmVector3 toVector;
|
|
private FsmVector3 fromVector;
|
|
|
|
private bool finishInNextStep;
|
|
|
|
public override void Reset()
|
|
{
|
|
base.Reset();
|
|
fromValue = null;
|
|
toVector = null;
|
|
finishInNextStep = false;
|
|
fromVector = null;
|
|
}
|
|
|
|
|
|
public override void OnEnter()
|
|
{
|
|
base.OnEnter();
|
|
|
|
var go = Fsm.GetOwnerDefaultTarget(objectToMove);
|
|
fromVector = go.transform.position;
|
|
toVector = destination.Value.transform.position;
|
|
|
|
fromFloats = new float[3];
|
|
fromFloats[0] = fromVector.Value.x;
|
|
fromFloats[1] = fromVector.Value.y;
|
|
fromFloats[2] = fromVector.Value.z;
|
|
|
|
toFloats = new float[3];
|
|
toFloats[0] = toVector.Value.x;
|
|
toFloats[1] = toVector.Value.y;
|
|
toFloats[2] = toVector.Value.z;
|
|
resultFloats = new float[3];
|
|
|
|
resultFloats[0] = fromVector.Value.x;
|
|
resultFloats[1] = fromVector.Value.y;
|
|
resultFloats[2] = fromVector.Value.z;
|
|
|
|
finishInNextStep = false;
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
base.OnUpdate();
|
|
|
|
var go = Fsm.GetOwnerDefaultTarget(objectToMove);
|
|
go.transform.position = new Vector3(resultFloats[0], resultFloats[1], resultFloats[2]);
|
|
|
|
if (finishInNextStep)
|
|
{
|
|
Finish();
|
|
if (finishEvent != null) Fsm.Event(finishEvent);
|
|
}
|
|
|
|
if (finishAction && !finishInNextStep)
|
|
{
|
|
go.transform.position = new Vector3(reverse.IsNone ? toVector.Value.x : reverse.Value ? fromValue.Value.x : toVector.Value.x,
|
|
reverse.IsNone ? toVector.Value.y : reverse.Value ? fromValue.Value.y : toVector.Value.y,
|
|
reverse.IsNone ? toVector.Value.z : reverse.Value ? fromValue.Value.z : toVector.Value.z
|
|
);
|
|
finishInNextStep = true;
|
|
}
|
|
}
|
|
}
|
|
} |