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); } }); }
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); }
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); }
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()); } } } }
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); } }
public static IEnumerable <CharaId> GetSelectedMatchIds() { return(StudioAPI.GetSelectedCharacters().Select(c => c.GetMatchId()).Distinct()); }