Пример #1
0
    public EmbodyContext(MVRScript plugin, IEmbody embody)
    {
        this.plugin    = plugin;
        this.embody    = embody;
        containingAtom = plugin.containingAtom;

        leftHandToggle = new JSONStorableBool("Left Hand Enabled", true, val =>
        {
            trackers.leftHandMotionControl.enabled = val;
            trackers.RefreshHands();
            embody.Refresh();
        })
        {
            isStorable = false
        };
        rightHandToggle = new JSONStorableBool("Right Hand Enabled", true, val =>
        {
            trackers.rightHandMotionControl.enabled = val;
            trackers.RefreshHands();
            embody.Refresh();
        })
        {
            isStorable = false
        };
    }
Пример #2
0
        public override void Init(IAtomPlugin plugin, object arg)
        {
            base.Init(plugin, arg);

            // Right side

            CreateChangeScreenButton("<b><</b> <i>Back</i>", MoreScreen.ScreenName);

            prefabFactory.CreateSpacer();

            _resizeAnimationJSON = new JSONStorableBool("Resize animation to mocap length", current.targetControllers.Count == 0 || _lastResizeAnimation, val => _lastResizeAnimation = val);
            prefabFactory.CreateToggle(_resizeAnimationJSON);

            _importRecordedUI = prefabFactory.CreateButton("Import recorded animation (mocap)");
            _importRecordedUI.button.onClick.AddListener(ImportRecorded);

            prefabFactory.CreateSpacer();

            _playAndRecordControllersUI = prefabFactory.CreateButton(_recordingControllersCoroutine != null ? _recordingLabel : _startRecordControllersLabel);
            _playAndRecordControllersUI.button.onClick.AddListener(PlayAndRecordControllers);

            prefabFactory.CreateSpacer();

            CreateChangeScreenButton("<i>Go to <b>reduce</b> screen...</i>", ReduceScreen.ScreenName);

            prefabFactory.CreateSpacer();

            var clearMocapUI = prefabFactory.CreateButton("Clear atom's mocap");

            clearMocapUI.button.onClick.AddListener(ClearMocapData);
            clearMocapUI.buttonColor = Color.yellow;

            animationEditContext.onTargetsSelectionChanged.AddListener(OnTargetsSelectionChanged);
            OnTargetsSelectionChanged();
        }
Пример #3
0
        public UIBindingRow(ViewModel model, Command command)
        {
            using (var tracker = TimingLogger.Track("UIBindingRow.ctor()"))
            {
                _model     = model;
                _command   = command;
                ActionName = command.Name;

                var binding = _model.GetKeyBinding(ActionName);

                tracker.Log("... after binding");

                // checkbox on the left
                _checkboxStorable          = new JSONStorableBool(ActionName, binding == null ? false : binding.Enabled, OnCheckboxHandler);
                _checkboxUi                = _model.Plugin.CreateToggle(_checkboxStorable);
                _checkboxUi.labelText.text = command.DisplayName;
                _checkboxUi.labelText.resizeTextMaxSize    = _checkboxUi.labelText.fontSize;
                _checkboxUi.labelText.resizeTextForBestFit = true;
                _checkboxUi.backgroundColor = Color.clear;

                tracker.Log("... after checkbox create");

                var shortcutText = binding == null ? "" : binding.KeyChord.ToString();
                _shortcutButtonUi        = _model.Plugin.CreateButton(shortcutText, rightSide: true);
                _shortcutButtonUi.height = _checkboxUi.height;
                _shortcutButtonUi.button.onClick.AddListener(OnShortcutHandler);

                tracker.Log("... after button create");
            }
        }
