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

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;
}
}
}
}