private static void RegisterMakerControls(Stiletto plugin, RegisterSubCategoriesEvent e) { // Doesn't apply to male characters if (MakerAPI.GetMakerSex() == 0) { return; } var shoesCategory = MakerConstants.Clothes.OuterShoes; var category = new MakerCategory(shoesCategory.CategoryName, "stiletto", shoesCategory.Position + 1, "Stiletto"); e.AddSubCategory(category); slider_AngleAnkle = e.AddControl(new MakerSlider(category, "AngleAnkle", 0f, 60f, 0f, plugin) { StringToValue = CreateStringToValueFunc(10f), ValueToString = CreateValueToStringFunc(10f), }); slider_AngleLeg = e.AddControl(new MakerSlider(category, "AngleLeg", 0f, 60f, 0f, plugin) { StringToValue = CreateStringToValueFunc(10f), ValueToString = CreateValueToStringFunc(10f) }); slider_Height = e.AddControl(new MakerSlider(category, "Height", 0f, 0.5f, 0f, plugin) { StringToValue = CreateStringToValueFunc(1000f), ValueToString = CreateValueToStringFunc(1000f) }); slider_AngleAnkle.ValueChanged.Subscribe(x => MakerAPI.GetCharacterControl().GetComponent <HeelInfo>().SafeProc(y => y.AnkleAnglef = x)); slider_AngleLeg.ValueChanged.Subscribe(x => MakerAPI.GetCharacterControl().GetComponent <HeelInfo>().SafeProc(y => y.LegAnglef = x)); slider_Height.ValueChanged.Subscribe(x => MakerAPI.GetCharacterControl().GetComponent <HeelInfo>().SafeProc(y => y.Heightf = x)); }
void RegisterCustomSubCategories(object sender, RegisterSubCategoriesEvent e) { var categories = new List <MakerCategory> { MakerConstants.Clothes.Top, MakerConstants.Clothes.Bottom, MakerConstants.Clothes.Bra, MakerConstants.Clothes.Panst, MakerConstants.Clothes.Gloves, MakerConstants.Clothes.Shorts, MakerConstants.Clothes.InnerShoes, MakerConstants.Clothes.OuterShoes, MakerConstants.Clothes.Socks, }; foreach (var category in categories) { var slider = new MakerSlider(category, "Specularity", 0f, 1f, 0f, this); slider.ValueChanged.Subscribe((val) => ClothingController.ChangeSpecularity(val)); e.AddControl(slider); var color = new MakerColor("Spec color", false, category, Color.white, this); color.ValueChanged.Subscribe((val) => ClothingController.ChangeSpecColor(val)); e.AddControl(color); } }
private static void RegisterCustomSubCategories(object sender, RegisterSubCategoriesEvent e) { MakerCategory category = MakerConstants.Body.All; Color[] textColors = { new Color(0.27843f, 1f, 1f), new Color(0.45f, 0.7f, 0.7f) }; MakerToggle vrHeadSizeToggle = e.AddControl(new KKAPI.Maker.UI.MakerToggle(category, "Enable VR Head Size", Instance) { TextColor = textColors[0] }); vrHeadSizeToggle.BindToFunctionController <KK_VRHeadSizeAdjustController, bool>( (controller) => controller._vrHeadSizeEnabled, (controller, value) => controller._vrHeadSizeEnabled = value ); MakerText explanation = e.AddControl(new MakerText("Enable for different head size in VR. Can improve experience for characters with large heads, which tend to look like sports mascots.", category, Instance) { TextColor = textColors[1] }); MakerSlider vrHeadSizeSlider = e.AddControl(new MakerSlider(category, "VR Head Size", SliderUnlocker.SliderUnlocker.Minimum.Value / 100, SliderUnlocker.SliderUnlocker.Maximum.Value / 100, 0.6f, Instance) { TextColor = textColors[0] }); vrHeadSizeSlider.BindToFunctionController <KK_VRHeadSizeAdjustController, float>( (controller) => controller._vrHeadSize, (controller, value) => controller._vrHeadSize = value ); }
private void MakerAPI_RegisterCustomSubCategories(object sender, RegisterSubCategoriesEvent e) { e.AddControl(new MakerText("Character Randomization", MakerConstants.Body.All, this)); e.AddControl(new MakerButton("Set current character as template", MakerConstants.Body.All, this)).OnClick.AddListener(delegate { SetTemplateCharacter(); }); e.AddControl(new MakerButton("Randomize", MakerConstants.Body.All, this)).OnClick.AddListener(delegate { RandomizeCharacter(); }); DeviationSlider = e.AddControl(new MakerSlider(MakerConstants.Body.All, "Deviation", 0, 1, 0.1f, this)); }
/// <summary> /// Register the custom controls /// </summary> /// <param name="s"></param> /// <param name="e"></param> private void MakerAPI_MakerBaseLoaded(object s, RegisterCustomControlsEvent e) { #if KK || EC || KKS var category = MakerConstants.Face.Eye; #else var category = MakerConstants.Face.Eyes; #endif EyeOpenMaxSlider = e.AddControl(new MakerSlider(category, "Eye Open Max", 0, 1, 1, this)); EyeOpenMaxSlider.ValueChanged.Subscribe(value => GetCharaController(MakerAPI.GetCharacterControl()).EyeOpenMax = value); DisableBlinkingToggle = e.AddControl(new MakerToggle(category, "Disable Character Blinking", this)); DisableBlinkingToggle.ValueChanged.Subscribe(value => GetCharaController(MakerAPI.GetCharacterControl()).DisableBlinking = value); }
private void MakerAPI_RegisterCustomSubCategories(object sender, RegisterSubCategoriesEvent e) { GooToggle = e.AddControl(new MakerToggle(MakerConstants.Body.All, "Goo", this)); GooToggle.ValueChanged.Subscribe(Observer.Create <bool>(delegate { if (DoEvents) { GetController(MakerAPI.GetCharacterControl()).SetEnabled(GooToggle.Value); } })); AlphaSlider = e.AddControl(new MakerSlider(MakerConstants.Body.All, "Alpha", 0.5f, 1f, 0.741f, this)); AlphaSlider.ValueChanged.Subscribe(Observer.Create <float>(delegate { if (DoEvents) { GetController(MakerAPI.GetCharacterControl()).SetAlpha(AlphaSlider.Value); } })); }
public void MakerAPI_RegisterCustomSubCategories(object sender, RegisterSubCategoriesEvent e) { float min = SliderMin.Value / 100f; float max = SliderMax.Value / 100f; // Boob foreach (string prefix in BoobController.prefixKeys) { foreach (string boolKey in BoobController.boolKeys) { string key = prefix + boolKey; MakerToggle toggle = toggles[key] = e.AddControl(new MakerToggle( categories[prefix], BoobController.makerAPILabels[key], BoobController.boolDefaults[key], this )); toggle.ValueChanged.Subscribe(Observer.Create <bool>(v => MakerAPI_ToggleValueChanged(key, v) )); } foreach (string floatKey in BoobController.floatKeys) { string key = prefix + floatKey; float defaultValue = BoobController.floatDefaults[key]; if (BoobController.floatMults.TryGetValue(floatKey, out float mult)) { defaultValue *= mult; } MakerSlider slider = sliders[key] = e.AddControl(new MakerSlider( categories[prefix], BoobController.makerAPILabels[key], min, max, defaultValue, this )); slider.ValueChanged.Subscribe(Observer.Create <float>(v => MakerAPI_SliderValueChanged(prefix, floatKey, v) )); } } }
private void RegisterMakerControls(Stiletto plugin, RegisterSubCategoriesEvent e) { displaySettings = StilettoContext._displaySettingsProvider.Value; var shoesCategory = MakerConstants.Clothes.OuterShoes; var category = new MakerCategory(shoesCategory.CategoryName, "stiletto", shoesCategory.Position + 1, displaySettings.Stiletto); e.AddSubCategory(category); text_heelName = e.AddControl(new MakerText(displaySettings.Default_Heel_Name, category, plugin)); slider_AnkleAngle = e.AddControl(new MakerSlider(category, displaySettings.Ankle_Angle, -60f, 60f, 0f, plugin) { StringToValue = CreateStringToValueFunc(10f), ValueToString = CreateValueToStringFunc(10f), }); slider_LegAngle = e.AddControl(new MakerSlider(category, displaySettings.Leg_Angle, -60f, 60f, 0f, plugin) { StringToValue = CreateStringToValueFunc(10f), ValueToString = CreateValueToStringFunc(10f) }); slider_Height = e.AddControl(new MakerSlider(category, displaySettings.Height, -0.5f, 0.5f, 0f, plugin) { StringToValue = CreateStringToValueFunc(1000f), ValueToString = CreateValueToStringFunc(1000f) }); button_HeelSave = e.AddControl(new MakerButton(displaySettings.Save_Heel_Settings, category, plugin)); button_Reload = e.AddControl(new MakerButton(displaySettings.Reload_Configurations, category, plugin)); slider_AnkleAngle.ValueChanged.Subscribe(value => MakerHeelInfoProcess(heel => heel.SafeProc(x => x.AnkleAngle = value)) ); slider_LegAngle.ValueChanged.Subscribe(value => MakerHeelInfoProcess(heel => heel.SafeProc(x => x.LegAngle = value)) ); slider_Height.ValueChanged.Subscribe(value => MakerHeelInfoProcess(heel => heel.SafeProc(x => x.Height = value)) ); button_HeelSave.OnClick.AddListener(() => MakerHeelInfoProcess(heel => StilettoContext.CustomHeelProvider.Save(heel.heelName, new CustomHeel(heel)) )); button_Reload.OnClick.AddListener(StilettoContext.ReloadConfigurations); }
private PushupSlider MakeSlider(MakerCategory category, string sliderName, RegisterSubCategoriesEvent e, float defaultValue, bool useConfigMinMax = false) { float min = 0f; float max = 1f; if (useConfigMinMax) { min = (float)ConfigSliderMin.Value / 100; max = (float)ConfigSliderMax.Value / 100; } var slider = new MakerSlider(category, sliderName, min, max, defaultValue, this); e.AddControl(slider); var pushUpSlider = new PushupSlider(); pushUpSlider.MakerSlider = slider; return(pushUpSlider); }
private static void DebugControls() { var instance = KoikatuAPI.Instance; var cat = MakerConstants.Face.All; AddControl(new MakerSeparator(cat, instance)); AddControl(new MakerSeparator(cat, instance)); AddControl(new MakerSeparator(cat, instance)); AddControl(new MakerToggle(cat, "test toggle", instance)) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); AddControl(new MakerButton("test btn", cat, instance)) .OnClick.AddListener(() => KoikatuAPI.Logger.LogMessage("Clicked")); AddControl(new MakerColor("test color", true, cat, Color.magenta, instance)) .ValueChanged.Subscribe(color => KoikatuAPI.Logger.LogMessage(color)); AddControl(new MakerDropdown("test toggle", new[] { "t0", "t1", "t2", "t3" }, cat, 1, instance)) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); AddControl(new MakerRadioButtons(cat, instance, "radio btns", "b1", "b2", "b3")) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); AddControl(new MakerSlider(cat, "test slider", 0, 1, 1, instance)) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); AddControl(new MakerText("test text test text test text test text test text test text test text test text test text test text", cat, instance)); //AddControl(new MakerTextbox(cat, "test textbox", "String test", instance)) // .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); MakerLoadToggle.AddLoadToggle(new MakerLoadToggle("Test toggle")) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); MakerLoadToggle.AddLoadToggle(new MakerLoadToggle("Test toggle 2")) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); MakerCoordinateLoadToggle.AddLoadToggle(new MakerCoordinateLoadToggle("Test toggle")) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); MakerCoordinateLoadToggle.AddLoadToggle(new MakerCoordinateLoadToggle("Test toggle 2")) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); AddSidebarControl(new SidebarToggle("Test toggle", false, instance)) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); AddSidebarControl(new SidebarToggle("Test toggle2", true, instance)) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); AddAccessoryWindowControl(new MakerToggle(cat, "test toggle", null)) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage($"Toggled to {b} in accessory slot index {AccessoriesApi.SelectedMakerAccSlot}")); AddAccessoryWindowControl(new MakerColor("test accessory color", false, cat, Color.cyan, instance)) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage($"Color to {b} in accessory slot index {AccessoriesApi.SelectedMakerAccSlot}")); var copyCat = new MakerCategory(cat.CategoryName, "Test", 0, "Test subcategory"); _categories.Add(copyCat); AddControl(new MakerSlider(copyCat, "test slider copyCat", 0, 1, 1, instance)) .ValueChanged.Subscribe(b => KoikatuAPI.Logger.LogMessage(b)); AddControl(new MakerSeparator(copyCat, instance)); for (int i = 0; i < 12; i++) { AddControl(new MakerSlider(MakerConstants.Face.FaceType, "test slider", 0, 1, 1, instance)); } var acc = new MakerSlider(MakerConstants.Face.FaceType, "test acc slider", 0, 1, 1, instance); AddAccessoryWindowControl(acc); var wrapped = new AccessoryControlWrapper <MakerSlider, float>(acc); wrapped.VisibleIndexChanged += (sender, args) => KoikatuAPI.Logger.LogMessage("VisibleIndexChanged"); wrapped.AccessoryKindChanged += (sender, args) => KoikatuAPI.Logger.LogMessage("AccessoryKindChanged"); wrapped.ValueChanged += (sender, args) => KoikatuAPI.Logger.LogMessage($"ValueChanged {wrapped.GetSelectedValue()} for acc {wrapped.CurrentlySelectedIndex}"); }