public static void SetCurrentParentForActor( VoosActor actor, VoosActor selectedActor, UndoStack undoStack, bool autosetParent = false) { string newParentName = selectedActor?.GetName(); string prevParentName = actor.GetTransformParent(); string prevSpawnParentName = actor.GetSpawnTransformParent(); undoStack.PushUndoForActor( actor, $"Set actor parent", (undoActor) => { VoosActor newParent = undoActor.GetEngine().GetActor(newParentName); string parentName = VoosActor.IsValidParent(undoActor, newParent) ? newParent?.GetName() : null; undoActor.SetTransformParent(parentName); if (autosetParent) { undoActor.SetSpawnTransformParent(parentName); } }, (undoActor) => { VoosActor prevParent = undoActor.GetEngine().GetActor(prevParentName); undoActor.SetTransformParent(VoosActor.IsValidParent(undoActor, prevParent) ? prevParent?.GetName() : null); if (autosetParent) { VoosActor prevSpawnParent = undoActor.GetEngine().GetActor(prevSpawnParentName); undoActor.SetSpawnTransformParent( VoosActor.IsValidParent(undoActor, prevSpawnParent) ? prevSpawnParent?.GetName() : null); } }); }
private void SetSpawnToCurrentPosition() { VoosActor actor = editMain.GetSingleTargetActor(); if (actor == null) { return; } SetActorSpawnPosition(actor, actor.GetPosition(), true, actor.GetTransformParent()); }
bool IsValidParent(VoosActor actor, VoosActor parent) { // Check for self or cycles while (parent != null) { if (parent == actor) { Util.Log($"Cycle detected!"); return(false); } parent = actor.GetEngine().GetActor(parent.GetTransformParent()); } return(true); }
private void ActorUpdate(VoosActor actor) { assetUI.header.text = $"{actor.GetDisplayName()} : Move"; UpdateVec3Input(actor.GetPosition(), assetUI.currentInputs); UpdateVec3Input(actor.GetSpawnPosition(), assetUI.spawnInputs); UpdateVec3Input(actor.GetRenderableOffset(), assetUI.offsetInputs); VoosActor parent = actor.GetEngine().GetActor(actor.GetTransformParent()); assetUI.currentParentButtonText.text = parent != null?parent.GetDisplayName() : "<none>"; VoosActor spawnParent = actor.GetEngine().GetActor(actor.GetSpawnTransformParent()); assetUI.restartParentButtonText.text = spawnParent != null?spawnParent.GetDisplayName() : "<none>"; }
private Transforms.TransformUndoState GetQuickRotateTransformState(VoosActor actor, Vector3 pivot) { Rigidbody targetRigidbody = actor.GetComponent <Rigidbody>(); if (targetRigidbody != null) { targetRigidbody.angularVelocity = Vector3.zero; } Quaternion newRotation = actor.GetRotation() * Quaternion.Euler(0, QUICK_ROTATE_AMOUNT, 0); Vector3 diff = actor.GetPosition() - pivot; Vector3 newPosition = Quaternion.AngleAxis(QUICK_ROTATE_AMOUNT, Vector3.up) * diff + pivot; return(new Transforms.TransformUndoState(newPosition, newRotation, actor.GetTransformParent())); }