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(); } }); }
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; } }
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); }