示例#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
文件: Utilities.cs 项目: via5/Synergy
            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;
                }
            }
        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);
 }