private void RefreshUI() { nothingSelectedPrompt.gameObject.SetActive(false); multipleSelectedPrompt.gameObject.SetActive(false); clonePrompt.SetActive(false); lockedContentChecker.Close(); if (!isOpen) { return; } if (currActor == null) { NullActorRefresh(); } else if (currActor?.GetCloneParent() != null && currActor.GetCloneParent() != "") { clonePrompt.SetActive(true); VoosActor cloneParent = voosEngine.GetActor(currActor.GetCloneParent()); cloneMessage.text = $"This is a copy of {cloneParent.GetDisplayName()}"; } else { lockedContentChecker.Open(currActor, () => { showCallback(currActor); }, () => { hideCallback(false); }); } }
private void BreakLink(bool withUndo = true) { VoosActor actor = currActor; // Save for undo string prevParent = actor.GetCloneParent(); SetActorInternal(null); actor.SetCloneParent(null); actor.MakeOwnCopyOfBrain(); if (withUndo) { // Setup undo item string actorName = actor.GetName(); string newBrain = actor.GetBrainName(); undo.Push(new UndoStack.Item { actionLabel = $"Break copy-link of {actor.GetDisplayName()}", getUnableToDoReason = () => ActorUndoUtil.GetUnableToEditActorReason(voosEngine, actorName), doIt = () => { var redoActor = voosEngine.GetActor(actorName); redoActor.SetCloneParent(null); // A bit sloppy: We're relying on the fact that brains are never deleted // (except on load). redoActor.SetBrainName(newBrain); OnBreakLinkChanged(redoActor); }, getUnableToUndoReason = () => { var prevParentActor = voosEngine.GetActor(prevParent); if (prevParentActor == null) { return($"The original copy no longer exists."); } return(null); }, undo = () => { var undoActor = voosEngine.GetActor(actorName); var prevParentActor = voosEngine.GetActor(prevParent); Debug.Assert(prevParent != null, "BreakLink undo action: prevParent does not exist anymore"); undoActor.SetCloneParent(prevParent); undoActor.SetBrainName(prevParentActor.GetBrainName()); OnBreakLinkChanged(undoActor); } }); } SetActorInternal(actor); }
public void Setup() { Util.FindIfNotSet(this, ref voosEngine); Util.FindIfNotSet(this, ref editMain); Util.FindIfNotSet(this, ref undo); Util.FindIfNotSet(this, ref popups); editOriginalButton.onClick.AddListener(() => { SetActorInternal(voosEngine.GetActor(currActor.GetCloneParent())); }); breakLinkButton.onClick.AddListener(() => BreakLink()); voosEngine.onBeforeActorDestroy += (actor) => { if (currActor != null && actor == currActor) { SetActorInternal(null); hideCallback(true); } }; }