public override void Init()
        {
            try
            {
                JSONStorable js = containingAtom.GetStorableByID("geometry");
                if (js != null)
                {
                    DAZCharacterSelector       dcs     = js as DAZCharacterSelector;
                    GenerateDAZMorphsControlUI morphUI = dcs.morphsControlUI;
                    if (morphUI != null)
                    {
                        stomachMorph   = morphUI.GetMorphByDisplayName("Breath1");
                        mouthMorph     = morphUI.GetMorphByDisplayName("Mouth Open");
                        nosePinchMorph = morphUI.GetMorphByDisplayName("Nose Pinch");
                        noseFlareMorph = morphUI.GetMorphByDisplayName("Nostrils Flare");
                    }
                }

                headAudio       = containingAtom.GetStorableByID("HeadAudioSource");
                chestController = containingAtom.GetStorableByID("chestControl") as FreeControllerV3;

                SetupUI();

                if (chestController != null)
                {
                    chestController.jointRotationDriveSpring = chestSpring.val;
                    chestController.jointRotationDriveDamper = 1.0f;
                }

                List <BreathEntry> tmp = new List <BreathEntry>();
                for (int i = 0; i < breathEntries.Length; ++i)
                {
                    if (!breathEntries[i].moan)
                    {
                        tmp.Add(breathEntries[i]);
                    }
                }
                breathEntriesNoMoan = tmp.ToArray();

                breatheNeedInit = true;

                float v     = variance.val * (breathEntries.Length - 1);
                float bi    = breatheIntensity * (breathEntries.Length - 1);
                float min   = Mathf.Max(bi - v - 1.0f, -0.5f);
                float max   = Mathf.Min(bi + v + 1.0f, breathEntries.Length - 0.5f);
                int   index = Mathf.RoundToInt(UnityEngine.Random.Range(min, max));
                breatheIndex = Mathf.Clamp(index, 0, breathEntries.Length - 1);

                breatheCycle     = 0.0f;
                breatheIntensity = intensity.val;
                breathePower     = UnityEngine.Random.Range(0.8f, 1.2f);
                breatheDuration  = UnityEngine.Random.Range(0.0f, 1.5f);
            }
            catch (Exception e)
            {
                SuperController.LogError("Exception caught: " + e);
            }
        }
Пример #2
0
        public void InitBreathing(Atom containingAtom, JSONStorableFloat theStomachMorph)
        {
            try
            {
                stomachMorph = theStomachMorph;

                chestController = containingAtom.GetStorableByID("chestControl") as FreeControllerV3;

                if (chestController != null)
                {
                    chestController.jointRotationDriveSpring = 90.0f;
                    chestController.jointRotationDriveDamper = 1.0f;
                }


                breatheNeedInit = true;

                float v     = 0.2f * (breathEntries.Length - 1);
                float min   = Mathf.Max(0 - v - 1.0f, -0.5f);
                float max   = Mathf.Min(v + 1.0f, breathEntries.Length - 0.5f);
                int   index = Mathf.RoundToInt(UnityEngine.Random.Range(min, max));
                breatheIndex = Mathf.Clamp(index, 0, breathEntries.Length - 1);

                breatheCycle    = 0.0f;
                breathePower    = UnityEngine.Random.Range(0.8f, 1.2f);
                breatheDuration = UnityEngine.Random.Range(0.0f, 1.5f);
            }
            catch (Exception e) { SuperController.LogError("Exception caught: " + e + " (May be related to: Easy Sounds must be loaded on a female Person atom."); }
        }
Пример #3
0
        Keyframe CreateKeyframe(JSONClass pose, AnimationStep step = null, int insertionIndex = -1)
        {
            if (step == null)
            {
                step = animationPattern.CreateStepAtPosition(animationPattern.steps.Length);
            }

            step.containingAtom.GetStorableByID("scale").SetFloatParamValue("scale", 0);
            step.containingAtom.mainController.GetComponent <SphereCollider>().radius = 0.06f;


            Keyframe k = new Keyframe(pose, step);

            if (insertionIndex >= 0)
            {
                keyframes.Insert(insertionIndex, k);
            }
            else
            {
                keyframes.Add(k);
            }
            lastCount = keyframes.Count;

            FreeControllerV3 stepMC = step.containingAtom.mainController;

            stepMC.canGrabPosition = false;
            stepMC.canGrabRotation = false;

            LayoutKeys();

            return(k);
        }
