Exemplo n.º 1
0
        private void InitFixMissingUI()
        {
            if (plugin.animation.Clips.Count <= 1)
            {
                return;
            }

            var clipList  = current.AllTargets.Select(t => t.name).OrderBy(x => x);
            var otherList = plugin.animation.Clips.Where(c => c != current).SelectMany(c => c.AllTargets).Select(t => t.name).OrderBy(x => x).Distinct();
            var ok        = clipList.SequenceEqual(otherList);

            if (ok)
            {
                return;
            }

            UIDynamicButton enableAllTargetsUI = null;
            UIDynamic       spacerUI           = null;

            enableAllTargetsUI = plugin.CreateButton("Add All Other Animations' Targets", true);
            enableAllTargetsUI.button.onClick.AddListener(() =>
            {
                EnableAllTargets();
                plugin.RemoveButton(enableAllTargetsUI);
                plugin.RemoveSpacer(spacerUI);
            });
            enableAllTargetsUI.buttonColor = Color.yellow;
            RegisterComponent(enableAllTargetsUI);

            spacerUI = CreateSpacer(true);
        }
Exemplo n.º 2
0
        private void Refresh()
        {
            foreach (SelectableMorph selectableMorph in _mainBank)
            {
                RemoveToggle(selectableMorph.Storable);
            }

            _mainBank.Clear();

            foreach (SelectableMorph selectableMorph in _genitalBank)
            {
                RemoveToggle(selectableMorph.Storable);
            }

            _genitalBank.Clear();

            ScanBank(_characterSelector.morphBank1, _mainBank);

            if (_genitalSpacer != null)
            {
                RemoveSpacer(_genitalSpacer);
            }
            _genitalSpacer = CreateSpacer(rightSide: true);

            ScanBank(_characterSelector.morphBank2, _genitalBank);
            ScanBank(_characterSelector.morphBank3, _genitalBank);
        }
Exemplo n.º 3
0
        public void AddControls()
        {
            spacer        = synthia.CreateSpacer();
            spacer.height = 24;

            // TODO id just so happens to match here
            // perhaps actually pass in the id here and let animation hold on to it?


            playButton = synthia.CreateButton("Play " + id);
            playButton.button.onClick.AddListener(() =>
            {
                synthia.ForcePlayAnimation(this);
            });
            playButton.buttonColor = new Color(.3f, 0.9f, 0.33f);


            idLabel        = synthia.CreateTextField(new JSONStorableString("id", id));
            idLabel.height = 4;

            loopToggle = synthia.CreateToggle(loopStorable);
            restartOnAnimationChangeToggle = synthia.CreateToggle(restartOnAnimationChangeStorable);
            startFrameSlider   = synthia.CreateSlider(startFrameStorable);
            endFrameSlider     = synthia.CreateSlider(endFrameStorable);
            rootMotionXZToggle = synthia.CreateToggle(rootMotionXZStorable);
            rootMotionYToggle  = synthia.CreateToggle(rootMotionYStorable);

            removeButton = synthia.CreateButton("Remove " + id);
            removeButton.button.onClick.AddListener(() =>
            {
                synthia.animations.Remove(id);
                RemoveControls();
            });
            removeButton.buttonColor = new Color(.8f, 0.3f, 0.2f);
        }
Exemplo n.º 4
0
        public UIHorizontalGroup(UIDynamic container, float width, float height, Vector2 spacing, int count, Func <int, Transform> itemCreator)
        {
            this.container = container;

            gameObject = new GameObject();
            gameObject.transform.SetParent(container.gameObject.transform, false);

            var rectTransform = gameObject.AddComponent <RectTransform>();

            rectTransform.anchoredPosition = new Vector2(0, 0);
            rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
            rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height);

            var gridLayout = gameObject.AddComponent <GridLayoutGroup>();

            gridLayout.constraint      = GridLayoutGroup.Constraint.FixedColumnCount;
            gridLayout.constraintCount = count;
            gridLayout.spacing         = spacing;
            gridLayout.cellSize        = new Vector2((width - spacing.x * (count - 1)) / count, height);
            gridLayout.childAlignment  = TextAnchor.MiddleCenter;

            for (var i = 0; i < count; i++)
            {
                var item = itemCreator(i);
                item.gameObject.transform.SetParent(gridLayout.transform, false);
                items.Add(item.gameObject);
            }
        }
Exemplo n.º 5
0
        public void OnEnable()
        {
            if (_atom == null || _ui != null)
            {
                return;
            }

            try
            {
                var x = 0f;
                var y = -0.37f;
                _ui = new SimpleSignUI(_atom, this);
                _ui.CreateUIToggleInCanvas(_lockedJSON, x, y + 0.1f);
                _ui.CreateUIPopupInCanvas(_atomsJSON, x, y + 0.355f);
                _ui.CreateUIPopupInCanvas(_animationJSON, x, y + 0.425f);
                _controlPanelSpacer = _ui.CreateUISpacerInCanvas(x, y + 0.375f, 780f);
                if (_mainLinkedAnimation != null)
                {
                    RequestControlPanelInjection();
                }
            }
            catch (Exception exc)
            {
                SuperController.LogError($"VamTimeline.{nameof(ControllerPlugin)}.{nameof(OnEnable)}: " + exc);
            }
        }
