Exemplo n.º 1
0
        public BreathController(DollmasterPlugin dm) : base(dm)
        {
            chestControl = atom.GetStorableByID("chestControl") as FreeControllerV3;

            string SFX_PATH = DollmasterPlugin.ASSETS_PATH + "/SFX";

            breathingMouth   = DollmasterPlugin.LoadAudio(SFX_PATH + "/breathing_mouth.wav");
            breathingNose    = DollmasterPlugin.LoadAudio(SFX_PATH + "/breathing_nose.wav");
            breathingPanting = DollmasterPlugin.LoadAudio(SFX_PATH + "/breathing_panting.mp3");

            breathEnabled = new JSONStorableBool("breathEnabled", true);
            dm.RegisterBool(breathEnabled);
            UIDynamicToggle moduleEnableToggle = dm.CreateToggle(breathEnabled);

            moduleEnableToggle.label           = "Enable Breathing";
            moduleEnableToggle.backgroundColor = Color.green;

            dm.CreateSpacer();
        }
Exemplo n.º 2
0
        public SFXController(DollmasterPlugin dm) : base(dm)
        {
            dm.StartCoroutine(CreateAtom("AudioSource", atomPrefix, (createdAtom) =>
            {
                audioAtom = createdAtom;

                FreeControllerV3 hipControl = dm.containingAtom.GetStorableByID("hipControl") as FreeControllerV3;
                audioAtom.mainController.transform.SetPositionAndRotation(hipControl.transform.position, hipControl.transform.rotation);
                audioAtom.mainController.transform.Translate(0, -0.1f, 0, Space.Self);

                audioAtom.mainController.currentPositionState = FreeControllerV3.PositionState.ParentLink;
                audioAtom.mainController.currentRotationState = FreeControllerV3.RotationState.ParentLink;
                audioAtom.mainController.canGrabPosition      = false;
                audioAtom.mainController.canGrabRotation      = false;
                Rigidbody rb = SuperController.singleton.RigidbodyNameToRigidbody(atom.name + ":hipControl");
                audioAtom.mainController.SelectLinkToRigidbody(rb, FreeControllerV3.SelectLinkState.PositionAndRotation);
            }));

            JSONClass sfxDefaults  = dm.config.configJSON["sfxDefaults"].AsObject;
            JSONArray skinContacts = sfxDefaults["skinContact"].AsArray;
            JSONArray insertion    = sfxDefaults["insertion"].AsArray;

            for (int i = 0; i < skinContacts.Count; i++)
            {
                string path = DollmasterPlugin.PLUGIN_PATH + "/" + skinContacts[i].Value;
                skinContactSFX.Add(DollmasterPlugin.LoadAudio(path));
            }

            for (int i = 0; i < insertion.Count; i++)
            {
                string path = DollmasterPlugin.PLUGIN_PATH + "/" + insertion[i].Value;
                insertionSFX.Add(DollmasterPlugin.LoadAudio(path));
            }

            playSoundEffects = new JSONStorableBool("playSoundEffects", true);
            dm.RegisterBool(playSoundEffects);
            UIDynamicToggle moduleEnableToggle = dm.CreateToggle(playSoundEffects);

            moduleEnableToggle.label           = "Enable Sound Effects";
            moduleEnableToggle.backgroundColor = Color.green;

            dm.CreateSpacer();
        }
Exemplo n.º 3
0
        public ClimaxController(DollmasterPlugin dm) : base(dm)
        {
            climaxEnabled = new JSONStorableBool("climaxEnabled", true);
            dm.RegisterBool(climaxEnabled);
            UIDynamicToggle moduleEnableToggle = dm.CreateToggle(climaxEnabled);

            moduleEnableToggle.label           = "Enable Climax";
            moduleEnableToggle.backgroundColor = Color.green;

            climaxHeadRestEnabled = new JSONStorableBool("climaxHeadRestEnabled", true);
            dm.RegisterBool(climaxHeadRestEnabled);
            dm.CreateToggle(climaxHeadRestEnabled);

            climaxConvulsionEnabled = new JSONStorableBool("climaxConvulsionEnabled", true);
            dm.RegisterBool(climaxConvulsionEnabled);
            dm.CreateToggle(climaxConvulsionEnabled);

            restDuration = new JSONStorableFloat("restDuration", 5.0f, 0.1f, 60.0f, false);
            dm.RegisterFloat(restDuration);
            dm.CreateSlider(restDuration);

            climaxButton = dm.ui.CreateButton("Climax!", 300, 120);
            climaxButton.button.gameObject.SetActive(false);
            climaxButton.buttonText.fontSize = 48;
            UI.ColorButton(climaxButton, new Color(1, 1, 1), new Color(0.8f, 0.0f, 0.0f));

            climaxButton.button.onClick.AddListener(() =>
            {
                dm.arousal.MaxOut();
            });

            headControl            = atom.GetStorableByID("headControl") as FreeControllerV3;
            headHoldRotationTarget = headControl.RBHoldRotationSpring;

            atom.freeControllers.ToList().ForEach((controller) =>
            {
                initialRotationSpring[controller] = controller.RBHoldRotationSpring;
                initialPositionSpring[controller] = controller.RBHoldPositionSpring;
            });

            dm.CreateSpacer();
        }