Пример #4
0
        public UIDynamicToggle CreateUIToggleInCanvas(JSONStorableBool jsb, float x, float y)
        {
            var canvas = _atom.GetComponentInChildren <Canvas>();

            if (canvas == null)
            {
                throw new NullReferenceException("Could not find a canvas to attach to");
            }

            var transform = UnityEngine.Object.Instantiate(_owner.manager.configurableTogglePrefab.transform);

            if (transform == null)
            {
                throw new NullReferenceException("Could not instantiate configurableTogglePrefab");
            }
            _components.Add(transform);
            transform.SetParent(canvas.transform, false);
            transform.gameObject.SetActive(true);

            var ui = transform.GetComponent <UIDynamicToggle>();

            if (ui == null)
            {
                throw new NullReferenceException("Could not find a UIDynamicToggle component");
            }
            ui.label   = jsb.name;
            jsb.toggle = ui.toggle;

            transform.Translate(Vector3.down * y, Space.Self);
            transform.Translate(Vector3.right * x, Space.Self);

            return(ui);
        }
        public override void Init()
        {
            try
            {
                _animationPattern = containingAtom.GetStorableByID("AnimationPattern") as AnimationPattern;
                if (null == _animationPattern)
                {
                    _audioSource = containingAtom.GetStorableByID("AudioSource") as AudioSourceControl;
                    if (null == _audioSource)
                    {
                        pluginLabelJSON.val = String.Format("Error - Use on Animation Pattern or AudioSource only");
                        SuperController.LogError("Use this plugin on a AnimationPattern or AudioSource only");
                        return;
                    }
                }
                _speedJSON = _animationPattern?.GetFloatJSONParam("speed");
                _pitchJSON = _audioSource?.GetFloatJSONParam("pitch");
                _enabled   = new JSONStorableBool("Sync animation speed", true);
                CreateToggle(_enabled);

                pluginLabelJSON.val = String.Format("{0} {1}, by {2}", pluginName, pluginVersion, pluginAuthor);
            }
            catch (Exception e)
            {
                SuperController.LogError("Exception caught: " + e);
            }
        }
Пример #6
0
            public bool SetEnabled(Atom atom, bool b)
            {
                if (toggle_ == null)
                {
                    if (atom_ == null)
                    {
                        return(true);
                    }

                    toggle_ = GetToggle();
                }

                if (toggle_ == null)
                {
                    return(false);
                }

                try
                {
                    toggle_.val = b;
                    return(true);
                }
                catch (Exception)
                {
                    Synergy.LogError(
                        "gaze: failed to change value, " +
                        "assuming script is gone");

                    toggle_ = null;
                }

                return(false);
            }
Пример #7
0
 private void InitShowPathsUI()
 {
     _showPaths = new JSONStorableBool(
         "Show selected controllers paths", animationEditContext.showPaths,
         val => animationEditContext.showPaths = val);
     prefabFactory.CreateToggle(_showPaths);
 }
Пример #8
0
        public ExpressionController(DollmasterPlugin dm) : base(dm)
        {
            expressionsEnabled = new JSONStorableBool("expressionsEnabled", true);
            dm.RegisterBool(expressionsEnabled);
            UIDynamicToggle moduleEnableToggle = dm.CreateToggle(expressionsEnabled);

            moduleEnableToggle.label           = "Enable Expressions + Voice";
            moduleEnableToggle.backgroundColor = Color.green;

            JSONStorable         geometry  = atom.GetStorableByID("geometry");
            DAZCharacterSelector character = geometry as DAZCharacterSelector;

            morphControl = character.morphsControlUI;

            mouthOpenMorph   = morphControl.GetMorphByDisplayName("Mouth Open Wide");
            tongueRaiseMorph = morphControl.GetMorphByDisplayName("Tongue Raise-Lower");

            interpolationSpeed = new JSONStorableFloat("expression speed", 8f, 0.1f, 20.0f, true);
            dm.RegisterFloat(interpolationSpeed);
            dm.CreateSlider(interpolationSpeed);

            upperJaw = atom.GetStorableByID("upperJaw") as DAZBone;
            lowerJaw = atom.GetStorableByID("lowerJaw") as DAZBone;

            //  Hack to fix bad tongue morph values
            morphControl.GetMorphByDisplayName("Tongue In-Out").startValue = 1.0f;

            dm.CreateSpacer();
        }
    public static UIDynamic CreateToggle(this MVRScript script, JSONStorableBool jsb, string label, bool rightSide = true)
    {
        var control = script.CreateToggle(jsb, rightSide);

        control.label = label;
        return(control);
    }
Пример #10
0
        private void CheckBlink()
        {
            if (Atom == null)
            {
                return;
            }

            bool e;

            if (blinkSetting_ == SettingEnable)
            {
                e = true;
            }
            else if (blinkSetting_ == SettingDisable)
            {
                e = false;
            }
            else
            {
                return;
            }

            if (blink_ == null)
            {
                var ec = Atom.GetStorableByID("EyelidControl");
                if (ec == null)
                {
                    Synergy.LogError(
                        "blink: EyelidControl not found, " +
                        "changing setting to Ignore");

                    blinkSetting_ = SettingIgnore;
                    return;
                }

                blink_ = ec.GetBoolJSONParam("blinkEnabled");
                if (blink_ == null)
                {
                    Synergy.LogError(
                        "blink: blinkEnabled not found in EyelidControl, " +
                        "changing setting to Ignore");

                    blinkSetting_ = SettingIgnore;
                    return;
                }
            }

            try
            {
                blink_.val = e;
            }
            catch (Exception ex)
            {
                Synergy.LogError(
                    "blink: can't set value on blinkEnabled, " +
                    ex.ToString() + ", changing setting to Ignore");

                blinkSetting_ = SettingIgnore;
            }
        }