Пример #4
0
        void LayoutKeys()
        {
            if (lookAtCamera.val == true)
            {
                containingAtom.mainController.transform.LookAt(SuperController.singleton.lookCamera.transform);
            }

            int x = 0;
            int y = 0;

            keyframes.ForEach((key) =>
            {
                x++;

                FreeControllerV3 stepMC   = key.step.containingAtom.mainController;
                Vector3 position          = animationPattern.containingAtom.mainController.transform.position;
                stepMC.transform.position = animationPattern.containingAtom.mainController.transform.TransformPoint(new Vector3(-x * 0.2f, -y * 0.2f, 0));

                if (x >= maxKeyframesPerRow.val)
                {
                    x = 0;
                    y++;
                }
            });
        }
Пример #5
0
        void Update()
        {
            try
            {
                bool visibilityState = SuperController.singleton.GetSelectedAtom() == containingAtom;
                bool visChanged      = false;
                if (visibilityState != lastVisibility)
                {
                    visChanged     = true;
                    lastVisibility = visibilityState;
                }

                bool controlChanged = lastController != SuperController.singleton.GetSelectedController();
                if (controlChanged)
                {
                    lastController = SuperController.singleton.GetSelectedController();
                }

                int index = 0;
                buttons.ForEach((button) =>
                {
                    button.containingAtom.SetOn(visibilityState);

                    if (visChanged || lastController)
                    {
                        RestorePosition(button, SuperController.singleton.GetSelectedController(), index);
                    }
                    index++;
                });
            }
            catch (Exception e)
            {
                SuperController.LogError("Exception caught: " + e);
            }
        }
Пример #6
0
        private void animateHands(FreeControllerV3 hc, Hand hand, string[] fingerMorphs, float mirror)
        {
            float fx;

            h = hand.PalmPosition;
            r = hand.Rotation;

            Vector3    pos = new Vector3(h[0], h[1], h[2]);
            Quaternion rot = new Quaternion(r.x, r.y, r.z, r.w);

            hc.transform.position = pos;
            hc.transform.rotation = rot;
            hc.transform.Rotate(0, 90 * mirror, 0);
            hc.transform.Translate(xOffsetSlider.val * mirror, 0, 0, Space.Self);

            for (int i = 0; i < hand.Fingers.Count; i++)
            {
                DAZMorph   morph = morphControl.GetMorphByDisplayName(fingerMorphs[i]);
                Quaternion vd    = leapQuaternionToQuaternion(hand.Fingers[i].bones[3].Rotation);
                vd = Quaternion.Inverse(vd * Quaternion.Euler(0, -90 * mirror, 0)) * rot;

                if (i == 0)
                {
                    fx = (0.5f - minMax(0f, 1f, positiveAttitude(vd.x))) * 1.22f;
                }
                else
                {
                    fx = minMax(0f, 1f, correctRotation(vd.x, 0.65f)) * 0.9f;
                }
                if (fx != 0)
                {
                    morph.morphValue = fx / 0.85f;
                }
            }
        }
Пример #7
0
    public override void Init()
    {
        try
        {
            if (containingAtom?.type != "Person")
            {
                SuperController.LogError($"Please apply the ImprovedPoV plugin to the 'Person' atom you wish to possess. Currently applied on '{containingAtom.type}'.");
                DestroyImmediate(this);
                return;
            }

            _person     = containingAtom;
            _mainCamera = CameraTarget.centerTarget?.targetCamera;
            _possessor  = SuperController
                          .FindObjectsOfType(typeof(Possessor))
                          .Where(p => p.name == "CenterEye")
                          .Select(p => p as Possessor)
                          .FirstOrDefault();
            _headControl = (FreeControllerV3)_person.GetStorableByID("headControl");
            _selector    = _person.GetComponentInChildren <DAZCharacterSelector>();

            InitControls();
            Camera.onPreRender  += OnPreRender;
            Camera.onPostRender += OnPostRender;
        }
        catch (Exception e)
        {
            SuperController.LogError("Failed to initialize Improved PoV: " + e);
            DestroyImmediate(this);
        }
    }
Пример #8
0
 public FreeControllerAnimationTarget(FreeControllerV3 controller)
 {
     curves = new List <AnimationCurve> {
         x, y, z, rotX, rotY, rotZ, rotW
     };
     this.controller = controller;
 }