Exemplo n.º 4
0
        public Expressions(DollmasterPlugin dm) : base(dm)
        {
            EXPRESSIONS_PATH = DollmasterPlugin.ASSETS_PATH + "/Expressions";
            string MANIFEST_PATH = EXPRESSIONS_PATH + "/expression_manifest.json";

            Debug.Log(MANIFEST_PATH);
            manifest = JSON.Parse(SuperController.singleton.ReadFileIntoString(MANIFEST_PATH)).AsObject;

            mouthOpenGroup   = new ExpressionGroup(manifest["mouth open"].AsObject, dm);
            mouthClosedGroup = new ExpressionGroup(manifest["mouth closed"].AsObject, dm);
            eyesGroup        = new ExpressionGroup(manifest["eyes"].AsObject, dm);
            idleGroup        = new ExpressionGroup(manifest["idle"].AsObject, dm);
            kissGroup        = new ExpressionGroup(manifest["kiss"].AsObject, dm);
            climaxGroup      = new ExpressionGroup(manifest["climax"].AsObject, dm);

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

            morphControl = character.morphsControlUI;
        }
Exemplo n.º 5
0
        public PluginState(DollmasterPlugin dm)
        {
            personalityChoice = new JSONStorableStringChooser("personality", dm.personas.personalityNames, defaultPersonalityName, "Personality", (string choice) =>
            {
                dm.SetPersonality(choice);
            });

            dm.SetPersonality(personalityChoice.val);

            dm.RegisterStringChooser(personalityChoice);

            UIPopup popup = dm.ui.CreatePopup("Personality", 300, 80);

            popup.transform.Translate(0.7f, 0.065f, 0, Space.Self);
            popup.showSlider        = true;
            personalityChoice.popup = popup;

            //UIDynamicPopup personalityPopup = dm.CreatePopup(personalityChoice);
            //personalityPopup.popup.topButton.image.color = new Color(0.8f, 0.65f, 0.13f);
            //dm.CreateSpacer();
        }
Exemplo n.º 6
0
        public ThrustAutoController(DollmasterPlugin dm) : base(dm)
        {
            autoThrustEnabled = new JSONStorableBool("auto thrust", false);
            dm.RegisterBool(autoThrustEnabled);
            UIDynamicToggle autoThrustToggle = ui.CreateToggle("Auto Thrust", 180, 40);

            autoThrustEnabled.toggle = autoThrustToggle.toggle;
            autoThrustToggle.transform.Translate(0.415f, -0.0430f, 0, Space.Self);
            autoThrustToggle.backgroundColor = new Color(0.2f, 0.2f, 0.2f);
            autoThrustToggle.labelText.color = new Color(1, 1, 1);

            autoThrustHoldDuration = new JSONStorableFloat("auto thrust hold duration", 4.0f, 1.0f, 10.0f, false);
            dm.RegisterFloat(autoThrustHoldDuration);
            dm.CreateSlider(autoThrustHoldDuration);

            autoThrustVariance = new JSONStorableFloat("auto thrust range", 2f, 0.1f, 5f, false);
            dm.RegisterFloat(autoThrustVariance);
            dm.CreateSlider(autoThrustVariance);

            dm.CreateSpacer();
        }