Exemplo n.º 6
0
        private void RefreshTargetsList()
        {
            if (animation == null)
            {
                return;
            }
            RemoveTargets();
            RemoveTargetSiblingComponents();

            var hasTargets = false;

            foreach (var target in _filterJSON.val ? animationEditContext.GetAllOrSelectedTargets().OfType <TriggersAnimationTarget>() : current.targetTriggers)
            {
                hasTargets = true;
                var keyframeUI = prefabFactory.CreateSpacer();
                keyframeUI.height = 60f;
                var component = keyframeUI.gameObject.AddComponent <TriggersTargetFrame>();
                component.popupParent = popupParent;
                component.Bind(plugin, animationEditContext.current, target);
                _targets.Add(component);
            }

            foreach (var target in _filterJSON.val ? animationEditContext.GetAllOrSelectedTargets().OfType <FreeControllerAnimationTarget>() : current.targetControllers)
            {
                hasTargets = true;
                var keyframeUI = prefabFactory.CreateSpacer();
                keyframeUI.height = 60f;
                var component = keyframeUI.gameObject.AddComponent <ControllerTargetFrame>();
                component.Bind(plugin, animationEditContext.current, target);
                _targets.Add(component);
            }

            foreach (var target in _filterJSON.val ? animationEditContext.GetAllOrSelectedTargets().OfType <FloatParamAnimationTarget>() : current.targetFloatParams)
            {
                hasTargets = true;
                var keyframeUI = prefabFactory.CreateSpacer();
                keyframeUI.height = 60f;
                var component = keyframeUI.gameObject.AddComponent <FloatParamTargetFrame>();
                component.Bind(plugin, animationEditContext.current, target);
                _targets.Add(component);
            }

            if (!hasTargets)
            {
                _noTargetsUI = prefabFactory.CreateHeader("No targets", 2);
            }
            else
            {
                _spacerUI = prefabFactory.CreateSpacer();

                _filterUI = prefabFactory.CreateToggle(_filterJSON);
                _filterUI.backgroundColor = NavButtonColor;
                var toggleColors = _filterUI.toggle.colors;
                toggleColors.normalColor = NavButtonColor;
                _filterUI.toggle.colors  = toggleColors;
            }

            CreateAddRemoveTargetsButton(current.GetAllTargetsCount() == 0);
        }
Exemplo n.º 7
0
        public override void Init()
        {
            try
            {
                disableUpdate       = true;
                pluginLabelJSON.val = "Wardrobe v2.2.1 (by VamDazzler)";

                // Obtain our person
                if (containingAtom == null)
                {
                    SuperController.LogError("Please add this plugin to a PERSON atom.");
                    throw new Exception("Halting Wardrobe due to de-Atom-ization");
                }

                // Create the clothing items drop-down
                clothingItems = new JSONStorableStringChooser("clothing", EMPTY_CHOICES, null, "Clothing Item");
                UIDynamicPopup clothingSelector = CreateScrollablePopup(clothingItems);

                // Create the outfit selection drop-down
                outfitNames = new JSONStorableStringChooser("outfit", EMPTY_CHOICES, null, "Outfit");
                UIDynamicPopup outfitSelector = CreateScrollablePopup(outfitNames);
                outfitSelector.popupPanelHeight = 900f;
                RectTransform panel = outfitSelector.popup.popupPanel;
                panel.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 400f);
                panel.pivot = new Vector2(0.35f, 1.0f);

                // Create the slot in which all changed textures are stored.
                storedOutfits = new StorableReplacements();
                RegisterString(storedOutfits);

                // Action to perform replacement
                applyButton = CreateButton("Apply");
                applyButton.button.onClick.AddListener(ApplyOutfitCallback);

                // Force reload
                forceReloadButton = CreateButton("Refresh Textures");
                forceReloadButton.button.onClick.AddListener(ForceReloadCallback);

                // Create a dump button
                UIDynamic align = CreateSpacer(true);
                align.height = 25;
                dumpButton   = CreateButton("Dump OBJ and MTL files - look in root", true);
                if (dumpButton != null)
                {
                    dumpButton.button.onClick.AddListener(DumpButtonCallback);
                    dumpButton.button.interactable = false;
                }

                // Create the material listing window
                materialList = new JSONStorableString("matlist", "");
                UIDynamicTextField matListTextField = CreateTextField(materialList, true);
                matListTextField.height = 400f;
            }
            catch (Exception ex)
            {
                SuperController.LogError($"Could not initialize Wardrobe {ex}");
            }
        }
Exemplo n.º 8
0
        public void RegenerateFooter()
        {
            if (footerSpacer != null)
            {
                RemoveSpacer(footerSpacer);
            }

            footerSpacer        = CreateSpacer(true);
            footerSpacer.height = 400.0f;
        }
Exemplo n.º 9
0
        public UIInputBox(UIDynamic container, float width, float height)
        {
            this.container = container;

            gameObject = new GameObject();
            gameObject.transform.SetParent(container.gameObject.transform, false);

            var rectTransform = gameObject.AddComponent <RectTransform>();

            rectTransform.anchoredPosition = new Vector2(0, 0);
            rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
            rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height);

            var inputField = gameObject.AddComponent <InputField>();
        }
Exemplo n.º 10
0
        private void InitFixMissingUI()
        {
            if (animation.index.ByLayer(current.animationLayer).Count() <= 1)
            {
                return;
            }

            foreach (var clip in animation.index.ByLayer(current.animationLayer))
            {
                foreach (var target in clip.targetFloatParams)
                {
                    target.EnsureAvailable(false);
                }
            }

            var clipList = current.GetAllTargets()
                           .Where(t => !(t is TriggersAnimationTarget))
                           .Select(t => t.name)
                           .OrderBy(x => x);
            var otherList = animation.index
                            .ByLayer(current.animationLayer)
                            .Where(c => c != current)
                            .SelectMany(c => c.GetAllTargets().Where(t => !(t is TriggersAnimationTarget)))
                            .Select(t => t.name)
                            .Distinct()
                            .OrderBy(x => x);
            var ok = clipList.SequenceEqual(otherList);

            if (ok)
            {
                return;
            }

            prefabFactory.CreateSpacer();
            UIDynamicButton enableAllTargetsUI = null;
            UIDynamic       spacerUI           = null;

            enableAllTargetsUI = prefabFactory.CreateButton("Add all other animations' targets");
            enableAllTargetsUI.button.onClick.AddListener(() =>
            {
                AddMissingTargets();
                Destroy(enableAllTargetsUI);
                Destroy(spacerUI);
            });
            enableAllTargetsUI.buttonColor = Color.yellow;
        }