Пример #9
0
        public FreeControllerAnimationTarget Add(FreeControllerV3 fc)
        {
            if (fc == null || fc.containingAtom != _containingAtom)
            {
                return(null);
            }
            var target = _clip.targetControllers.FirstOrDefault(t => t.controller == fc);

            if (target != null)
            {
                return(target);
            }
            foreach (var clip in _animation.index.ByLayer(_clip.animationLayer))
            {
                var t = clip.Add(fc);
                if (t == null)
                {
                    continue;
                }
                t.SetKeyframeToCurrentTransform(0f);
                t.SetKeyframeToCurrentTransform(clip.animationLength);
                if (clip == _clip)
                {
                    target = t;
                }
            }
            return(target);
        }
Пример #10
0
        IEnumerator CreateAudioSource()
        {
            yield return(new WaitForSeconds(0.5f));

            audioSourceAtom = GetAtomById(AUDIO_SOURCE_NAME);
            if (audioSourceAtom == null)
            {
                SuperController.singleton.StartCoroutine(SuperController.singleton.AddAtomByType("AudioSource", AUDIO_SOURCE_NAME, true));
                yield return(new WaitWhile(() => GetAtomById(AUDIO_SOURCE_NAME) != null));

                audioSourceAtom = GetAtomById(AUDIO_SOURCE_NAME);
            }

            if (audioSourceAtom != null)
            {
                audioSource = audioSourceAtom.GetStorableByID("AudioSource") as AudioSourceControl;
                if (audioSource != null)
                {
                    FreeControllerV3 hipControl = containingAtom.freeControllers.First((controller) => controller.name == "hipControl");
                    if (hipControl != null)
                    {
                        FreeControllerV3 sfxControl = audioSourceAtom.mainController;
                        sfxControl.transform.SetPositionAndRotation(hipControl.transform.position, hipControl.transform.rotation);
                        sfxControl.currentPositionState = FreeControllerV3.PositionState.ParentLink;
                        sfxControl.currentRotationState = FreeControllerV3.RotationState.ParentLink;
                        Rigidbody rb = SuperController.singleton.RigidbodyNameToRigidbody("Person:hipControl");
                        sfxControl.SelectLinkToRigidbody(rb, FreeControllerV3.SelectLinkState.PositionAndRotation);

                        audioSource.volume = 0.5f;
                    }
                }
                HideController(audioSourceAtom);
            }
        }
Пример #11
0
        public HeadController(DollmasterPlugin dm) : base(dm)
        {
            headControlEnabled = new JSONStorableBool("headControlEnabled", true);
            dm.RegisterBool(headControlEnabled);
            UIDynamicToggle moduleEnableToggle = dm.CreateToggle(headControlEnabled);

            moduleEnableToggle.label           = "Enable Head Gaze";
            moduleEnableToggle.backgroundColor = Color.green;

            durationBetweenLookChange = new JSONStorableFloat("duration between look at toggle", 8, 1, 30, false);
            dm.RegisterFloat(durationBetweenLookChange);
            dm.CreateSlider(durationBetweenLookChange);

            headTurnSpeed = new JSONStorableFloat("headTurnSpeed", 2.5f, 0.01f, 20.0f);
            dm.RegisterFloat(headTurnSpeed);
            dm.CreateSlider(headTurnSpeed);

            headControl  = atom.GetStorableByID("headControl") as FreeControllerV3;
            chestControl = atom.GetStorableByID("chestControl") as FreeControllerV3;
            neckBone     = atom.GetStorableByID("neck") as DAZBone;

            alwaysLookAtMe = new JSONStorableBool("alwaysLookAtMe", false);
            dm.RegisterBool(alwaysLookAtMe);
            UIDynamicToggle forceLookToggle = ui.CreateToggle("Hold Gaze", 180, 40);

            alwaysLookAtMe.toggle = forceLookToggle.toggle;

            forceLookToggle.transform.Translate(0.415f, 0.01f, 0, Space.Self);
            forceLookToggle.backgroundColor = new Color(0.2f, 0.2f, 0.2f);
            forceLookToggle.labelText.color = new Color(1, 1, 1);

            eyesStorable = atom.GetStorableByID("Eyes");

            dm.CreateSpacer(true);
        }