Exemplo n.º 7
0
        public Arousal(DollmasterPlugin dm) : base(dm)
        {
            this.dm = dm;

            arousalEnabled = new JSONStorableBool("arousalEnabled", true);
            dm.RegisterBool(arousalEnabled);
            UIDynamicToggle moduleEnableToggle = dm.CreateToggle(arousalEnabled);

            moduleEnableToggle.label           = "Enable Arousal";
            moduleEnableToggle.backgroundColor = Color.green;

            arousalValue = new JSONStorableFloat("arousal", 0, 0, SLIDER_MAX, false, false);
            dm.RegisterFloat(arousalValue);

            UIDynamicSlider arousalSlider = dm.ui.CreateSlider("❤", 300, 120);

            //arousalSlider.valueFormat = "n0";
            arousalValue.slider           = arousalSlider.slider;
            sliderBGImage                 = arousalSlider.GetComponentInChildren <Image>();
            sliderBGImage.color           = new Color(0.2f, 0.2f, 0.2f, 1.0f);
            arousalSlider.labelText.color = new Color(1, 1, 1);

            arousalRate = new JSONStorableFloat("arousalRate", 1, 0.01f, 10, false, true);
            dm.RegisterFloat(arousalRate);
            dm.CreateSlider(arousalRate);

            arousalDecay = new JSONStorableFloat("arousalDecay", 0.3f, 0.01f, 10, false, true);
            dm.RegisterFloat(arousalDecay);
            dm.CreateSlider(arousalDecay);

            arousalDelay = new JSONStorableFloat("arousalDelay", 0.25f, 0.01f, 5, false, true);
            dm.RegisterFloat(arousalDelay);
            dm.CreateSlider(arousalDelay);

            timeToDecay = new JSONStorableFloat("timeToDecay", 2, 0, 60, false, true);
            dm.RegisterFloat(timeToDecay);
            dm.CreateSlider(timeToDecay);

            dm.CreateSpacer();
        }
Exemplo n.º 8
0
        public TopButtons(DollmasterPlugin dm) : base(dm)
        {
            AddButton("Select Person", () =>
            {
                SuperController.singleton.editModeToggle.isOn = true;
                SuperController.singleton.ShowMainHUDAuto();
                SuperController.singleton.ClearSelection();
                SuperController.singleton.SelectController(atom.mainController);
            });

            // Shit's broken yo.

            //AddButton("Change Look", () =>
            //{
            //    SuperController.singleton.ShowMainHUDAuto();
            //    PresetManager pm = atom.GetComponentInChildren<PresetManager>(includeInactive: true);
            //    PresetManagerControlUI pmcui = atom.GetComponentInChildren<PresetManagerControlUI>(includeInactive: true);
            //    if (pm != null && pmcui != null)
            //    {
            //        pm.itemType = PresetManager.ItemType.Atom;
            //        pm.creatorName = null;
            //        pm.storeFolderName = "Appearance";
            //        pm.storeName = "Appearance";
            //        pmcui.browsePresetsButton.onClick.Invoke();
            //        //atom.LoadAppearancePresetDialog();
            //    }
            //    dm.dressController.OnRestore();
            //});

            //AddButton("Change Outfit", () =>
            //{
            //    SuperController.singleton.ShowMainHUDAuto();
            //    PresetManager pm = atom.GetComponentInChildren<PresetManager>(includeInactive: true);
            //    PresetManagerControlUI pmcui = atom.GetComponentInChildren<PresetManagerControlUI>(includeInactive: true);

            //    if (pm != null && pmcui != null)
            //    {
            //        pm.itemType = PresetManager.ItemType.Custom;
            //        pm.customPath = "Atom/Person/Clothing/";
            //        pmcui.browsePresetsButton.onClick.Invoke();
            //    }

            //    dm.dressController.OnRestore();
            //});

            AddButton("Toggle Clothes", () =>
            {
                dm.dressController.ToggleDressed();
            });

            AddButton("Select Pose", () =>
            {
                SuperController.singleton.ShowMainHUDAuto();
                // TODO: Preset pose-loading is not working here.
                string text = SuperController.singleton.savesDir + atom.type + "\\pose";
                SuperController.singleton.fileBrowserUI.defaultPath = text;
                SuperController.singleton.fileBrowserUI.SetTextEntry(b: false);
                SuperController.singleton.fileBrowserUI.Show((path) => {
                    if (string.IsNullOrEmpty(path))
                    {
                        return;
                    }
                    atom.LoadPhysicalPreset(path);

                    SuperController.singleton.PauseSimulation(5, "Loading Pose");

                    AllJointsController ajc = atom.GetComponentInChildren <AllJointsController>(includeInactive: true);
                    ajc.SetOnlyKeyJointsOn();
                    dm.thrustController.Clear();
                    dm.thrustController.GenerateThrustAtoms();
                });
            });

            AddButton("VAMasutra", () =>
            {
                SuperController.singleton.ShowMainHUDAuto();
                string sutraPath = DollmasterPlugin.ASSETS_PATH + "/VAMasutra";
                SuperController.singleton.fileBrowserUI.defaultPath = sutraPath;
                SuperController.singleton.fileBrowserUI.SetTextEntry(b: false);
                SuperController.singleton.fileBrowserUI.Show((path) => {
                    var montageJSON = JSON.Parse(SuperController.singleton.ReadFileIntoString(path)) as JSONClass;
                    dm.montageController.currentMontage = null;
                    MontageController.BeginMontage(dm, montageJSON);
                });
            });

            AddButton("Cycle Thruster", () =>
            {
                dm.montageController.NextThruster();
            });

            bool minimized = false;

            UIDynamicButton minimizeUIButton = ui.CreateButton("Minimize UI", 100, 40);

            minimizeUIButton.transform.Translate(0.1f, -0.1f, 0, Space.Self);
            UI.ColorButton(minimizeUIButton, Color.white, Color.black);

            Dictionary <GameObject, bool> priorActive = new Dictionary <GameObject, bool>();

            minimizeUIButton.button.onClick.AddListener(() =>
            {
                minimized = !minimized;

                Transform t = ui.canvas.transform;
                for (int i = 0; i < t.childCount; i++)
                {
                    GameObject child = t.GetChild(i).gameObject;
                    if (minimized)
                    {
                        priorActive[child] = child.activeSelf;
                        child.SetActive(false);
                    }
                    else
                    {
                        child.SetActive(priorActive[child]);
                    }
                }

                minimizeUIButton.gameObject.SetActive(true);

                minimizeUIButton.label = minimized ? "Max UI" : "Minimize UI";
            });
        }