Exemplo n.º 11
0
        public UITextInput(UIDynamic container, float height, string label, string paramName, string startingValue)
            : base(container, 510, height, new Vector2(10, 0), 2, null)
        {
            storable = new JSONStorableString(paramName, startingValue);

            var gridLayout     = gameObject.GetComponent <GridLayoutGroup>();
            var labelTransform = new GameObject();

            labelTransform.transform.SetParent(gridLayout.transform, false);

            var textRect = labelTransform.AddComponent <RectTransform>();

            textRect.anchorMin        = new Vector2(0, 0);
            textRect.anchorMax        = new Vector2(1, 0);
            textRect.anchoredPosition = new Vector2(5f, 5f);
            textRect.pivot            = new Vector2(0, 0);
            textRect.sizeDelta        = new Vector2(0, 30);

            var textText = labelTransform.AddComponent <Text>();

            textText.raycastTarget = false;
            textText.alignment     = TextAnchor.MiddleCenter;
            textText.font          = (Font)Resources.GetBuiltinResource(typeof(Font), "Arial.ttf");
            textText.color         = Color.white;
            textText.text          = label;
            textText.fontSize      = 28;

            var textFieldTransform = GameObject.Instantiate <Transform>(UIManager.ConfigurableTextFieldPrefab);

            textFieldTransform.transform.SetParent(gridLayout.transform, false);

            var textField = textFieldTransform.GetComponent <UIDynamicTextField>();

            storable.dynamicText = textField;

            var layoutElement = textField.gameObject.GetComponent <LayoutElement>();

            layoutElement.minHeight       = height;
            layoutElement.preferredHeight = height;

            var input = textField.gameObject.AddComponent <InputField>();

            input.textComponent = textField.UItext;
            input.lineType      = InputField.LineType.SingleLine;
            storable.inputField = input;
        }
Exemplo n.º 12
0
        private void CreateBlendShapeUI()
        {
            ClearBlendShapeUI();

            recordButton        = Plugin.CreateToggle(StorableIsRecording);
            recordButton.height = 75;
            recordButton.label  = GetRecordingLabel();

            recordMessage = Plugin.CreateTextField(StorableRecordingMessage, rightSide: true);
            recordMessage.SetLayoutHeight(75);

            minimumChangeSlider      = Plugin.CreateSlider(StorableMinimumChangePct);
            minimumChangeSliderSpace = Plugin.CreateSpacer(rightSide: true);

            foreach (var group in CBlendShape.Groups())
            {
                var isEnabledStorable = StorableIsGroupEnabled[group];

                var toggle = Plugin.CreateToggle(isEnabledStorable);
                var space  = Plugin.CreateSpacer(rightSide: true);
                space.height = toggle.height;

                groupUiElements.Add(toggle);
                groupUiElements.Add(space);

                if (isEnabledStorable.val)
                {
                    var i             = 0;
                    var shapesInGroup = CBlendShape.IdsInGroup(group).ToList();
                    foreach (var shapeId in shapesInGroup)
                    {
                        shapeMultiplierSliders[shapeId] = Plugin.CreateSlider(StorableBlendShapeStrength[shapeId], rightSide: (i % 2 != 0));
                        i++;
                    }
                    // if there are an odd number of shapes in this group, add a spacer that is the same height
                    // and one of the sliders
                    if (shapesInGroup.Count % 2 != 0 && shapesInGroup.Count > 0)
                    {
                        var spacer = Plugin.CreateSpacer(rightSide: true);
                        spacer.height = shapeMultiplierSliders.FirstOrDefault().Value.height;
                        groupUiElements.Add(spacer);
                    }
                }
            }
        }
Exemplo n.º 13
0
 private void RemoveTargetSiblingComponents()
 {
     if (_filterUI != null)
     {
         prefabFactory.RemoveToggle(_filterJSON, _filterUI);
     }
     if (_textUI != null)
     {
         prefabFactory.RemoveTextField(_textJSON, _textUI);
     }
     _filterUI = null;
     Destroy(_noTargetsUI?.gameObject);
     _noTargetsUI = null;
     Destroy(_spacerUI?.gameObject);
     _spacerUI = null;
     Destroy(_manageTargetsUI?.gameObject);
     _manageTargetsUI = null;
 }
        public virtual void CreateUI(IUIBuilder builder)
        {
            RefreshButton = builder.CreateButton("Refresh", () =>
            {
                ComponentCache.Clear();
                RefreshButtonCallback();
            });
            RefreshButton.buttonColor = new Color(0, 0.75f, 1f) * 0.8f;
            RefreshButton.textColor   = Color.white;

            Spacer = builder.CreateSpacer(200);

            RefreshAction = UIManager.CreateAction("Refresh Motion Source", () =>
            {
                ComponentCache.Clear();
                RefreshButtonCallback();
            });
        }
Exemplo n.º 15
0
        public void OnEnable()
        {
            if (_atom == null || _ui != null)
            {
                return;
            }

            try
            {
                _ui = new SimpleSignUI(_atom, this);
                _ui.CreateUIPopupInCanvas(_atomsJSON);
                _injectedUIContainer = _ui.CreateUISpacerInCanvas(1060f);
                ScanForAtoms();
                if (_selectedLink != null)
                {
                    RequestControlPanelInjection();
                }
            }
            catch (Exception exc)
            {
                SuperController.LogError($"VamTimeline.{nameof(ControllerPlugin)}.{nameof(OnEnable)}: " + exc);
            }
        }