Пример #11
0
        protected override void CreateExpandPanel(RectTransform container)
        {
            var group = container.gameObject.AddComponent <VerticalLayoutGroup>();

            group.spacing        = 4f;
            group.padding        = new RectOffset(8, 8, 8, 8);
            group.childAlignment = TextAnchor.MiddleCenter;

            var row1 = new GameObject();

            row1.transform.SetParent(group.transform, false);
            row1.AddComponent <LayoutElement>().preferredHeight = 70f;
            row1.AddComponent <HorizontalLayoutGroup>();

            CreateExpandButton(row1.transform, "Select", () => target.SelectInVam());

            CreateExpandButton(row1.transform, "Parenting & more", () =>
            {
                plugin.ChangeScreen(ControllerTargetSettingsScreen.ScreenName, target.name);
            });

            var row2 = new GameObject();

            row2.transform.SetParent(group.transform, false);
            row2.AddComponent <HorizontalLayoutGroup>();

            var posJSON = new JSONStorableBool("Position", target.controlPosition, val => target.controlPosition = val);

            CreateExpandToggle(row2.transform, posJSON);
            var rotJSON = new JSONStorableBool("Rotation", target.controlRotation, val => target.controlRotation = val);

            CreateExpandToggle(row2.transform, rotJSON);
        }
        public override void Init()
        {
            try
            {
                TitleUITextField();

                color = new JSONStorableColor("Color", HSVColorPicker.RGBToHSV(1f, 1f, 1f), _ => SyncMats());
                RegisterColor(color);
                CreateColorPicker(color, true);
                FloatSlider(ref alpha, "Color Alpha", 1,
                            _ => { SyncMats(); }, 0, 2, true);

                renderOriginal = new JSONStorableBool("Render Original Material", true);
                RegisterBool(renderOriginal);
                CreateToggle(renderOriginal, false);

                mode = new JSONStorableBool("Mode", true, (bool _) => SyncMats());
                CreateToggle(mode, false);

                RegisterUrl(loadedShaderPath);

                CreateButton("Rescan active clothes").button.onClick.AddListener(() =>
                {
                    StartCoroutine(Rebuild());
                });
            }
            catch (Exception e)
            {
                Log.Error($"{e}");
            }
        }
Пример #13
0
    public override void Awake()
    {
        try
        {
            base.Awake();

            autoSetup = new SnugAutoSetup(context.containingAtom, this);

            disableSelfGrabJSON = new JSONStorableBool("DisablePersonGrab", false);
            falloffJSON         = new JSONStorableFloat("Falloff", 0.3f, 0f, 5f, false);

            _lHand = new SnugHand {
                controller = containingAtom.freeControllers.FirstOrDefault(fc => fc.name == "lHandControl")
            };
            _rHand = new SnugHand {
                controller = containingAtom.freeControllers.FirstOrDefault(fc => fc.name == "rHandControl")
            };

            InitAnchors();
            InitVisualCues();
        }
        catch (Exception exc)
        {
            SuperController.LogError($"{nameof(SnugModule)}.{nameof(Awake)}: {exc}");
        }
    }
Пример #14
0
 public void BoolCheckbox(ref JSONStorableBool output, string name, bool start,
                          JSONStorableBool.SetBoolCallback callback = null, bool right = false)
 {
     output = new JSONStorableBool(name, start, callback);
     script.RegisterBool(output);
     script.CreateToggle(output, right);
 }