Exemplo n.º 9
0
        public MontageController(DollmasterPlugin dm, PoseController poseController) : base(dm)
        {
            this.poseController = poseController;

            UIDynamicButton saveButton = dm.CreateButton("Create Montage", true);

            saveButton.button.onClick.AddListener(() =>
            {
                SuperController.singleton.currentSaveDir = SuperController.singleton.currentLoadDir;

                string name     = "Montage " + montages.Count;
                Montage montage = new Montage(name, GetMontageAtoms());
                montages.Add(montage);

                montageChoice.SetVal(name);
                montageChoice.choices = GetMontageNamesList();

                currentMontage = montage;

                nextMontageButton.gameObject.SetActive(true);
                poseController.nextPoseButton.gameObject.SetActive(true);
            });

            montageChoice = new JSONStorableStringChooser("montage", GetMontageNamesList(), "", "Select Montage", (string montageName) =>
            {
                Montage found = FindMontageByName(montageName);
                if (found == null)
                {
                    //SuperController.LogError("montage not found " + montageName);
                    SetPoseUIActive(false);
                    return;
                }

                float prevThrustValue = dm.thrustController.slider.slider.value;

                found.Apply();
                currentMontage = found;
                Debug.Log("Applying Montage " + montageName);
                poseController.SetMontage(found);

                dm.thrustController.slider.slider.value = prevThrustValue;

                nextMontageButton.gameObject.SetActive(true);
                poseController.nextPoseButton.gameObject.SetActive(true);

                SetPoseUIActive(true);
            });
            dm.RegisterStringChooser(montageChoice);
            //montageChoice.storeType = JSONStorableParam.StoreType.Appearance;

            nextMontageButton = dm.ui.CreateButton("Next Montage", 300, 80);
            nextMontageButton.transform.Translate(0, -0.1f, 0, Space.Self);
            nextMontageButton.buttonColor = new Color(0.4f, 0.3f, 0.05f);
            nextMontageButton.textColor   = new Color(1, 1, 1);
            nextMontageButton.button.onClick.AddListener(() =>
            {
                if (montages.Count == 0)
                {
                    return;
                }

                int index     = montageChoice.choices.IndexOf(montageChoice.val);
                int nextIndex = index + 1;
                if (nextIndex >= montageChoice.choices.Count)
                {
                    nextIndex = 0;
                }

                string choice = montageChoice.choices[nextIndex];
                montageChoice.SetVal(choice);

                poseController.StopCurrentAnimation();
            });
            nextMontageButton.gameObject.SetActive(false);

            dm.CreateSpacer(true).height = 25;
            dm.CreatePopup(montageChoice, true);
            montageChoice.popup.onOpenPopupHandlers += () => {
                montageChoice.choices = GetMontageNamesList();
            };

            dm.CreateButton("Update Selected Montage", true).button.onClick.AddListener(() =>
            {
                if (currentMontage != null)
                {
                    currentMontage.montageJSON = GetMontageAtoms();
                }
            });

            //dm.CreateButton("Clear Montages", true).button.onClick.AddListener(() =>
            //{
            //    montages.Clear();
            //    currentMontage = null;
            //    poseController.SetMontage(null);

            //    nextMontageButton.gameObject.SetActive(false);
            //    poseController.nextPoseButton.gameObject.SetActive(false);
            //});

            dm.CreateButton("Delete Selected Montage", true).button.onClick.AddListener(() =>
            {
                if (currentMontage == null)
                {
                    return;
                }

                montages.Remove(currentMontage);
                currentMontage = null;
                poseController.SetMontage(null);
                montageChoice.SetVal("");

                if (montages.Count == 0)
                {
                    nextMontageButton.gameObject.SetActive(false);
                    poseController.nextPoseButton.gameObject.SetActive(false);
                }
                else
                {
                    montageChoice.SetVal(montages[0].name);
                }
            });


            dm.CreateSpacer(true).height = 50;

            poseChoicePopup       = dm.CreatePopup(poseController.poseChoice, true);
            poseChoicePopup.label = "Select Pose";
            poseChoicePopup.popup.onOpenPopupHandlers += () =>
            {
                if (currentMontage == null)
                {
                    poseController.poseChoice.choices = new List <string>();
                    return;
                }
                poseController.poseChoice.choices = currentMontage.GetPoseNames();
            };

            dm.CreateSpacer(true).height = 25;

            addPoseButton = dm.CreateButton("Add Pose", true);
            addPoseButton.button.onClick.AddListener(() =>
            {
                if (currentMontage == null)
                {
                    return;
                }

                currentMontage.AddPose(PoseController.GetLocalPose(atom));
            });

            deletePoseButton = dm.CreateButton("Delete Selected Pose", true);
            deletePoseButton.button.onClick.AddListener(() =>
            {
                if (currentMontage == null)
                {
                    return;
                }

                JSONClass pose = poseController.GetPoseFromName(poseController.poseChoice.val);
                if (pose == null)
                {
                    return;
                }

                currentMontage.poses.Remove(pose);
            });

            //clearPosesButton = dm.CreateButton("Clear Poses", true);
            //clearPosesButton.button.onClick.AddListener(() =>
            //{
            //    if (currentMontage == null)
            //    {
            //        return;
            //    }

            //    currentMontage.poses.Clear();
            //    poseController.poseChoice.choices = new List<string>();
            //});


            SetPoseUIActive(false);
        }
