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); } }); }
void SetActorSpawnPosition(VoosActor actor, Vector3 newPosition, bool setParent = false, string spawnParent = null) { Vector3 currPosition = actor.GetSpawnPosition(); Quaternion currRotation = actor.GetSpawnRotation(); string currParent = actor.GetSpawnTransformParent(); undoStack.PushUndoForActor( actor, $"Set actor spawn position", (undoActor) => { undoActor.SetSpawnPosition(newPosition); undoActor.SetSpawnRotation(currRotation); if (setParent) { VoosActor setSpawnParent = undoActor.GetEngine().GetActor(spawnParent); undoActor.SetSpawnTransformParent(setSpawnParent?.GetName()); } }, (undoActor) => { undoActor.SetSpawnPosition(currPosition); undoActor.SetSpawnRotation(currRotation); if (setParent) { VoosActor setSpawnParent = undoActor.GetEngine().GetActor(currParent); undoActor.SetSpawnTransformParent(setSpawnParent?.GetName()); } } ); }
bool IsValidSpawnParent(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.GetSpawnTransformParent()); } 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 void SetSpawnParent() { VoosActor actor = editMain.GetSingleTargetActor(); SelectActor((selectedActor) => { string newParentName = selectedActor?.GetName(); string prevParentName = actor.GetSpawnTransformParent(); undoStack.PushUndoForActor( actor, $"Set actor parent on reset", (undoActor) => { VoosActor newParent = undoActor.GetEngine().GetActor(newParentName); undoActor.SetSpawnTransformParent(VoosActor.IsValidParent(undoActor, newParent) ? newParent?.GetName() : null); }, (undoActor) => { VoosActor prevParent = undoActor.GetEngine().GetActor(prevParentName); undoActor.SetSpawnTransformParent(VoosActor.IsValidParent(undoActor, prevParent) ? prevParent?.GetName() : null); } ); }); }