Ejemplo n.º 1
0
        void PerformLoad(JSONClass jc)
        {
            //  legacy
            if (saveStore.val != saveStore.defaultVal)
            {
                jc["keyframes"] = JSON.Parse(saveStore.val).AsObject["keyframes"].AsArray;

                //  remove it from future use
                saveStore.val = saveStore.defaultVal;
            }
            else
            {
                if (jc["keyframes"] == null)
                {
                    animationPattern.DestroyAllSteps();
                    return;
                }
            }

            int index = 0;
            List <AnimationStep> accountedFor = new List <AnimationStep>();

            JSONArray keyframes = jc["keyframes"].AsArray;

            for (int i = 0; i < keyframes.Count; i++)
            {
                JSONClass pose = keyframes[i].AsObject;
                if (index < animationPattern.steps.Length)
                {
                    AnimationStep step = animationPattern.steps[index];
                    if (step != null)
                    {
                        CreateKeyframe(pose, step);
                        accountedFor.Add(step);
                    }
                }
                else
                {
                    CreateKeyframe(pose);
                }

                index++;
            }

            List <AnimationStep> existingSteps = animationPattern.steps.ToList();

            existingSteps.ForEach((step) =>
            {
                if (accountedFor.Contains(step) == false)
                {
                    step.DestroyStep();
                }
            });
        }
Ejemplo n.º 2
0
        void Start()
        {
            if (saveStore.val == saveStore.defaultVal)
            {
                saveJSON = new JSONClass();
                saveJSON["keyframes"] = new JSONArray();
                animationPattern.DestroyAllSteps();
                return;
            }

            saveJSON = JSON.Parse(saveStore.val).AsObject;

            int index = 0;
            List <AnimationStep> accountedFor = new List <AnimationStep>();

            JSONArray keyframes = saveJSON["keyframes"].AsArray;

            for (int i = 0; i < keyframes.Count; i++)
            {
                JSONClass pose = keyframes[i].AsObject;
                if (index < animationPattern.steps.Length)
                {
                    AnimationStep step = animationPattern.steps[index];
                    if (step != null)
                    {
                        CreateKeyframe(pose, step);
                        accountedFor.Add(step);
                    }
                }
                else
                {
                    CreateKeyframe(pose);
                }

                index++;
            }

            List <AnimationStep> existingSteps = animationPattern.steps.ToList();

            existingSteps.ForEach((step) =>
            {
                if (accountedFor.Contains(step) == false)
                {
                    step.DestroyStep();
                }
            });

            if (SuperController.singleton.GetSelectedAtom() != containingAtom)
            {
                uiVisible.SetVal(false);
                keyUI.canvas.enabled = false;
                ui.canvas.enabled    = false;
            }
        }
Ejemplo n.º 3
0
        public void ConfigureAPSteps(Atom receiverAtom, Atom partner = null)
        {
            ap.DestroyAllSteps();

            Atom apAtom = ap.containingAtom;

            FreeControllerV3 hipControl = receiverAtom.GetStorableByID("hipControl") as FreeControllerV3;

            //apAtom.containingAtom.mainController.transform.position = new Vector3();
            //apAtom.mainController.transform.rotation = new Quaternion();
            //apAtom.mainController.transform.SetPositionAndRotation(new Vector3(), new Quaternion());

            apAtom.mainController.transform.SetPositionAndRotation(hipControl.transform.position, hipControl.transform.rotation);
            apAtom.SelectAtomParent(receiverAtom);

            MoveProducer mp = apAtom.GetStorableByID("AnimatedObject") as MoveProducer;

            mp.SetReceiverByName(receiverAtom.name + ":hipControl");

            Vector3    stepATarget   = hipControl.transform.position;
            Quaternion stepARotation = hipControl.transform.rotation;

            Vector3    stepBTarget   = (receiverAtom.GetStorableByID("hip") as DAZBone).transform.position;
            Quaternion stepBRotation = hipControl.transform.rotation;

            if (partner != null)
            {
                DAZCharacterSelector partnerCharacter = partner.GetStorableByID("geometry") as DAZCharacterSelector;
                if (partnerCharacter.gender == DAZCharacterSelector.Gender.Male)
                {
                    FreeControllerV3 penisTipControl  = partner.GetStorableByID("penisTipControl") as FreeControllerV3;
                    FreeControllerV3 penisBaseControl = partner.GetStorableByID("penisBaseControl") as FreeControllerV3;
                    stepATarget = penisBaseControl.transform.position;
                    stepBTarget = penisTipControl.transform.position;
                }
                else
                {
                    FreeControllerV3 penisBaseControl = receiverAtom.GetStorableByID("penisBaseControl") as FreeControllerV3;
                    stepATarget = penisBaseControl.transform.position;
                    stepBTarget = (partner.GetStorableByID("hip") as DAZBone).transform.position;
                }
            }
            else
            {
                FreeControllerV3 chestControl = receiverAtom.GetStorableByID("chestControl") as FreeControllerV3;
                stepBTarget = Vector3.Lerp(stepATarget, chestControl.transform.position, 0.3f);
            }

            AnimationStep stepA = ap.CreateStepAtPosition(0);

            stepA.containingAtom.ClearParentAtom();
            stepA.containingAtom.mainController.transform.position = stepATarget;
            stepA.containingAtom.mainController.transform.rotation = stepARotation;

            AnimationStep stepB = ap.CreateStepAtPosition(1);

            stepB.containingAtom.ClearParentAtom();
            stepB.containingAtom.mainController.transform.position = stepBTarget;
            stepB.containingAtom.mainController.transform.rotation = stepBRotation;

            //apAtom.mainController.transform.Translate(0, 0, -0.2f, Space.Self);

            stepA.containingAtom.mainController.currentPositionState = FreeControllerV3.PositionState.ParentLink;
            stepA.containingAtom.mainController.currentRotationState = FreeControllerV3.RotationState.ParentLink;
            Rigidbody rba = SuperController.singleton.RigidbodyNameToRigidbody(apAtom.name + ":control");

            stepA.containingAtom.mainController.SelectLinkToRigidbody(rba, FreeControllerV3.SelectLinkState.PositionAndRotation);

            stepB.containingAtom.mainController.currentPositionState = FreeControllerV3.PositionState.ParentLink;
            stepB.containingAtom.mainController.currentRotationState = FreeControllerV3.RotationState.ParentLink;
            Rigidbody rbb = SuperController.singleton.RigidbodyNameToRigidbody(apAtom.name + ":control");

            stepB.containingAtom.mainController.SelectLinkToRigidbody(rbb, FreeControllerV3.SelectLinkState.PositionAndRotation);
        }