Exemplo n.º 10
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;

            poseChoice = new JSONStorableStringChooser("poseChoice", new List <string>(), "Default", "Pose", (string poseName) =>
            {
                try
                {
                    if (currentMontage == null)
                    {
                        return;
                    }

                    JSONClass pose = GetPoseFromName(poseName);
                    if (pose == null)
                    {
                        SuperController.LogError("no pose with id " + poseName);
                        return;
                    }

                    AnimateToPose(pose);
                }
                catch (Exception e)
                {
                    Debug.Log(e);
                }
            });

            dm.RegisterStringChooser(poseChoice);



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

            nextPoseButton = dm.ui.CreateButton("Next Pose", 300, 80);
            nextPoseButton.transform.Translate(0.415f, -0.1f, 0, Space.Self);
            nextPoseButton.buttonColor = new Color(0.4f, 0.3f, 0.05f);
            nextPoseButton.textColor   = new Color(1, 1, 1);
            nextPoseButton.button.onClick.AddListener(() =>
            {
                if (currentMontage == null || poseChoice.choices.Count <= 1)
                {
                    return;
                }

                int index     = poseChoice.choices.IndexOf(poseChoice.val);
                int nextIndex = index + 1;
                if (nextIndex >= poseChoice.choices.Count)
                {
                    nextIndex = 0;
                }

                poseChoice.SetVal(poseChoice.choices[nextIndex]);
            });
            nextPoseButton.gameObject.SetActive(false);

            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();
        }