Пример #15
0
        private void InitializeUI()
        {
            vibrationFrequencyStorable = new JSONStorableFloat("Frequency", 0.2f,
                                                               (float value) => {
                if (vibrationAutoStrength.val)
                {
                    // 1-Mathf.Pow(valueFrom0to1,3)
                    vibrationStrengthStorable.valNoCallback = StrengthFromFrequency(value);
                }
            },
                                                               0f, 1f);
            RegisterFloat(vibrationFrequencyStorable);
            CreateSlider(vibrationFrequencyStorable);

            vibrationStrengthStorable = new JSONStorableFloat("Strength", 0.03f,
                                                              (float value) => {
                vibrationAutoStrength.val = false;
            },
                                                              0f, 1f);
            RegisterFloat(vibrationStrengthStorable);
            var strengthSlider = CreateSlider(vibrationStrengthStorable, rightSide: true);


            vibrationAutoStrength = new JSONStorableBool("AutoStrength", true, (bool value) => {
                if (value)
                {
                    vibrationStrengthStorable.valNoCallback = StrengthFromFrequency(vibrationFrequencyStorable.val);
                }
            });
            RegisterBool(vibrationAutoStrength);
            CreateToggle(vibrationAutoStrength, rightSide: true);
        }
Пример #16
0
        private void InitMiscSettingsUI(bool rightSide)
        {
            _loop = new JSONStorableBool("Loop", current?.loop ?? true, (bool val) => ChangeLoop(val));
            RegisterStorable(_loop);
            var loopUI = plugin.CreateToggle(_loop, rightSide);

            RegisterComponent(loopUI);

            _ensureQuaternionContinuity = new JSONStorableBool("Ensure Quaternion Continuity", true, (bool val) => SetEnsureQuaternionContinuity(val));
            RegisterStorable(_ensureQuaternionContinuity);
            var ensureQuaternionContinuityUI = plugin.CreateToggle(_ensureQuaternionContinuity, rightSide);

            RegisterComponent(ensureQuaternionContinuityUI);

            _autoPlayJSON = new JSONStorableBool("Auto Play On Load", false, (bool val) =>
            {
                foreach (var c in plugin.animation.Clips)
                {
                    c.AutoPlay = false;
                }
                current.AutoPlay = true;
            })
            {
                isStorable = false
            };
            RegisterStorable(_autoPlayJSON);
            var autoPlayUI = plugin.CreateToggle(_autoPlayJSON, rightSide);

            RegisterComponent(autoPlayUI);
        }
Пример #17
0
        public PoseController(DollmasterPlugin dm) : base(dm)
        {
            poseEnabled = new JSONStorableBool("poseEnabled", true);
            dm.RegisterBool(poseEnabled);
            UIDynamicToggle moduleEnableToggle = dm.CreateToggle(poseEnabled);

            moduleEnableToggle.label           = "Enable Pose Change";
            moduleEnableToggle.backgroundColor = Color.green;

            poseAnimationDuration = new JSONStorableFloat("poseAnimationDuration", 1.2f, 0.01f, 10.0f);
            dm.RegisterFloat(poseAnimationDuration);
            dm.CreateSlider(poseAnimationDuration);

            durationBetweenPoseChange = new JSONStorableFloat("durationBetweenPoseChange", 8.0f, 1.0f, 20.0f, false);
            dm.RegisterFloat(durationBetweenPoseChange);
            dm.CreateSlider(durationBetweenPoseChange);

            holdPose = new JSONStorableBool("holdPose", false);
            dm.RegisterBool(holdPose);
            UIDynamicToggle holdPoseToggle = ui.CreateToggle("Hold Pose", 180, 40);

            holdPose.toggle = holdPoseToggle.toggle;

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

            dm.CreateSpacer();

            controllers = atom.freeControllers.ToList();
        }
Пример #18
0
            public void CopyFrom(DAZSkinWrap wrap, Material[] hiddenMats, Material[] emissiveMats, JSONStorableBool renderOriginal)
            {
                base.skinTransform  = wrap.skinTransform;
                base.skin           = wrap.skin;
                base.dazMesh        = wrap.dazMesh;
                base.GPUSkinWrapper = wrap.GPUSkinWrapper;
                base.GPUMeshCompute = wrap.GPUMeshCompute;
                base.CopyMaterials();
                base.GPUmaterials   = wrap.GPUmaterials;
                this.renderOriginal = renderOriginal;
                this.hiddenMats     = hiddenMats;
                this.emissiveMats   = emissiveMats;

                base.wrapName  = wrap.wrapName;
                base.wrapStore = wrap.wrapStore;

                wrap.draw = false;
                base.draw = true;

                base.surfaceOffset                        = wrap.surfaceOffset;
                base.defaultSurfaceOffset                 = wrap.defaultSurfaceOffset;
                base.additionalThicknessMultiplier        = wrap.additionalThicknessMultiplier;
                base.defaultAdditionalThicknessMultiplier = wrap.defaultAdditionalThicknessMultiplier;

                var control = GetComponent <DAZSkinWrapControl>();

                if (control && (control.wrap == null || control.wrap == wrap))
                {
                    control.wrap = this;
                }
            }
