示例#1
0
        private void InitStudioUI(Scene scene, LoadSceneMode loadSceneMode)
        {
            if (scene.name != "Studio")
            {
                return;
            }
            SceneManager.sceneLoaded -= InitStudioUI;

            var dropdownForegroundEyebrow = GameObject.Find("StudioScene").transform.Find("Canvas Main Menu/02_Manipulate/00_Chara/02_Kinematic/05_Etc/Eyebrows Draw/Dropdown").GetComponent <Dropdown>();

            dropdownForegroundEyebrow.onValueChanged.AddListener(value =>
            {
                var characters = StudioAPI.GetSelectedCharacters();
                foreach (var character in characters)
                {
                    SetEyebrows(character.charInfo, (byte)value);
                }
            });

            var dropdownForegroundEyes = GameObject.Find("StudioScene").transform.Find("Canvas Main Menu/02_Manipulate/00_Chara/02_Kinematic/05_Etc/Eyes Draw/Dropdown").GetComponent <Dropdown>();

            dropdownForegroundEyes.onValueChanged.AddListener(value =>
            {
                var characters = StudioAPI.GetSelectedCharacters();
                foreach (var character in characters)
                {
                    SetEyeliners(character.charInfo, (byte)value);
                }
            });
        }
示例#2
0
        private void SelectCharasById(CharaId matchId)
        {
            var selected      = 0;
            var origCharCount = StudioAPI.GetSelectedCharacters().Count();
            var origObjCount  = StudioAPI.GetSelectedObjects().Count() - origCharCount;

            foreach (var objectCtrlInfo in EnumerateObjects())
            {
                Logger.DebugLogDebug($"SelectCharasById: {objectCtrlInfo}");
                if (objectCtrlInfo is OCIChar ociChar)
                {
                    if (DoesCharaMatch(matchId, ociChar))
                    {
                        ociChar.MultiSelectInWorkarea();
                        selected++;
                    }
                    else
                    {
                        if (ociChar.IsSelectedInWorkarea())
                        {
                            ociChar.UnselectInWorkarea();
                        }
                    }
                }
                else
                {
                    objectCtrlInfo.UnselectInWorkarea();
                }
            }

            Logger.Log(BepInLogLevel.Info | BepInLogLevel.Message,
                       $"characters selected: {selected} ({selected - origCharCount} new selections, {origObjCount} non-characters unselected)");
            GeBoAPI.Instance.PlayNotificationSound(NotificationSound.Success);
        }