Пример #12
0
    public override void Awake()
    {
        base.Awake();

        _possessor   = SuperController.singleton.centerCameraTarget.transform.GetComponent <Possessor>();
        _headControl = (FreeControllerV3)containingAtom.GetStorableByID("headControl");
    }
Пример #13
0
        public void OnInit(VAMLaunch plugin)
        {
            _pluginFreeController = plugin.containingAtom.GetStorableByID("control") as FreeControllerV3;

            InitOptionsUI(plugin);
            InitEditorGizmos();
        }
Пример #14
0
        public override void Init()
        {
            try
            {
                string CONFIG_PATH = GetPluginPath() + "/positions.json";
                poses       = JSON.Parse(SuperController.singleton.ReadFileIntoString(CONFIG_PATH)).AsObject;
                headControl = containingAtom.GetStorableByID("headControl") as FreeControllerV3;
                CreateButton("Save Pose").button.onClick.AddListener(() =>
                {
                    Vector3 localEuler  = headControl.transform.localEulerAngles;
                    JSONArray positions = poses["positions"].AsArray;
                    JSONClass vector    = new JSONClass();
                    vector["x"]         = localEuler.x.ToString();
                    vector["y"]         = localEuler.y.ToString();
                    vector["z"]         = localEuler.z.ToString();
                    positions.Add(vector);
                    SuperController.singleton.SaveStringIntoFile(CONFIG_PATH, poses.ToString("  "));
                });

                targetRotation = headControl.transform.localRotation;
            }
            catch (Exception e)
            {
                SuperController.LogError("Exception caught: " + e);
            }
        }
Пример #15
0
    public static FreeControllerV3Snapshot Snap(FreeControllerV3 controller)
    {
        if (controller == null)
        {
            throw new NullReferenceException("Controller reference not set to an instance of an object");
        }
        var control = controller.control;

        if (control == null)
        {
            throw new NullReferenceException($"Controller '{controller.name}' does not have a control");
        }
        return(new FreeControllerV3Snapshot
        {
            controller = controller,
            _position = control.position,
            _rotation = control.rotation,
            canGrabPosition = controller.canGrabPosition,
            canGrabRotation = controller.canGrabRotation,
            _positionState = controller.currentPositionState,
            _rotationState = controller.currentRotationState,
            holdPositionSpring = controller.RBHoldPositionSpring,
            holdRotationSpring = controller.RBHoldRotationSpring,
            hidden = controller.hidden,
        });
    }
Пример #16
0
        public override void Init()
        {
            try
            {
                if (containingAtom.type != "Person")
                {
                    SuperController.LogError("Use this plugin on a Person only");
                }
                else
                {
                    _control        = containingAtom.mainController;
                    _frozenControls = new List <FreeControllerV3>();
                    FreeControllerV3[] controls = containingAtom.freeControllers;
                    foreach (var control in controls)
                    {
                        if (control != _control)
                        {
                            _frozenControls.Add(control);
                        }
                    }

                    _routine     = StartCoroutine(FreezeControlsRoutine());
                    _initialized = true;
                }
            }
            catch (Exception e)
            {
                SuperController.LogError("Exception caught: " + e);
            }
        }
Пример #17
0
        void RestorePosition(Atom atom, FreeControllerV3 controller, int index)
        {
            if (atom == null)
            {
                return;
            }

            if (controller == null)
            {
                return;
            }

            Vector3 headPos = containingAtom.GetStorableByID("headControl").transform.position;
            float   headY   = headPos[1];

            Transform  tc = SuperController.singleton.lookCamera.transform;
            Quaternion cr = tc.rotation;
            Vector3    pc = tc.position;

            float currentHeight = (defautHeight.val + headY + pc[1] / 3) / 2.3333f;

            cr[2] = 0;
            cr[0] = 0;

            pc[1] = currentHeight;

            atom.mainController.transform.SetPositionAndRotation(controller.transform.position, cr);
            atom.mainController.transform.Translate(defaultDistance, currentHeight, 0, Space.Self);
            atom.mainController.transform.Translate(0, -BUTTON_SPACING * index, 0, Space.World);
            atom.mainController.transform.LookAt(pc);
        }