Пример #19
0
        private void ScanBank(DAZMorphBank bank, List <SelectableMorph> selectableList)
        {
            if (bank == null)
            {
                return;
            }

            foreach (DAZMorph morph in bank.morphs.OrderByDescending(x => Mathf.Abs(x.appliedValue)))
            {
                // ReSharper disable once CompareOfFloatsByEqualityOperator
                if (morph.appliedValue != morph.jsonFloat.defaultVal && morph.visible)
                {
                    var jsonStorable = new JSONStorableBool($"{morph.morphName}Bool", false);

                    var morphToggle = CreateToggle(jsonStorable, true);
                    morphToggle.label = morph.displayName;

                    var selectable = new SelectableMorph
                    {
                        Morph    = morph,
                        Storable = jsonStorable,
                    };

                    morphToggle.backgroundColor = Color.Lerp(Color.white, Color.green, selectable.NormalisedMagnitude);
                    morphToggle.toggle.onValueChanged.AddListener(value =>
                    {
                        selectable.Selected = value;
                    });

                    selectableList.Add(selectable);
                }
            }
        }
Пример #20
0
    public void Show()
    {
        CreateText(new JSONStorableString("", "Binds VR trackers (such as the headset or controllers) to an atom's controllers.\n\nHands have no effect when Snug is enabled, and Head has no effect when Passenger is enabled."), true);

        CreateTitle("Settings", true);
        CreateToggle(_trackers.useProfileJSON, true, "*Use Profile <i>(Not Saved In Scene)</i>", "*Use Profile <i>(Saved In Scene)</i>");
        CreateToggle(_trackers.restorePoseAfterPossessJSON, true).label = "Restore pose after possession";

        CreateSpacer(true).height = 20f;
        CreateTitle("Utilities", true);

        CreateToggle(_trackers.previewTrackerOffsetJSON, true).label = "Preview offset in 3D";

        _handsToggleJSON = new JSONStorableBool("Enable Hands", _trackers.leftHandMotionControl.enabled || _trackers.rightHandMotionControl.enabled);
        CreateToggle(_handsToggleJSON, true);
        _handsToggleJSON.setCallbackFunction = val =>
        {
            _trackers.leftHandMotionControl.enabled  = val;
            _trackers.rightHandMotionControl.enabled = val;
            if (_currentMotionControl != null && MotionControlNames.IsHands(_currentMotionControl.name))
            {
                ShowMotionControl(_currentMotionControl);
            }
        };

        if (context.trackers.viveTrackers.Any(v => v.SyncMotionControl()))
        {
            CreateSpacer(true).height = 20f;

            CreateButton("Align <i>All</i> Vive Trackers (5s timer)", true).button.onClick.AddListener(() =>
            {
                _trackerAutoSetup.AlignAll(
                    () =>
                {
                    if (_currentMotionControl == null || !MotionControlNames.IsViveTracker(_currentMotionControl.name))
                    {
                        return;
                    }
                    ShowMotionControl(_currentMotionControl);
                    context.Refresh();
                    context.embody.activeJSON.val = true;
                });
            });
        }

        _motionControlJSON = _motionControlJSON ?? new JSONStorableStringChooser(
            "",
            new List <string>(),
            _trackers.motionControls[0].name ?? _none,
            "Tracker",
            (val) => ShowMotionControl(_trackers.motionControls.FirstOrDefault(mc => mc.name == val))
            );
        CreateScrollablePopup(_motionControlJSON);
        _motionControlJSON.choices = _trackers.motionControls
                                     .Where(mc => mc.SyncMotionControl() || MotionControlNames.IsHeadOrHands(mc.name))
                                     .Select(mc => mc.name)
                                     .ToList();

        ShowMotionControl(_trackers.motionControls.FirstOrDefault(mc => mc.name == _motionControlJSON.val));
    }
Пример #21
0
    protected override void CreateControlsInternal()
    {
        if (Colliders.Count > 0)
        {
            foreach (var collider in Colliders)
            {
                var targetCollider     = collider;
                var goToColliderButton = Script.CreateButton($"Go to collider {targetCollider.Label}", true);
                goToColliderButton.button.onClick.AddListener(() =>
                {
                    Script.SendMessage("SelectEditable", targetCollider);
                });
                RegisterControl(goToColliderButton);
            }
        }

        var detectCollisionsJsf = new JSONStorableBool("detectCollisions", Component.detectCollisions, value =>
        {
            Component.detectCollisions = _detectCollisions = value;
            SetModified();
        });

        RegisterStorable(detectCollisionsJsf);
        var detectCollisionsToggle = Script.CreateToggle(detectCollisionsJsf, true);

        detectCollisionsToggle.label = "Detect Collisions";
        RegisterControl(detectCollisionsToggle);
    }
