Exemplo n.º 1
0
    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);
            }
        });
    }
Exemplo n.º 2
0
    private void SetSpawnToCurrentPosition()
    {
        VoosActor actor = editMain.GetSingleTargetActor();

        if (actor == null)
        {
            return;
        }
        SetActorSpawnPosition(actor, actor.GetPosition(), true, actor.GetTransformParent());
    }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
0
    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>";
    }
Exemplo n.º 5
0
    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()));
    }