Пример #18
0
        IEnumerator CreateWorldButtonCO(string buttonLabel, UnityEngine.Events.UnityAction call, int index)
        {
            Atom containingAtom = GetContainingAtom();

            string name = containingAtom.uid;
            string uid  = name + " " + buttonLabel;

            Atom atom = SuperController.singleton.GetAtomByUid(uid);

            if (atom == null)
            {
                yield return(SuperController.singleton.AddAtomByType("UIButton", uid));
            }
            else
            {
                Debug.Log("button already exists");
                if (buttons == null)
                {
                    buttons = new List <Atom>();
                }
                buttons.Add(atom);
                yield return(null);
            }

            atom = SuperController.singleton.GetAtomByUid(uid);

            atom.GetStorableByID("Text").SetStringParamValue("text", buttonLabel);

            UIButtonTrigger ubt = atom.GetStorableByID("Trigger") as UIButtonTrigger;

            ubt.button.onClick.AddListener(call);

            atom.GetStorableByID("Canvas").SetFloatParamValue("xSize", 500);
            atom.GetStorableByID("Canvas").SetFloatParamValue("ySize", 100);
            HSVColor black = new HSVColor();

            black.H = 0; black.S = 0; black.V = .12f;

            HSVColor gray = new HSVColor();

            gray.H = 0; gray.S = 0; gray.V = 0.75f;

            atom.GetStorableByID("ButtonColor").SetColorParamValue("color", black);
            atom.GetStorableByID("TextColor").SetColorParamValue("color", gray);

            atom.GetStorableByID("Text").SetFloatParamValue("fontSize", 50);

            FreeControllerV3 controller = atom.GetStorableByID("control") as FreeControllerV3;

            controller.deselectedMeshScale = 0.000f;

            SphereCollider collider = controller.GetComponent <SphereCollider>();

            collider.radius  = 0.0f;
            collider.enabled = false;

            atom.SetOn(false);

            buttons.Add(atom);
        }
Пример #19
0
        public void SetControllerVisibility(FreeControllerV3 controller, bool visible)
        {
            if (AllowVisibility(controller))
            {
                visible = true;
            }


            if (scaleMapping.ContainsKey(controller) == false)
            {
                scaleMapping.Add(controller, controller.deselectedMeshScale);
            }

            controller.deselectedMeshScale = visible ? scaleMapping[controller] : 0.0f;

            controller.highlightedScale   = visible ? HIGHLIGHTED_SCALE : 0.0f;
            controller.unhighlightedScale = visible ? HIGHLIGHTED_SCALE : 0.0f;

            controller.meshScale = visible ? DEFAULT_SCALE : 0.0f;

            SphereCollider collider = controller.GetComponent <SphereCollider>();

            collider.radius  = visible ? 0.11f : 0.0f;
            collider.enabled = visible;

            if (visible)
            {
                scaleMapping.Remove(controller);
            }
        }
Пример #20
0
        public void OnInitStorables(VAMLaunch plugin)
        {
            _minPosition = new JSONStorableFloat("oscSourceMinPosition", 10.0f, 0.0f, 99.0f);
            plugin.RegisterFloat(_minPosition);
            _maxPosition = new JSONStorableFloat("oscSourceMaxPosition", 80.0f, 0.0f, 99.0f);
            plugin.RegisterFloat(_maxPosition);
            _speed = new JSONStorableFloat("oscSourceSpeed", 30.0f, 20.0f, 80.0f);
            plugin.RegisterFloat(_speed);
            _animationOffset = new JSONStorableFloat("oscAnimationOffset", 0.0f, 0.0f, 0.5f);
            plugin.RegisterFloat(_animationOffset);

            _targetAnimationAtomChooser = new JSONStorableStringChooser("oscSourceTargetAnimationAtom",
                                                                        GetTargetAnimationAtomChoices(), "", "Target Animation Pattern",
                                                                        (name) =>
            {
                _animationAtomController = null;
                _targetAnimationPattern  = null;

                if (string.IsNullOrEmpty(name))
                {
                    return;
                }

                var atom = SuperController.singleton.GetAtomByUid(name);
                if (atom && atom.animationPatterns.Length > 0)
                {
                    _animationAtomController = atom.freeControllers[0];
                    _targetAnimationPattern  = atom.animationPatterns[0];
                }
            });
            plugin.RegisterStringChooser(_targetAnimationAtomChooser);
        }