Пример #22
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);
        }
Пример #23
0
        public override void Init()
        {
            try
            {
                if (containingAtom.type != "Person")
                {
                    SuperController.LogError($"Requires atom of type person, instead selected: {containingAtom.type}");
                    return;
                }

                JSONStorable               geometry = containingAtom.GetStorableByID("geometry");
                DAZCharacterSelector       dcs      = geometry as DAZCharacterSelector;
                GenerateDAZMorphsControlUI morphUI  = dcs.morphsControlUI;
                if (morphUI != null)
                {
                    eyesClosed = morphUI.GetMorphByDisplayName("Eyes Closed");
                }

                JSONStorable eyelids = containingAtom.GetStorableByID("EyelidControl");
                autoBlink = eyelids.GetBoolJSONParam("blinkEnabled");
            }
            catch (System.Exception e) {
                SuperController.LogError("Exception caught: " + e);
            }
        }
Пример #24
0
    protected void DestroyControls()
    {
        foreach (var storable in _controlsStorables)
        {
            if (storable is JSONStorableFloat)
            {
                var jsf = (JSONStorableFloat)storable;
                Script.RemoveSlider(jsf);
            }
            else if (storable is JSONStorableBool)
            {
                var jsb = (JSONStorableBool)storable;
                Script.RemoveToggle(jsb);
            }
            else if (storable is JSONStorableString)
            {
                var jss = (JSONStorableString)storable;
                Script.RemoveTextField(jss);
            }
            else
            {
                SuperController.LogError($"Unknown storable type: {storable.GetType()}");
            }
        }

        _controlsStorables.Clear();

        foreach (var control in _controlDynamics)
        {
            if (control is UIDynamicSlider)
            {
                var slider = (UIDynamicSlider)control;
                Script.RemoveSlider(slider);
            }
            else if (control is UIDynamicToggle)
            {
                var toggle = (UIDynamicToggle)control;
                Script.RemoveToggle(toggle);
            }
            else if (control is UIDynamicTextField)
            {
                var textfield = (UIDynamicTextField)control;
                Script.RemoveTextField(textfield);
            }
            else if (control is UIDynamicButton)
            {
                var button = (UIDynamicButton)control;
                Script.RemoveButton(button);
            }
            else
            {
                SuperController.LogError($"Unknown control type: {control.GetType()}");
            }
        }

        _controlDynamics.Clear();

        _modifiedJson = null;
    }
Пример #25
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);
            }
        }
Пример #26
0
        private JSONStorableBool NewToggle(string paramName, bool rightSide = false)
        {
            JSONStorableBool storable = new JSONStorableBool(paramName, false);

            CreateToggle(storable, rightSide);
            RegisterBool(storable);
            return(storable);
        }
Пример #27
0
        JSONStorableBool NewToggle(string paramName)
        {
            JSONStorableBool storable = new JSONStorableBool(paramName, false);

            CreateToggle(storable, false);
            RegisterBool(storable);
            return(storable);
        }
Пример #28
0
        public JSONStorableBool CreateToggle(string paramName, string label, bool startingValue, JSONStorableBool.SetBoolCallback callback, bool rightSide = false)
        {
            var storable = new JSONStorableBool(paramName, startingValue, callback);
            var toggle   = Plugin.CreateToggle(storable, rightSide);

            toggle.label = label;
            return(storable);
        }
Пример #29
0
    protected UIDynamicToggle CreateToggle(JSONStorableBool jsb, bool rightSide, string labelOn, string labelOff)
    {
        var toggle = CreateToggle(jsb, rightSide);

        toggle.label = jsb.val ? labelOn : labelOff;
        toggle.toggle.onValueChanged.AddListener(on => toggle.label = on ? labelOn : labelOff);
        return(toggle);
    }
Пример #30
0
 private void InitLoopUI()
 {
     _loop = new JSONStorableBool("Loop", current?.loop ?? true, val =>
     {
         current.loop = val;
     });
     _loopUI = prefabFactory.CreateToggle(_loop);
 }