Exemplo n.º 11
0
        public ThrustController(DollmasterPlugin dm) : base(dm)
        {
            thrustEnabled = new JSONStorableBool("thrustEnabled", true);
            dm.RegisterBool(thrustEnabled);
            UIDynamicToggle moduleEnableToggle = dm.CreateToggle(thrustEnabled);

            moduleEnableToggle.label           = "Enable Thrusting";
            moduleEnableToggle.backgroundColor = Color.green;

            thrustAtomChooser = new JSONStorableStringChooser("thrustTarget", GetAnimationPatternNames(), "", "Thrust Control", (string name) =>
            {
                RestoreOriginalSlider();

                ap = null;

                UISetupState(SuperController.singleton.GetAtomByUid(name));
            });
            thrustAtomChooser.storeType = JSONStorableParam.StoreType.Full;
            dm.RegisterStringChooser(thrustAtomChooser);
            UIDynamicPopup popup = dm.CreatePopup(thrustAtomChooser);

            popup.popup.onOpenPopupHandlers += () =>
            {
                thrustAtomChooser.choices = GetAnimationPatternNames();
            };

            slider = dm.ui.CreateSlider("Thrust Speed", 300, 120);
            slider.transform.Translate(0, 0.15f, 0, Space.Self);

            slider.slider.onValueChanged.AddListener((float v) =>
            {
                if (ap == null)
                {
                    return;
                }

                JSONStorableFloat speedStore = ap.GetFloatJSONParam("speed");
                if (speedStore.slider != slider.slider)
                {
                    AttachCustomSlider();
                }
            });

            Image img = slider.GetComponentInChildren <Image>();

            img.color = new Color(0.4f, 0.2f, 0.245f, 1.0f);
            slider.labelText.color = new Color(1, 1, 1);

            slider.gameObject.SetActive(false);

            createButton = dm.ui.CreateButton("Generate Animation Pattern or...", 400, 120);
            createButton.transform.Translate(0, 0.15f, 0, Space.Self);
            createButton.buttonColor = new Color(0.4f, 0.2f, 0.245f, 1.0f);
            createButton.textColor   = new Color(1, 1, 1);

            createButton.button.onClick.AddListener(GenerateThrustAtoms);

            selectButton = dm.ui.CreateButton("Select Animation Pattern To Control", 400, 120);
            selectButton.transform.Translate(0.52f, 0.15f, 0, Space.Self);
            selectButton.buttonColor = new Color(0.4f, 0.2f, 0.245f, 1.0f);
            selectButton.textColor   = new Color(1, 1, 1);

            selectButton.button.onClick.AddListener(() =>
            {
                SuperController.singleton.SelectModeAtom((atom) =>
                {
                    if (atom == null)
                    {
                        return;
                    }

                    if (atom.GetStorableByID("AnimationPattern") == null)
                    {
                        SuperController.LogError("Select an Animation Pattern");
                        return;
                    }

                    AnimationPattern ap = atom.GetStorableByID("AnimationPattern") as AnimationPattern;
                    ap.SyncStepNames();
                    ap.autoSyncStepNamesJSON.SetVal(false);

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

            dm.CreateSpacer();

            GenerateThrustAtoms();
        }
Exemplo n.º 12
0
        public TopButtons(DollmasterPlugin dm) : base(dm)
        {
            Color accessButtonColor = new Color(0.05f, 0.15f, 0.08f);
            Color accessTextColor   = new Color(0.4f, 0.6f, 0.45f);

            float xSpacing = 0.22f;

            UIDynamicButton selectButton = ui.CreateButton("Select Person", 100, 40);

            selectButton.button.onClick.AddListener(() =>
            {
                SuperController.singleton.editModeToggle.isOn = true;
                SuperController.singleton.ShowMainHUD();
                SuperController.singleton.ClearSelection();
                SuperController.singleton.SelectController(atom.mainController);
            });
            selectButton.transform.Translate(0, 0.3f, 0, Space.Self);
            UI.ColorButton(selectButton, accessTextColor, accessButtonColor);

            UIDynamicButton loadLookButton = ui.CreateButton("Change Look", 100, 40);

            loadLookButton.button.onClick.AddListener(() =>
            {
                SuperController.singleton.ShowMainHUD();
                atom.LoadAppearancePresetDialog();
            });
            loadLookButton.transform.Translate(xSpacing, 0.3f, 0, Space.Self);
            UI.ColorButton(loadLookButton, accessTextColor, accessButtonColor);

            UIDynamicButton toggleDressButton = ui.CreateButton("Dress/Undress", 100, 40);

            toggleDressButton.transform.Translate(xSpacing * 2, 0.3f, 0, Space.Self);
            toggleDressButton.button.onClick.AddListener(() =>
            {
                dm.dressController.ToggleDressed();
            });
            UI.ColorButton(toggleDressButton, accessTextColor, accessButtonColor);

            UIDynamicButton exposeDressButton = ui.CreateButton("Expose Dress", 100, 40);

            exposeDressButton.button.onClick.AddListener(() =>
            {
                dm.dressController.CycleDressExposed();
            });
            exposeDressButton.transform.Translate(xSpacing * 3, 0.3f, 0, Space.Self);
            UI.ColorButton(exposeDressButton, accessTextColor, accessButtonColor);

            bool minimized = false;

            UIDynamicButton minimizeUIButton = ui.CreateButton("Minimize UI", 100, 40);

            minimizeUIButton.transform.Translate(0.1f, -0.25f, 0, Space.Self);
            UI.ColorButton(minimizeUIButton, Color.white, Color.black);

            Dictionary <GameObject, bool> priorActive = new Dictionary <GameObject, bool>();

            minimizeUIButton.button.onClick.AddListener(() =>
            {
                minimized = !minimized;

                Transform t = ui.canvas.transform;
                for (int i = 0; i < t.childCount; i++)
                {
                    GameObject child = t.GetChild(i).gameObject;
                    if (minimized)
                    {
                        priorActive[child] = child.activeSelf;
                        child.SetActive(false);
                    }
                    else
                    {
                        child.SetActive(priorActive[child]);
                    }
                }

                minimizeUIButton.gameObject.SetActive(true);

                minimizeUIButton.label = minimized ? "Max UI" : "Minimize UI";
            });
        }
Exemplo n.º 13
0
 public void Activate(DollmasterPlugin dm)
 {
     MontageController.BeginMontage(dm, montageJSON);
 }
Exemplo n.º 14
0
        public ThrustController(DollmasterPlugin dm) : base(dm)
        {
            thrustEnabled = new JSONStorableBool("thrustEnabled", true);
            dm.RegisterBool(thrustEnabled);
            UIDynamicToggle moduleEnableToggle = dm.CreateToggle(thrustEnabled);

            moduleEnableToggle.label           = "Enable Thrusting";
            moduleEnableToggle.backgroundColor = Color.green;

            thrustAtomChooser = new JSONStorableStringChooser("thrustTarget", GetAnimationPatternNames(), "", "Thrust Control", (string name) =>
            {
                RestoreOriginalSlider();

                ap = null;

                UISetupState(SuperController.singleton.GetAtomByUid(name));
            });
            thrustAtomChooser.storeType = JSONStorableParam.StoreType.Full;
            dm.RegisterStringChooser(thrustAtomChooser);
            UIDynamicPopup popup = dm.CreatePopup(thrustAtomChooser);

            popup.popup.onOpenPopupHandlers += () =>
            {
                thrustAtomChooser.choices = GetAnimationPatternNames();
            };

            slider = dm.ui.CreateSlider("Thrust Speed", 300, 120);
            slider.transform.Translate(0, 0.15f, 0, Space.Self);

            slider.slider.onValueChanged.AddListener((float v) =>
            {
                if (ap == null)
                {
                    return;
                }

                JSONStorableFloat speedStore = ap.GetFloatJSONParam("speed");
                if (speedStore.slider != slider.slider)
                {
                    AttachCustomSlider();
                }
            });

            Image img = slider.GetComponentInChildren <Image>();

            img.color = new Color(0.4f, 0.2f, 0.245f, 1.0f);
            slider.labelText.color = new Color(1, 1, 1);

            slider.gameObject.SetActive(false);

            createButton = dm.ui.CreateButton("Generate Animation Pattern or...", 400, 120);
            createButton.transform.Translate(0, 0.15f, 0, Space.Self);
            createButton.buttonColor = new Color(0.4f, 0.2f, 0.245f, 1.0f);
            createButton.textColor   = new Color(1, 1, 1);

            createButton.button.onClick.AddListener(() =>
            {
                dm.StartCoroutine(CreateAtom("AnimationPattern", "Thrust AP", (apAtom) =>
                {
                    AnimationPattern ap = apAtom.GetStorableByID("AnimationPattern") as AnimationPattern;

                    ap.autoSyncStepNamesJSON.SetVal(false);

                    thrustAtomChooser.SetVal(apAtom.name);

                    if (ap.steps.Length >= 2)
                    {
                        return;
                    }

                    FreeControllerV3 hipControl = atom.GetStorableByID("hipControl") as FreeControllerV3;
                    apAtom.mainController.transform.SetPositionAndRotation(hipControl.transform.position, hipControl.transform.rotation);
                    apAtom.SelectAtomParent(atom);

                    //ap.animatedTransform = hipControl.transform;

                    MoveProducer mp = apAtom.GetStorableByID("AnimatedObject") as MoveProducer;
                    mp.SetReceiverByName(atom.name + ":hipControl");

                    AnimationStep stepA = ap.CreateStepAtPosition(0);
                    stepA.containingAtom.ClearParentAtom();
                    stepA.containingAtom.mainController.transform.position = apAtom.mainController.transform.position;
                    stepA.containingAtom.mainController.transform.rotation = apAtom.mainController.transform.rotation;
                    //stepA.containingAtom.SetParentAtom(apAtom.name);

                    AnimationStep stepB = ap.CreateStepAtPosition(1);
                    stepB.containingAtom.ClearParentAtom();
                    FreeControllerV3 abdomen2Control = atom.GetStorableByID("abdomen2Control") as FreeControllerV3;

                    stepB.containingAtom.mainController.transform.position = abdomen2Control.transform.position;
                    stepB.containingAtom.mainController.transform.rotation = apAtom.mainController.transform.rotation;

                    apAtom.mainController.transform.Translate(0, 0, -0.2f, Space.Self);

                    stepA.containingAtom.mainController.currentPositionState = FreeControllerV3.PositionState.ParentLink;
                    stepA.containingAtom.mainController.currentRotationState = FreeControllerV3.RotationState.ParentLink;
                    Rigidbody rba = SuperController.singleton.RigidbodyNameToRigidbody(apAtom.name + ":control");
                    stepA.containingAtom.mainController.SelectLinkToRigidbody(rba, FreeControllerV3.SelectLinkState.PositionAndRotation);

                    stepB.containingAtom.mainController.currentPositionState = FreeControllerV3.PositionState.ParentLink;
                    stepB.containingAtom.mainController.currentRotationState = FreeControllerV3.RotationState.ParentLink;
                    Rigidbody rbb = SuperController.singleton.RigidbodyNameToRigidbody(apAtom.name + ":control");
                    stepB.containingAtom.mainController.SelectLinkToRigidbody(rbb, FreeControllerV3.SelectLinkState.PositionAndRotation);

                    UISetupState(apAtom);

                    ap.SyncStepNames();
                }, true));
            });

            selectButton = dm.ui.CreateButton("Select Animation Pattern To Control", 400, 120);
            selectButton.transform.Translate(0.52f, 0.15f, 0, Space.Self);
            selectButton.buttonColor = new Color(0.4f, 0.2f, 0.245f, 1.0f);
            selectButton.textColor   = new Color(1, 1, 1);

            selectButton.button.onClick.AddListener(() =>
            {
                SuperController.singleton.SelectModeAtom((atom) =>
                {
                    if (atom == null)
                    {
                        return;
                    }

                    if (atom.GetStorableByID("AnimationPattern") == null)
                    {
                        SuperController.LogError("Select an Animation Pattern");
                        return;
                    }

                    AnimationPattern ap = atom.GetStorableByID("AnimationPattern") as AnimationPattern;
                    ap.SyncStepNames();
                    ap.autoSyncStepNamesJSON.SetVal(false);

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

            dm.CreateSpacer();
        }