Exemplo n.º 16
0
        private void InitFixMissingUI()
        {
            if (animation.clips.Where(c => c.animationLayer == current.animationLayer).Count() <= 1)
            {
                return;
            }

            var clipList  = current.GetAllTargets().Select(t => t.name).OrderBy(x => x);
            var otherList = animation.clips
                            .Where(c => c != current && c.animationLayer == current.animationLayer)
                            .SelectMany(c => c.GetAllTargets())
                            .Select(t => t.name)
                            .Distinct()
                            .OrderBy(x => x);
            var ok = clipList.SequenceEqual(otherList);

            if (ok)
            {
                return;
            }

            prefabFactory.CreateSpacer();
            UIDynamicButton enableAllTargetsUI = null;
            UIDynamic       spacerUI           = null;

            enableAllTargetsUI = prefabFactory.CreateButton("Add all other animations' targets");
            enableAllTargetsUI.button.onClick.AddListener(() =>
            {
                AddMissingTargets();
                Destroy(enableAllTargetsUI);
                Destroy(spacerUI);
            });
            enableAllTargetsUI.buttonColor = Color.yellow;

            spacerUI = prefabFactory.CreateSpacer();
        }
Exemplo n.º 17
0
        private void CreateNewSpacer(float height, bool rightSide = false)
        {
            UIDynamic spacer = CreateSpacer(rightSide);

            spacer.height = height;
        }
Exemplo n.º 18
0
        public UICurveEditor(UIDynamic container, float width, float height, List <UIDynamicButton> buttons = null, UICurveEditorColors colors = null, bool readOnly = false)
        {
            var buttonContainerHeight = (buttons == null || buttons.Count == 0) ? 0 : 25;

            this.container = container;

            _storableToLineMap  = new Dictionary <IStorableAnimationCurve, UICurveLine>();
            _lineToContainerMap = new Dictionary <UICurveLine, GameObject>();
            _lines  = new List <UICurveLine>();
            _colors = colors ?? new UICurveEditorColors();

            gameObject = new GameObject();
            gameObject.transform.SetParent(container.transform, false);

            var mask = gameObject.AddComponent <RectMask2D>();

            mask.rectTransform.anchoredPosition = new Vector2(0, buttonContainerHeight / 2);
            mask.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
            mask.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height - buttonContainerHeight);

            var input = gameObject.AddComponent <UIInputBehaviour>();

            input.OnInput += OnInput;

            var backgroundContent = new GameObject();

            backgroundContent.transform.SetParent(gameObject.transform, false);

            var backgroundImage = backgroundContent.AddComponent <Image>();

            backgroundImage.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
            backgroundImage.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height - buttonContainerHeight);
            backgroundImage.color = _colors.backgroundColor;

            _linesContainer = new GameObject();
            _linesContainer.transform.SetParent(gameObject.transform, false);
            _linesContainer.AddComponent <CanvasGroup>();

            var raycastEvents = _linesContainer.AddComponent <UIRaycastEventsBehaviour>();

            raycastEvents.DefaultOnPointerClick += OnLinesContainerClick;
            raycastEvents.DefaultOnDrag         += OnLinesContainerDrag;
            raycastEvents.DefaultOnEndDrag      += OnLinesContainerEndDrag;

            this.readOnly = readOnly;

            var lineContainerRectTranform = _linesContainer.AddComponent <RectTransform>();

            lineContainerRectTranform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
            lineContainerRectTranform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height - buttonContainerHeight);

            if (buttons != null && buttons.Count != 0)
            {
                var buttonContainer = new GameObject();
                buttonContainer.transform.SetParent(container.transform, false);

                var rectTransform = buttonContainer.AddComponent <RectTransform>();
                rectTransform.anchoredPosition = new Vector2(0, -(height - buttonContainerHeight) / 2);
                rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
                rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, buttonContainerHeight);

                var gridLayout = buttonContainer.AddComponent <GridLayoutGroup>();
                gridLayout.constraint      = GridLayoutGroup.Constraint.FixedColumnCount;
                gridLayout.constraintCount = buttons.Count;
                gridLayout.spacing         = new Vector2();
                gridLayout.cellSize        = new Vector2(width / buttons.Count, buttonContainerHeight);
                gridLayout.childAlignment  = TextAnchor.MiddleCenter;

                foreach (var button in buttons)
                {
                    button.gameObject.transform.SetParent(gridLayout.transform, false);
                }
            }

            _scrubbersContainer = new GameObject();
            _scrubbersContainer.transform.SetParent(gameObject.transform, false);
            _scrubbersContainer.AddComponent <CanvasGroup>().alpha = 0;
        }
Exemplo n.º 19
0
 public static void RemoveSpacer(UIDynamic o) => Instance.plugin.RemoveSpacer(o);
Exemplo n.º 20
0
        // IMPORTANT - DO NOT make custom enums. The dynamic C# complier crashes Unity when it encounters these for
        // some reason

        // IMPORTANT - DO NOT OVERRIDE Awake() as it is used internally by MVRScript - instead use Init() function which
        // is called right after creation
        public override void Init()
        {
            try {
                // put init code in here
                SuperController.LogMessage("Template Loaded");

                // create custom JSON storable params here if you want them to be stored with scene JSON
                // types are JSONStorableFloat, JSONStorableBool, JSONStorableString, JSONStorableStringChooser
                // JSONStorableColor

                // JSONStorableFloat example
                JSONStorableFloat jfloat = new JSONStorableFloat("FooParam", 0f, DummyFloatCallback, 0f, 5f, true);
                RegisterFloat(jfloat);
                dslider = CreateSlider(jfloat);

                // button example
                dbutton = CreateButton("FooButton");
                if (dbutton != null)
                {
                    dbutton.button.onClick.AddListener(DummyButtonCallback);
                }

                // JSONStorableColor example
                HSVColor          hsvc   = HSVColorPicker.RGBToHSV(1f, 0f, 0f);
                JSONStorableColor jcolor = new JSONStorableColor("FooColor", hsvc, DummyColorCallback);
                RegisterColor(jcolor);
                CreateColorPicker(jcolor);

                // JSONStorableString example
                jstring = new JSONStorableString("FooString", "");
                // register tells engine you want value saved in json file during save and also make it available to
                // animation/trigger system
                //RegisterString(jstring);
                dtext = CreateTextField(jstring);

                // JSONStorableStringChooser example
                List <string> choices = new List <string>();
                choices.Add("None");
                choices.Add("Choice1");
                choices.Add("Choice2");
                choices.Add("Choice3");
                JSONStorableStringChooser jchooser = new JSONStorableStringChooser("FooChooser", choices, "None", "Choose Form Of Destruction", DummyChooserCallback);
                UIDynamicPopup            udp      = CreatePopup(jchooser, true);
                //CreateScrollablePopup(jchooser, true);
                udp.labelWidth = 300f;

                JSONStorableFloat jfloat2 = new JSONStorableFloat("FooParam2", 0f, 0f, 1f);
                CreateSlider(jfloat2, true);

                // spacer example
                UIDynamic spacer = CreateSpacer(true);
                // give the popup some room
                spacer.height = 400f;

                // JSONStorableToggle example
                JSONStorableBool jbool = new JSONStorableBool("FooBool", true);
                CreateToggle(jbool, true);
            }
            catch (Exception e) {
                SuperController.LogError("Exception caught: " + e);
            }
        }