Пример #21
0
        void SetupThrustTransform(Atom thrustAtom)
        {
            CycleForceProducerV2 cf = thrustAtom.GetStorableByID("ForceProducer") as CycleForceProducerV2;

            cf.SetForceReceiver(containingAtom.name + ":hip");

            FreeControllerV3 cfControl   = thrustAtom.mainController;
            FreeControllerV3 headControl = containingAtom.freeControllers.First((controller) => controller.name == "headControl");
            FreeControllerV3 hipControl  = containingAtom.freeControllers.First((controller) => controller.name == "hipControl");

            cfControl.transform.SetPositionAndRotation(hipControl.transform.position, hipControl.transform.rotation);

            cfControl.transform.LookAt(headControl.transform);
            cfControl.transform.Rotate(0, 180, 0, Space.Self);
            cfControl.transform.Rotate(new Vector3(0, 0, 1), 90, Space.Self);
            cfControl.transform.Rotate(new Vector3(1, 0, 0), -90, Space.Self);
            cfControl.transform.Rotate(new Vector3(0, 0, 1), 90, Space.Self);

            cfControl.currentPositionState = FreeControllerV3.PositionState.ParentLink;
            cfControl.currentRotationState = FreeControllerV3.RotationState.ParentLink;

            Rigidbody rb = SuperController.singleton.RigidbodyNameToRigidbody(containingAtom.name + ":hipControl");

            cfControl.SelectLinkToRigidbody(rb, FreeControllerV3.SelectLinkState.PositionAndRotation);

            HideController(thrustAtom);

            cycleForce = cf;
        }
Пример #22
0
 public MeasureHandsPaddingStep(EmbodyContext context)
     : base(context)
 {
     _head             = context.containingAtom.rigidbodies.First(fc => fc.name == "head");
     _leftHandControl  = context.containingAtom.freeControllers.First(fc => fc.name == "lHandControl");
     _rightHandControl = context.containingAtom.freeControllers.First(fc => fc.name == "rHandControl");
 }
Пример #23
0
    private static Vector3 ComputePosition(Transform transform, FreeControllerV3 controller, MotionControllerWithCustomPossessPoint motionControl)
    {
        var possessPointDelta = controller.control.position - motionControl.controllerPointTransform.position;
        var currentPosition   = transform.position;

        return(currentPosition + possessPointDelta);
    }
Пример #24
0
    public static void AlignRigAndController(this SuperController sc, FreeControllerV3 controller, MotionControllerWithCustomPossessPoint motionControl, bool alignControl = true)
    {
        var up = sc.navigationRig.up;

        sc.navigationRig.rotation = ComputeRotation(sc.navigationRig, controller, up);

        if (alignControl)
        {
            controller.AlignTo(motionControl.controllerPointTransform, true);
        }

        var position = ComputePosition(sc.navigationRig, controller, motionControl);

        var upDelta = Vector3.Dot(position - sc.navigationRig.position, up);

        position += up * (0f - upDelta);
        sc.navigationRig.position = position;
        sc.playerHeightAdjust    += upDelta;

        if (sc.MonitorCenterCamera != null)
        {
            var monitorCenterCameraTransform = sc.MonitorCenterCamera.transform;
            monitorCenterCameraTransform.LookAt(controller.transform.position + controller.GetForwardPossessAxis());
            var localEulerAngles = monitorCenterCameraTransform.localEulerAngles;
            localEulerAngles.y = 0f;
            localEulerAngles.z = 0f;
            monitorCenterCameraTransform.localEulerAngles = localEulerAngles;
        }
    }
Пример #25
0
        void LateUpdate()
        {
            try
            {
                if (allowDoubleClick)
                {
                    if (Input.GetMouseButtonUp(0))
                    {
                        if ((Time.time - lastPressedTime) < doubleClickTime && SuperController.singleton.GetSelectedController() == lastSelected)
                        {
                            SelectMainController();
                        }

                        lastSelected    = SuperController.singleton.GetSelectedController();
                        lastPressedTime = Time.time;
                    }
                }

                if (Input.GetMouseButtonUp(0) && (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)))
                {
                    SelectMainController();
                }
            }
            catch (Exception e)
            {
                SuperController.LogError("Exception caught: " + e);
            }
        }