示例#3
0
            private static void CreateMenuEntry()
            {
                GameObject listmenu  = GameObject.Find("StudioScene/Canvas Main Menu/02_Manipulate/00_Chara/02_Kinematic/Viewport/Content");
                GameObject fkButton  = GameObject.Find("StudioScene/Canvas Main Menu/02_Manipulate/00_Chara/02_Kinematic/Viewport/Content/FK");
                var        newSelect = Instantiate(fkButton, listmenu.transform, true);

                newSelect.name = "FK & IK";
                TextMeshProUGUI tmp = newSelect.transform.GetChild(0).GetComponentInChildren(typeof(TextMeshProUGUI)) as TextMeshProUGUI;

                tmp.text = "FK & IK";

                Button[] buttons = listmenu.GetComponentsInChildren <Button>();

                GameObject originalPanel = GameObject.Find("StudioScene/Canvas Main Menu/02_Manipulate/00_Chara/02_Kinematic/00_FK");
                GameObject kineMenu      = GameObject.Find("StudioScene/Canvas Main Menu/02_Manipulate/00_Chara/02_Kinematic");

                FKIKPanel = Instantiate(originalPanel, kineMenu.transform, true);

                RectTransform rect = FKIKPanel.GetComponent <RectTransform>();

                rect.sizeDelta = new Vector2(rect.sizeDelta.x, 395);

                Button fkikSelectButton = newSelect.GetComponent <Button>();

                foreach (Button button in buttons)
                {
                    button.onClick.AddListener(delegate()
                    {
                        FKIKPanel.SetActive(false);
                        fkikSelectButton.image.color = Color.white;
                    });
                }

                fkikSelectButton.onClick.RemoveAllListeners();
                fkikSelectButton.onClick.AddListener(delegate()
                {
                    foreach (Transform child in kineMenu.transform)
                    {
                        if (child.name != "Viewport" && child.name != "Scrollbar Vertical")
                        {
                            child.gameObject.SetActive(false);
                        }
                    }
                    foreach (Button button in buttons)
                    {
                        button.image.color = Color.white;
                    }
                    FKIKPanel.SetActive(true);
                    fkikSelectButton.image.color = Color.green;
                    Traverse.Create(FindObjectOfType <MPCharCtrl>()).Field("kinematic").SetValue(-1);
                    foreach (OCIChar ociChar in StudioAPI.GetSelectedCharacters())
                    {
                        OverrideEvents    = true;
                        ActiveButton.isOn = ociChar.oiCharInfo.enableIK && ociChar.oiCharInfo.enableFK;
                        break;
                    }
                });
            }
        public static void RegisterStudioControls()
        {
            if (!StudioAPI.InsideStudio)
            {
                return;
            }

            StudioCoordinateCurrentStateCategoryDropdown = new CurrentStateCategoryDropdown("Coordinate", CoordinateNames.ToArray(), c => CoordinateIndex());
            StudioCoordinateCurrentStateCategoryDropdown.Value.Subscribe(value =>
            {
                var mpCharCtrol = Object.FindObjectOfType <MPCharCtrl>();
                if (StudioCoordinateDropdown != null)
                {
                    var character = StudioAPI.GetSelectedCharacters().First();

                    //Remove extras
                    if (StudioCoordinateDropdown.options.Count > OriginalCoordinateLength)
                    {
                        StudioCoordinateDropdown.options.RemoveRange(OriginalCoordinateLength, StudioCoordinateDropdown.options.Count - OriginalCoordinateLength);
                    }

                    //Add dropdown options for each additional coodinate
                    if (StudioCoordinateDropdown.options.Count < character.charInfo.chaFile.coordinate.Length)
                    {
                        for (int i = 0; i < (character.charInfo.chaFile.coordinate.Length - OriginalCoordinateLength); i++)
                        {
                            StudioCoordinateDropdown.options.Add(new Dropdown.OptionData(GetCoodinateName(character.charInfo, OriginalCoordinateLength + i)));
                        }
                        StudioCoordinateDropdown.captionText.text = StudioCoordinateDropdown.options[value].text;
                    }
                }

                if (mpCharCtrol != null)
                {
                    mpCharCtrol.stateInfo.OnClickCosType(value);
                }
            });

            int CoordinateIndex()
            {
                var character = StudioAPI.GetSelectedCharacters().First();

                return(character.charInfo.fileStatus.coordinateType);
            }

            StudioAPI.GetOrCreateCurrentStateCategory("").AddControl(StudioCoordinateCurrentStateCategoryDropdown);
        }
示例#5
0
 private void Update()
 {
     if (SwapShadersHotkey.Value.IsDown())
     {
         if (MakerAPI.InsideAndLoaded)
         {
             var chaControl = MakerAPI.GetCharacterControl();
             UpdateCharShaders(chaControl);
         }
         else if (StudioAPI.InsideStudio)
         {
             var ociChars = StudioAPI.GetSelectedCharacters();
             foreach (var ociChar in ociChars)
             {
                 UpdateCharShaders(ociChar.GetChaControl());
             }
         }
     }
 }
示例#6
0
        private void RegisterStudioControls()
        {
            var slider_AngleAnkle = CreateSlider(displaySettings.Ankle_Angle, ctrl => ctrl.AnkleAngle, (ctrl, f) => ctrl.AnkleAngle = f, 0f, 60f);
            var slider_AngleLeg   = CreateSlider(displaySettings.Leg_Angle, ctrl => ctrl.LegAngle, (ctrl, f) => ctrl.LegAngle = f, 0f, 60f);
            var slider_Height     = CreateSlider(displaySettings.Height, ctrl => ctrl.Height, (ctrl, f) => ctrl.Height = f, 0f, 0.5f);

            StudioAPI.GetOrCreateCurrentStateCategory(displaySettings.Stiletto).AddControls(slider_AngleAnkle, slider_AngleLeg, slider_Height);

            CurrentStateCategorySlider CreateSlider(string name, Func <HeelInfo, float> get, Action <HeelInfo, float> set, float minValue, float maxValue)
            {
                var slider = new CurrentStateCategorySlider(name, (chara) => get(chara.charInfo.GetComponent <HeelInfo>()), minValue, maxValue);

                slider.Value.Subscribe(x =>
                {
                    foreach (var heelInfo in StudioAPI.GetSelectedCharacters().Select(y => y.charInfo.gameObject.GetComponent <HeelInfo>()))
                    {
                        set(heelInfo, x);
                    }
                });

                return(slider);
            }
        }
示例#7
0
 public static IEnumerable <CharaId> GetSelectedMatchIds()
 {
     return(StudioAPI.GetSelectedCharacters().Select(c => c.GetMatchId()).Distinct());
 }