Exemplo n.º 21
0
        private void InitOptionsUI(VAMLaunch plugin)
        {
            _chooseAtomButton = plugin.CreateButton("Select Zone Target");
            _chooseAtomButton.button.onClick.AddListener(() =>
            {
                SuperController.singleton.SelectModeAtom((atom) =>
                {
                    if (atom == null)
                    {
                        return;
                    }

                    _targetAtomChooser.SetVal(atom.uid);
                });
            });

            _chooseAtomPopup = plugin.CreateScrollablePopup(_targetAtomChooser);
            _chooseAtomPopup.popup.onOpenPopupHandlers += () =>
            {
                _targetAtomChooser.choices = GetTargetAtomChoices();
            };

            _chooseControlPopup = plugin.CreateScrollablePopup(_targetControllerChooser);
            _chooseControlPopup.popup.onOpenPopupHandlers += () =>
            {
                _targetControllerChooser.choices = GetTargetControllerChoices();
            };

            var slider = plugin.CreateSlider(_targetZoneWidth, true);

            slider.label = "Target Zone Width";
            slider.slider.onValueChanged.AddListener((v) =>
            {
                _targetZoneWidth.SetVal(v);
            });

            slider       = plugin.CreateSlider(_targetZoneHeight, true);
            slider.label = "Target Zone Height";
            slider.slider.onValueChanged.AddListener((v) =>
            {
                _targetZoneHeight.SetVal(v);
            });

            slider       = plugin.CreateSlider(_targetZoneDepth, true);
            slider.label = "Target Zone Depth";
            slider.slider.onValueChanged.AddListener((v) =>
            {
                _targetZoneDepth.SetVal(v);
            });

            slider       = plugin.CreateSlider(_positionSampleRate, true);
            slider.label = "Position Sample Rate";
            slider.slider.onValueChanged.AddListener((v) =>
            {
                _positionSampleRate.SetVal(v);
            });

            slider       = plugin.CreateSlider(_minLaunchSignalTimeThreshold, true);
            slider.label = "Min Adjust Time Threshold";
            slider.slider.onValueChanged.AddListener((v) =>
            {
                _minLaunchSignalTimeThreshold.SetVal(v);
            });

            slider       = plugin.CreateSlider(_maxLaunchSignalTimeThreshold, true);
            slider.label = "Max Adjust Time Threshold";
            slider.slider.onValueChanged.AddListener((v) =>
            {
                _maxLaunchSignalTimeThreshold.SetVal(v);
            });

            slider       = plugin.CreateSlider(_lowerVelocityBarrier, true);
            slider.label = "Min Adjust Time Vel Barrier";
            slider.slider.onValueChanged.AddListener((v) =>
            {
                _lowerVelocityBarrier.SetVal(v);
            });

            slider       = plugin.CreateSlider(_higherVelocityBarrier, true);
            slider.label = "Max Adjust Time Vel Barrier";
            slider.slider.onValueChanged.AddListener((v) =>
            {
                _higherVelocityBarrier.SetVal(v);
            });

            slider       = plugin.CreateSlider(_launchSpeedMultiplier, true);
            slider.label = "Launch Speed Multiplier";
            slider.slider.onValueChanged.AddListener((v) =>
            {
                _launchSpeedMultiplier.SetVal(v);
            });

            _spacer0 = plugin.CreateSpacer();

            slider       = plugin.CreateSlider(_currentLaunchSignalTimeThreshold, false);
            slider.label = "Adjust Time";

            slider       = plugin.CreateSlider(_currentTargetPos, false);
            slider.label = "Current Target Position";
        }