Пример #26
0
        public override void Init()
        {
            if (containingAtom.type != "Person")
            {
                throw new Exception("This must be added to a Person");
            }

            _labiaTrigger = containingAtom.GetComponentsInChildren <CollisionTrigger>().FirstOrDefault(t => t.name == "LabiaTrigger");
            _labiaHandler = _labiaTrigger.gameObject.GetComponentInChildren <CollisionTriggerEventHandler>();
            _abdomen      = containingAtom.freeControllers.FirstOrDefault(fc => fc.name == "abdomen2Control");
            _animators    = new List <LabiaAnimator>();
            _animators.Add(LabiaAnimator.Create(containingAtom, "Labia minora-size", isInwardMorph: false, inwardMax: 0.7f, outwardMax: 2));
            _animators.Add(LabiaAnimator.Create(containingAtom, "Labia minora-style1", isInwardMorph: false, inwardMax: 0.7f, outwardMax: 2f));
            _animators.Add(LabiaAnimator.Create(containingAtom, "Labia minora-exstrophy", isInwardMorph: true, inwardMax: 0.1f, outwardMax: 1f));
            _animators.Add(LabiaAnimator.Create(containingAtom, "Labia majora-relaxation", isInwardMorph: false, inwardMax: 1f, outwardMax: 0f));
            _animators.Add(LabiaAnimator.Create(containingAtom, "Gen_Innie", isInwardMorph: true, inwardMax: 0.10f, outwardMax: 0.25f, easing: (p) => p * p * p));
            _animators.Add(LabiaAnimator.Create(containingAtom, "Gens In - Out", isInwardMorph: true, inwardMax: 1.0f, outwardMax: 0f, enabled: false));
            _animators = _animators.Where(a => a != null).ToList(); // remove any null entries
            _animators.ForEach(a => a.Morph.SetDefaultValue());


            FrictionStorable = new JSONStorableFloat("Friction", 1f, (f) => { _friction = f; }, 0, 1);
            _friction        = FrictionStorable.val;
            CreateSlider(FrictionStorable);
            RegisterFloat(FrictionStorable);

            InwardExaggerationStorable = new JSONStorableFloat(
                "Inward Exaggeration",
                0f,
                (val) => {
                _animators.ForEach(a => a.InwardMax = a.InwardMaxDefault + val);
            },
                0, 1);
            InwardExaggerationStorable.val = 0;
            CreateSlider(InwardExaggerationStorable);
            RegisterFloat(InwardExaggerationStorable);

            OutwardExaggerationStorable = new JSONStorableFloat(
                "Outward Exaggeration",
                0f,
                (val) => {
                _animators.ForEach(a => a.OutwardMax = a.OutwardMaxDefault + val);
            },
                0, 1);
            OutwardExaggerationStorable.val = 0;
            CreateSlider(OutwardExaggerationStorable);
            RegisterFloat(OutwardExaggerationStorable);

            foreach (var a in _animators)
            {
                var storable = new JSONStorableBool(a.Morph.displayName, a.Enabled, (b) => {
                    a.Enabled = b;
                    a.Morph.SetDefaultValue();
                });
                storable.val = a.Enabled;
                CreateToggle(storable, rightSide: true);
                RegisterBool(storable);
            }
        }
Пример #27
0
 public FreeControllerAnimationTarget Add(FreeControllerV3 controller)
 {
     if (targetControllers.Any(c => c.controller == controller))
     {
         return(null);
     }
     return(Add(new FreeControllerAnimationTarget(controller)));
 }
 public MeasureAnchorWidthStep(WizardContext context, string part, ControllerAnchorPoint anchor)
 {
     _context          = context;
     _part             = part;
     _anchor           = anchor;
     _leftHandControl  = context.containingAtom.freeControllers.First(fc => fc.name == "lHandControl");
     _rightHandControl = context.containingAtom.freeControllers.First(fc => fc.name == "rHandControl");
 }
Пример #29
0
 public AtomSelect(FreeControllerV3 controller) : this((a) => a.uid.Equals(controller?.containingAtom?.uid))
 {
     if (controller != null)
     {
         _atomUid        = controller.containingAtom.uid;
         _controllerName = controller.name;
     }
 }
Пример #30
0
        private bool AllowVisibility(FreeControllerV3 controller)
        {
            bool anyControlOn      = controller.currentPositionState == FreeControllerV3.PositionState.On && controller.currentRotationState == FreeControllerV3.RotationState.On;
            bool interactiveInPlay = controller.interactableInPlayMode;
            bool isAtomOn          = controller.containingAtom.on;

            return(anyControlOn && interactiveInPlay && isAtomOn);
        }