public static bool CanEditTargetPosition(PositionOptions option, NamedVariable position, FsmGameObject target) { switch (option) { case PositionOptions.CurrentPosition: return(false); case PositionOptions.WorldPosition: case PositionOptions.LocalPosition: case PositionOptions.WorldOffset: case PositionOptions.LocalOffset: return(!position.IsNone); case PositionOptions.TargetGameObject: return(target.Value != null); default: throw new ArgumentOutOfRangeException(); } }
public static Vector3 DoTargetPositionHandle(Vector3 worldPos, PositionOptions option, Transform owner, FsmGameObject target) { //var worldPos = GetTargetPosition(option, owner, target, position); EditorGUI.BeginChangeCheck(); var rotation = Quaternion.identity; var newPos = worldPos; switch (option) { case PositionOptions.CurrentPosition: break; case PositionOptions.WorldPosition: newPos = Handles.PositionHandle(worldPos, rotation); break; case PositionOptions.LocalPosition: if (owner.parent != null) { rotation = owner.parent.transform.rotation; newPos = owner.parent.InverseTransformPoint(Handles.PositionHandle(worldPos, rotation)); } else { newPos = Handles.PositionHandle(worldPos, rotation); } break; case PositionOptions.WorldOffset: newPos = Handles.PositionHandle(worldPos, rotation) - owner.position; break; case PositionOptions.LocalOffset: rotation = owner.rotation; newPos = owner.InverseTransformPoint(Handles.PositionHandle(worldPos, rotation)); break; case PositionOptions.TargetGameObject: if (target.Value == null) { return(worldPos); } rotation = target.Value.transform.rotation; newPos = target.Value.transform.InverseTransformPoint(Handles.PositionHandle(worldPos, rotation)); break; default: throw new ArgumentOutOfRangeException(); } if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(owner, "Move Scene Gizmo"); } return(newPos); }
private static bool CanEditTargetRotation(RotationOptions option, NamedVariable rotation, FsmGameObject target) { switch (option) { case RotationOptions.CurrentRotation: return(false); case RotationOptions.WorldRotation: case RotationOptions.LocalRotation: case RotationOptions.WorldOffsetRotation: case RotationOptions.LocalOffsetRotation: return(!rotation.IsNone); case RotationOptions.MatchGameObjectRotation: return(target.Value != null); default: throw new ArgumentOutOfRangeException(); } }