Exemplo n.º 22
0
        public override void Init()
        {
            try {
                UpdateInitialMorphs();
                UpdateNewMorphs();
                UpdateCurrentMorphs();

                #region Sliders
                minSlider           = new JSONStorableFloat("Minimum value", -0.15f, -1f, 1.0f, true);
                minSlider.storeType = JSONStorableParam.StoreType.Full;
                RegisterFloat(minSlider);
                CreateSlider(minSlider, false);

                maxSlider           = new JSONStorableFloat("Maximum value", 0.35f, -1f, 1.0f, true);
                maxSlider.storeType = JSONStorableParam.StoreType.Full;
                RegisterFloat(maxSlider);
                CreateSlider(maxSlider, false);

                multiSlider           = new JSONStorableFloat("Multiplier", 1f, 0f, 2f, true);
                multiSlider.storeType = JSONStorableParam.StoreType.Full;
                RegisterFloat(multiSlider);
                CreateSlider(multiSlider, false);
                #endregion

                #region Region Buttons Preparation
                GenerateDAZMorphsControlUI morphControl = returnMorphs();

                HashSet <string>            regions          = new HashSet <string>();
                HashSet <string>            LastRegions      = new HashSet <string>();
                Dictionary <string, string> temporaryToggles = new Dictionary <string, string>();

                JSONStorableBool playingBool = new JSONStorableBool("Play", true);
                playingBool.storeType = JSONStorableParam.StoreType.Full;
                RegisterBool(playingBool);
                toggles["Play"] = CreateToggle((playingBool), false);

                smoothToggle = new JSONStorableBool("Smooth transitions", true);
                RegisterBool(smoothToggle);
                CreateToggle((smoothToggle), false);

                abaToggle = new JSONStorableBool("Reset used expressions at loop", true);
                RegisterBool(abaToggle);
                CreateToggle((abaToggle), false);

                manualToggle = new JSONStorableBool("Trigger transitions manually", false);
                RegisterBool(manualToggle);
                CreateToggle((manualToggle), false);

                JSONStorableAction manualTrigger = new JSONStorableAction("Trigger transition", () => { UpdateRandomParams(); });
                RegisterAction(manualTrigger);

                morphControl.GetMorphDisplayNames().ForEach((name) =>
                {
                    DAZMorph morph = morphControl.GetMorphByDisplayName(name);
                    regions.Add(morph.region);

                    if (
                        (poseRegion.Any((str) => morph.region.Contains(str)) &&
                         !bodyRegion.Any((str) => morph.region.Contains(str))) ||
                        tailorList.Any((str) => name.Contains(str))
                        )
                    {
                        string[] posePaths      = Regex.Split(morph.region, "/");
                        string morphUpperRegion = "";

                        foreach (string posePath in posePaths)
                        {
                            morphUpperRegion = posePath;
                        }

                        LastRegions.Add(morphUpperRegion);
                        toggleRelations[name]  = morphUpperRegion;
                        temporaryToggles[name] = morphUpperRegion + "/" + name;
                    }
                });

                #region Region Helper Buttons
                UIDynamicButton selectAll = CreateButton("Select All", true);
                selectAll.button.onClick.AddListener(delegate() {
                    toggles.Values.ToList().ForEach((toggle) =>
                    {
                        toggle.toggle.isOn = true;
                    });
                });

                UIDynamicButton selectNone = CreateButton("Select None", true);
                selectNone.button.onClick.AddListener(delegate() {
                    toggles.Values.ToList().ForEach((toggle) =>
                    {
                        toggle.toggle.isOn = false;
                    });
                });

                UIDynamicButton selectDefault = CreateButton("Select Default", true);
                selectDefault.button.onClick.AddListener(delegate() {
                    foreach (KeyValuePair <string, UIDynamicToggle> entry in toggles)
                    {
                        if (entry.Key != "Play")
                        {
                            toggles[entry.Key].toggle.isOn = defaultOn.Any((str) => entry.Key.Equals(str));
                        }
                    }
                    ;
                });

                UIDynamicButton selectPres1 = CreateButton("Select preset 1", true);
                selectPres1.button.onClick.AddListener(delegate() {
                    foreach (KeyValuePair <string, UIDynamicToggle> entry in toggles)
                    {
                        if (entry.Key != "Play")
                        {
                            toggles[entry.Key].toggle.isOn = preset1.Any((str) => entry.Key.Equals(str));
                        }
                    }
                    ;
                });

                UIDynamicButton selectPres2 = CreateButton("Select preset 2", true);
                selectPres2.button.onClick.AddListener(delegate() {
                    foreach (KeyValuePair <string, UIDynamicToggle> entry in toggles)
                    {
                        if (entry.Key != "Play")
                        {
                            toggles[entry.Key].toggle.isOn = preset2.Any((str) => entry.Key.Equals(str));
                        }
                    }
                    ;
                });
                CreateSpacer(true).height = 10f;;
                #endregion

                #region Region checkbox generation
                foreach (KeyValuePair <string, string> entry in temporaryToggles)
                {
                    JSONStorableBool checkBoxTick = new JSONStorableBool(entry.Value, defaultOn.Any((str) => entry.Key.Equals(str)), (bool on) => {
                        togglesOn = toggles.Where(t => t.Value.toggle.isOn).ToDictionary(p => p.Key, p => p.Value);

                        if (!on && entry.Key != "Play")
                        {
                            DAZMorph morph   = morphControl.GetMorphByDisplayName(entry.Key);
                            morph.morphValue = 0;
                        }
                    });
                    checkBoxTick.storeType = JSONStorableParam.StoreType.Full;
                    RegisterBool(checkBoxTick);

                    toggles[entry.Key] = CreateToggle(checkBoxTick, true);
                }
                togglesOn = toggles.Where(t => t.Value.toggle.isOn).ToDictionary(p => p.Key, p => p.Value);
                #endregion

                #endregion

                //CreateSpacer();
                UIDynamicButton transitionButton = CreateButton("Trigger transition", false);
                transitionButton.button.onClick.AddListener(delegate() {
                    UpdateRandomParams();
                });
                transitionButton.buttonColor = new Color(0.5f, 1f, 0.5f);

                UIDynamicButton animatableButton = CreateButton("Clear Animatable (from selected)", false);
                animatableButton.button.onClick.AddListener(delegate()
                {
                    morphControl.GetMorphDisplayNames().ForEach((name) =>
                    {
                        DAZMorph morph = morphControl.GetMorphByDisplayName(name);
                        if (toggles.ContainsKey(name) && toggles[name].toggle.isOn)
                        {
                            morph.animatable = false;
                        }
                    });
                });

                #region SetAsDef button
                UIDynamicButton setasdefButton = CreateButton("Set current state as default", false);
                setasdefButton.button.onClick.AddListener(delegate()
                {
                    UpdateInitialMorphs();
                });
                #endregion

                #region Reset button
                UIDynamicButton resetButton = CreateButton("Reset", false);
                resetButton.button.onClick.AddListener(delegate()
                {
                    toggles["Play"].toggle.isOn = false;
                    ResetMorphs();
                });
                #endregion

                #region ZeroMorph button
                UIDynamicButton ZeroMorphButton = CreateButton("Zero Selected", false);
                ZeroMorphButton.button.onClick.AddListener(delegate()
                {
                    toggles["Play"].toggle.isOn = false;
                    ZeroMorphs();
                });
                #endregion

                masterSpeedSlider           = new JSONStorableFloat("Master speed", 1f, 0f, 10f, true);
                masterSpeedSlider.storeType = JSONStorableParam.StoreType.Full;
                RegisterFloat(masterSpeedSlider);
                CreateSlider(masterSpeedSlider, false);

                animWaitSlider           = new JSONStorableFloat("Loop length", 2f, 0.1f, 20f, true);
                animWaitSlider.storeType = JSONStorableParam.StoreType.Full;
                RegisterFloat(animWaitSlider);
                CreateSlider(animWaitSlider, false);

                animLengthSlider           = new JSONStorableFloat("Morphing speed", 1.0f, 0.1f, 20f, true);
                animLengthSlider.storeType = JSONStorableParam.StoreType.Full;
                RegisterFloat(animLengthSlider);
                CreateSlider(animLengthSlider, false);

                morphList = new JSONStorableString("FooString", "");
                UIDynamic morphListText = CreateTextField(morphList, false);
                morphListText.height = 320;
            }
            catch (Exception e) {
                SuperController.LogError("Exception caught: " + e);
            }
        }
Exemplo n.º 23
0
 public void RemoveSpacer(UIDynamic component)
 {
     _plugin.RemoveSpacer(component); _spacers.Remove(component);
 }
Exemplo n.º 24
0
        public MorphSelectUI(ExpressionCreator script)
        {
            this.script = script;

            Color color = GetNextColor();

            groupString = new JSONStorableStringChooser("group", script.morphGroupMap.Keys.ToList(), "", "Morph Group", (string groupPopupName) =>
            {
                string groupName = script.morphGroupMap[groupPopupName];
                GenerateDAZMorphsControlUI morphControl = script.GetMorphControl();
                List <string> acceptedMorphs            = new List <string>();
                script.GetMorphControl().GetMorphDisplayNames().ForEach((name) =>
                {
                    DAZMorph morph = morphControl.GetMorphByDisplayName(name);
                    if (morph.region == groupName)
                    {
                        acceptedMorphs.Add(morph.displayName);
                    }
                });

                if (selectedMorph != null)
                {
                    morphValue.SetVal(selectedMorph.startValue);
                    selectedMorph = null;
                }

                List <string> existing = script.GetExistingMorphNames();

                morphString.choices = acceptedMorphs.ToList().Where((name) =>
                {
                    return(existing.Contains(name) == false);
                }).ToList();
                morphString.SetVal(morphString.choices[0]);

                morphPopup.gameObject.SetActive(true);
            });

            groupPopup        = script.CreatePopup(groupString, true);
            groupString.popup = groupPopup.popup;

            morphString = new JSONStorableStringChooser("morph", new List <string>(), "", "Morph", (string morphName) =>
            {
                GenerateDAZMorphsControlUI morphControl = script.GetMorphControl();
                DAZMorph morph = morphControl.GetMorphByDisplayName(morphName);
                if (morph == null)
                {
                    return;
                }

                if (selectedMorph != null)
                {
                    script.OnMorphRemoved(selectedMorph);

                    morphValue.SetVal(selectedMorph.startValue);
                    selectedMorph = null;
                }

                selectedMorph  = morph;
                morphValue.min = morph.min;
                morphValue.max = morph.max;
                morphValue.SetVal(morph.startValue);
                morphValue.defaultVal = morphValue.defaultVal;

                removeButton.label = "Remove " + selectedMorph.displayName;
                morphSlider.label  = selectedMorph.displayName;

                script.OnMorphSelected(selectedMorph);

                morphSlider.gameObject.SetActive(true);
                groupPopup.gameObject.SetActive(false);
            });
            morphPopup        = script.CreateScrollablePopup(morphString, true);
            morphString.popup = morphPopup.popup;

            morphPopup.gameObject.SetActive(false);

            morphValue = new JSONStorableFloat("morphValue", 0, (float value) =>
            {
                if (selectedMorph == null)
                {
                    return;
                }

                selectedMorph.SetValue(value);

                script.OnMorphValueChanged(selectedMorph, value);
            }, 0, 1, false, true);

            morphSlider       = script.CreateSlider(morphValue, true);
            morphValue.slider = morphSlider.slider;
            morphSlider.gameObject.SetActive(false);
            morphSlider.quickButtonsEnabled = false;

            removeButton = script.CreateButton("Remove Morph", true);
            removeButton.button.onClick.AddListener(() =>
            {
                Remove();
            });

            spacer = script.CreateSpacer(true);
        }
        private void InitControls(string freeform, Boolean side)
        {
            var lines = Regex.Split(freeform, "\r\n")
                        .Select(x => x.Trim())
                        .Where(x => x.Count() > 0);

            UIDynamic         ui = null;
            JSONStorableParam js = null;

            foreach (string line in lines)
            {
                {// a label
                    var t = Regex.Match(line, "^`(.*)$");
                    if (t.Success)
                    {
                        JSONStorableString storable = new JSONStorableString("Info", t.Groups[1].Value);
                        ui = this.CreateTextField(storable, side);
                        js = storable;
                    }
                }

                {// UIDynamic properties
                    var t = Regex.Match(line, "^\\^(.*)$");
                    if (t.Success)
                    {
                        Regex.Split(t.Groups[1].Value, ",").ToList().ForEach(s =>
                        {
                            var kv = Regex.Match(s, "^(.+)=(.*)$");
                            if (kv.Success)
                            {
                                string v = kv.Groups[2].Value;
                                switch (kv.Groups[1].Value)
                                {
                                // modifies latest UIDynamic
                                case "height":
                                    {
                                        float height           = float.Parse(v);
                                        LayoutElement layout   = ((UIDynamicTextField)ui).GetComponent <LayoutElement>();
                                        layout.preferredHeight = height;
                                        layout.minHeight       = height;
                                        ui.height = height;
                                        break;
                                    }

                                case "fontSize":
                                    {
                                        ((UIDynamicTextField)ui).UItext.fontSize = (int)(float.Parse(v));
                                        break;
                                    }

                                case "alignment":
                                    {
                                        var a = ((UIDynamicTextField)ui).UItext;
                                        switch (v)
                                        {
                                        case "MiddleCenter": a.alignment = TextAnchor.MiddleCenter; break;

                                        case "MiddleLeft": a.alignment = TextAnchor.MiddleLeft; break;

                                        case "MiddleRight": a.alignment = TextAnchor.MiddleRight; break;

                                        case "LowerLeft": a.alignment = TextAnchor.LowerLeft; break;
                                        }
                                        break;
                                    }

                                case "textColor":
                                    {
                                        int i   = int.Parse(v.Substring(1), System.Globalization.NumberStyles.HexNumber);
                                        Color c = new Color((i >> 16) & 0xff, (i >> 8) & 0xff, i & 0xff);
                                        ((UIDynamicTextField)ui).textColor = c;
                                        break;
                                    }

                                case "setBoolean":
                                    {
                                        ((JSONStorableBool)js).SetVal(Boolean.Parse(v));
                                        break;
                                    }
                                }
                            }
                        });
                    }
                }

                {
                    var t = Regex.Match(line, "^SPACER ([-e.0-9]+)$");
                    if (t.Success)
                    {
                        var spacer = CreateSpacer(side);
                        spacer.height = float.Parse(t.Groups[1].Value);
                    }
                }
                {
                    var t = Regex.Match(line, "^(.+) : ([^ ]+) *(\\[.*\\])?$");
                    if (t.Success)
                    {
                        string type      = t.Groups[2].Value;
                        string varname   = t.Groups[1].Value;
                        string titlename = t.Groups[1].Value;
                        if (titlename.Contains("/"))
                        {
                            titlename = titlename.Substring(0, titlename.IndexOf("/"));
                        }
                        switch (type)
                        {
                        case "Boolean":
                        {
                            jsBoolean[varname] = new JSONStorableBool(titlename, false, new JSONStorableBool.SetBoolCallback(v => BooleanSettingChanged(varname, v)));

                            RegisterBool(jsBoolean[varname]);
                            CreateToggle(jsBoolean[varname], side);

                            BooleanSettingChanged(varname, jsBoolean[varname].val);

                            js = jsBoolean[varname];
                            break;
                        }

                        case "Float":
                        {
                            var tt = Regex.Match(t.Groups[3].Value, "^\\[([-.0-9]+),([-.0-9]+),([-.0-9]+)\\]$");
                            jsFloat[varname] = new JSONStorableFloat(
                                titlename
                                , float.Parse(tt.Groups[1].Value)
                                , new JSONStorableFloat.SetFloatCallback(v => FloatSettingChanged(varname, v))
                                , float.Parse(tt.Groups[2].Value)
                                , float.Parse(tt.Groups[3].Value)
                                , true
                                );

                            RegisterFloat(jsFloat[varname]);
                            CreateSlider(jsFloat[varname], side);

                            FloatSettingChanged(varname, jsFloat[varname].val);

                            js = jsFloat[varname];
                            break;
                        }
                        }
                    }
                }
            }
        }
Exemplo n.º 26
0
        public UICurveEditor(UIDynamic container, float width, float height, List <UIDynamicButton> buttons = null, UICurveEditorColors colors = null, bool readOnly = false)
        {
            var buttonContainerHeight = (buttons == null || buttons.Count == 0) ? 0 : 25;

            this.container = container;

            _colors = colors ?? new UICurveEditorColors();

            gameObject = new GameObject();
            gameObject.transform.SetParent(container.transform, false);

            var mask = gameObject.AddComponent <RectMask2D>();

            mask.rectTransform.anchoredPosition = new Vector2(0, buttonContainerHeight / 2);
            mask.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
            mask.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height - buttonContainerHeight);

            var backgroundContent = new GameObject();

            backgroundContent.transform.SetParent(gameObject.transform, false);

            var backgroundImage = backgroundContent.AddComponent <Image>();

            backgroundImage.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
            backgroundImage.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height - buttonContainerHeight);
            backgroundImage.color = _colors.backgroundColor;

            _canvasContainer = new GameObject();
            _canvasContainer.transform.SetParent(gameObject.transform, false);
            _canvasContainer.AddComponent <CanvasGroup>();
            _canvas = _canvasContainer.AddComponent <UICurveEditorCanvas>();
            _canvas.rectTransform.anchorMin = new Vector2(0, 0);
            _canvas.rectTransform.anchorMax = new Vector2(0, 0);
            _canvas.rectTransform.pivot     = new Vector2(0, 0);
            _canvas.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
            _canvas.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height - buttonContainerHeight);

            this.readOnly = readOnly;

            if (buttons != null && buttons.Count != 0)
            {
                var buttonContainer = new GameObject();
                buttonContainer.transform.SetParent(container.transform, false);

                var rectTransform = buttonContainer.AddComponent <RectTransform>();
                rectTransform.anchoredPosition = new Vector2(0, -(height - buttonContainerHeight) / 2);
                rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
                rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, buttonContainerHeight);

                var gridLayout = buttonContainer.AddComponent <GridLayoutGroup>();
                gridLayout.constraint      = GridLayoutGroup.Constraint.FixedColumnCount;
                gridLayout.constraintCount = buttons.Count;
                gridLayout.spacing         = new Vector2();
                gridLayout.cellSize        = new Vector2(width / buttons.Count, buttonContainerHeight);
                gridLayout.childAlignment  = TextAnchor.MiddleCenter;

                foreach (var button in buttons)
                {
                    button.gameObject.transform.SetParent(gridLayout.transform, false);
                }
            }
        }