Ejemplo n.º 1
0
        // Do Work on Entering/Leaving Maker
        public void SetupMakerControls(object sender, RegisterCustomControlsEvent eventData)
        {
            CharacterAccessoryControlWrapper = MakerAPI.AddEditableAccessoryWindowControl <MakerToggle, bool>(new MakerToggle(new MakerCategory("Accessory", ""), "Character Accessory", this));
            AutoMatchHairColorWrapper        = MakerAPI.AddEditableAccessoryWindowControl <MakerToggle, bool>(new MakerToggle(new MakerCategory("Accessory", ""), "Match Hair Color on Coord Load", this));

            MakerAPI.AddAccessoryWindowControl(new MakerButton("Visibility Rules", null, this)).OnClick.AddListener(VisibilityRulesListener);
            AccessoriesApi.SelectedMakerAccSlotChanged += UpdateUI;
            AccessoriesApi.SelectedMakerAccSlotChanged += RefreshAdvancedParents;
            MakerAPI.ReloadCustomInterface             += ReloadCustomInterface;

            MakerAPI.AddAccessoryWindowControl(new MakerButton("Show", null, this)).OnClick.AddListener(ShowAccessory);
            MakerAPI.AddAccessoryWindowControl(new MakerButton("Hide", null, this)).OnClick.AddListener(HideAccessory);

            advancedParentLabel = new MakerText("Adv Parent: None", null, this);
            MakerAPI.AddAccessoryWindowControl(advancedParentLabel);
            MakerAPI.AddAccessoryWindowControl(new MakerButton("Advanced Parent", null, this)).OnClick.AddListener(AdvancedParent);

            if (ShowSlotSettingResyncButton.Value)
            {
                MakerAPI.AddAccessoryWindowControl(new MakerButton("Clear and Resync Slot", null, this)).OnClick.AddListener(ClearAndResyncSlot);
            }

            CoordinateRulesToggle = MakerAPI.AddSidebarControl(new SidebarToggle("Coordinate Visibility Rules", false, this));
            CoordinateRulesToggle.ValueChanged.Subscribe(b =>
            {
                ShowCoordinateRulesGUI(b);
            });

            MakerControlsRegistered = true;
        }
Ejemplo n.º 2
0
        private void MakerAPI_MakerBaseLoaded(object s, RegisterCustomControlsEvent e)
        {
            InitUI();

#if KK || EC
            MakerAPI.AddAccessoryWindowControl(new MakerButton("Open Material Editor", null, this)).OnClick.AddListener(delegate { PopulateListAccessory(); });
            e.AddControl(new MakerButton("Open Material Editor (Body)", MakerConstants.Face.All, this)).OnClick.AddListener(delegate { PopulateListCharacter("body"); });
            e.AddControl(new MakerButton("Open Material Editor (Face)", MakerConstants.Face.All, this)).OnClick.AddListener(delegate { PopulateListCharacter("face"); });
            e.AddControl(new MakerButton("Open Material Editor (All)", MakerConstants.Face.All, this)).OnClick.AddListener(delegate { PopulateListCharacter(); });

            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Top, this)).OnClick.AddListener(delegate { PopulateListClothes(0); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Bottom, this)).OnClick.AddListener(delegate { PopulateListClothes(1); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Bra, this)).OnClick.AddListener(delegate { PopulateListClothes(2); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Shorts, this)).OnClick.AddListener(delegate { PopulateListClothes(3); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Gloves, this)).OnClick.AddListener(delegate { PopulateListClothes(4); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Panst, this)).OnClick.AddListener(delegate { PopulateListClothes(5); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Socks, this)).OnClick.AddListener(delegate { PopulateListClothes(6); });
#if KK
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.InnerShoes, this)).OnClick.AddListener(delegate { PopulateListClothes(7); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.OuterShoes, this)).OnClick.AddListener(delegate { PopulateListClothes(8); });
#else
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Shoes, this)).OnClick.AddListener(delegate { PopulateListClothes(7); });
#endif
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Hair.Back, this)).OnClick.AddListener(delegate { PopulateListHair(0); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Hair.Front, this)).OnClick.AddListener(delegate { PopulateListHair(1); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Hair.Side, this)).OnClick.AddListener(delegate { PopulateListHair(2); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Hair.Extension, this)).OnClick.AddListener(delegate { PopulateListHair(3); });

            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Face.Eyebrow, this)).OnClick.AddListener(delegate { PopulateListCharacter("mayuge"); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Face.Eye, this)).OnClick.AddListener(delegate { PopulateListCharacter("eyeline,hitomi"); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Face.Nose, this)).OnClick.AddListener(delegate { PopulateListCharacter("nose"); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Face.Mouth, this)).OnClick.AddListener(delegate { PopulateListCharacter("tang,tooth,canine"); });
#endif
        }
        private void RegisterCustomControls(object sender, RegisterCustomControlsEvent e)
        {
            var owner = this;

            _textureChanged   = new Subject <KeyValuePair <string, Texture2D> >();
            _refreshInterface = new Subject <string>();

            var loadToggle = e.AddLoadToggle(new MakerLoadToggle("Clothes overlays"));

            loadToggle.ValueChanged.Subscribe(newValue => GetControllerRegistration().MaintainState = !newValue);

            var coordLoadToggle = e.AddCoordinateLoadToggle(new MakerCoordinateLoadToggle("Clothes overlays"));

            coordLoadToggle.ValueChanged.Subscribe(newValue => GetControllerRegistration().MaintainCoordinateState = !newValue);

            var makerCategory = MakerConstants.GetBuiltInCategory("03_ClothesTop", "tglTop");

            // Either the 3 subs will be visible or the one main. 1st separator is made by the API
            SetupTexControls(e, makerCategory, owner, KoiClothesOverlayMgr.SubClothesNames[0], "Overlay textures (Piece 1)");
            SetupTexControls(e, makerCategory, owner, KoiClothesOverlayMgr.SubClothesNames[1], "Overlay textures (Piece 2)", true);
            SetupTexControls(e, makerCategory, owner, KoiClothesOverlayMgr.SubClothesNames[2], "Overlay textures (Piece 3)", true);

            SetupTexControls(e, makerCategory, owner, KoiClothesOverlayMgr.MainClothesNames[0]);

            SetupTexControls(e, makerCategory, owner, MaskKind.BodyMask.ToString(), "Body alpha mask", true);
            SetupTexControls(e, makerCategory, owner, MaskKind.InnerMask.ToString(), "Inner clothes alpha mask", true);
            SetupTexControls(e, makerCategory, owner, MaskKind.BraMask.ToString(), "Bra alpha mask", true);

            var cats = new[]
        private void MakerAPI_MakerBaseLoaded(object s, RegisterCustomControlsEvent e)
        {
            InitUI();
#if AI
            var ButtonAllLocation = MakerConstants.Body.All;
#else
            var ButtonAllLocation = MakerConstants.Face.All;
#endif

            MakerAPI.AddAccessoryWindowControl(new MakerButton("Open Material Editor", null, this)).OnClick.AddListener(delegate { PopulateListAccessory(); });
            e.AddControl(new MakerButton("Open Material Editor (Body)", ButtonAllLocation, this)).OnClick.AddListener(delegate { PopulateListBody(); });
            e.AddControl(new MakerButton("Open Material Editor (Face)", ButtonAllLocation, this)).OnClick.AddListener(delegate { PopulateListFace(); });
            e.AddControl(new MakerButton("Open Material Editor (All)", ButtonAllLocation, this)).OnClick.AddListener(delegate { PopulateListCharacter(); });

#if !AI
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Top, this)).OnClick.AddListener(delegate { PopulateListClothes(0); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Bottom, this)).OnClick.AddListener(delegate { PopulateListClothes(1); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Bra, this)).OnClick.AddListener(delegate { PopulateListClothes(2); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Shorts, this)).OnClick.AddListener(delegate { PopulateListClothes(3); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Gloves, this)).OnClick.AddListener(delegate { PopulateListClothes(4); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Panst, this)).OnClick.AddListener(delegate { PopulateListClothes(5); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Socks, this)).OnClick.AddListener(delegate { PopulateListClothes(6); });
#if KK
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.InnerShoes, this)).OnClick.AddListener(delegate { PopulateListClothes(7); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.OuterShoes, this)).OnClick.AddListener(delegate { PopulateListClothes(8); });
#else
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Clothes.Shoes, this)).OnClick.AddListener(delegate { PopulateListClothes(7); });
#endif
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Hair.Back, this)).OnClick.AddListener(delegate { PopulateListHair(0); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Hair.Front, this)).OnClick.AddListener(delegate { PopulateListHair(1); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Hair.Side, this)).OnClick.AddListener(delegate { PopulateListHair(2); });
            e.AddControl(new MakerButton("Open Material Editor", MakerConstants.Hair.Extension, this)).OnClick.AddListener(delegate { PopulateListHair(3); });
#endif
        }
Ejemplo n.º 5
0
        private void MakerAPI_Enter(object sender, RegisterCustomControlsEvent e)
        {
            var camLight = GameObject.Find("CustomScene/CamBase/Camera/Directional Light").transform;

            lockCamlightToggle       = e.AddSidebarControl(new SidebarToggle("Lock Cameralight", false, this));
            lockCamlightToggle.Value = false;
            lockCamlightToggle.ValueChanged.Subscribe(x =>
            {
                if (camLight == null)
                {
                    return;
                }

                if (x)
                {
                    oldParent = camLight.parent.gameObject;

                    newParent = new GameObject("CamLightLock");
                    newParent.transform.position    = oldParent.transform.position;
                    newParent.transform.eulerAngles = oldParent.transform.eulerAngles;

                    camLight.parent = newParent.transform;
                }
                else if (oldParent != null)
                {
                    camLight.parent = oldParent.transform;

                    camLight.transform.localEulerAngles = new Vector3(0, 3, 0);

                    Destroy(newParent);
                    newParent = null;
                }
            });
        }
Ejemplo n.º 6
0
        private void MakerAPI_Enter(object sender, RegisterCustomControlsEvent e)
        {
            cc        = MakerAPI.GetCharacterControl();
            blinkFlag = cc.GetEyesBlinkFlag();
            //Logger.LogDebug("on enter: " + blinkFlag);

            sidebarToggle       = e.AddSidebarControl(new SidebarToggle("Disable eye blink", true, this));
            sidebarToggle.Value = blinkFlag;
            sidebarToggle.ValueChanged.Subscribe(b => BlinkToggle()); //need to fix so BlinkToggle doesn't get called when control is created
        }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 8
0
        private void MakerAPI_Enter(object sender, RegisterCustomControlsEvent e)
        {
            var cha   = Singleton <ChaControl> .Instance;
            var cbase = Singleton <CustomBase> .Instance;

            var camLight  = GameObject.Find("CharaCustom/CustomControl/CharaCamera/Main Camera/Lights Custom/Directional Light Key").transform;
            var backLight = GameObject.Find("CharaCustom/CustomControl/CharaCamera/Main Camera/Lights Custom/Directional Light Back").transform;

            lockCamlightToggle       = e.AddSidebarControl(new SidebarToggle("Lock Cameralight", false, this));
            lockCamlightToggle.Value = false;
            lockCamlightToggle.ValueChanged.Subscribe(x =>
            {
                if (camLight == null)
                {
                    return;
                }

                if (x)
                {
                    oldParent = camLight.parent.gameObject;

                    newParent = new GameObject("CamLightLock");
                    newParent.transform.position    = oldParent.transform.position;
                    newParent.transform.eulerAngles = oldParent.transform.eulerAngles;

                    camLight.parent = newParent.transform;
                }
                else if (oldParent != null)
                {
                    camLight.parent = oldParent.transform;

                    cbase.ResetLightSetting();

                    Destroy(newParent);
                    newParent = null;
                }
            });

            backlightToggle       = e.AddSidebarControl(new SidebarToggle("Toggle Backlight", true, this));
            backlightToggle.Value = true;
            backlightToggle.ValueChanged.Subscribe(b =>
            {
                backLight.gameObject.SetActive(b);
            });

            blinkingToggle       = e.AddSidebarControl(new SidebarToggle("Toggle Blinking", true, this));
            blinkingToggle.Value = true;
            blinkingToggle.ValueChanged.Subscribe(b =>
            {
                cha.ChangeEyesBlinkFlag(b);
            });
        }
        private void SetupTexControls(RegisterCustomControlsEvent e, MakerCategory makerCategory, BaseUnityPlugin owner, TexType texType, string title)
        {
            e.AddControl(new MakerText(title, makerCategory, owner));

            var bi = e.AddControl(new MakerImage(null, makerCategory, owner)
            {
                Height = 150, Width = 150
            });

            _textureChanged.Subscribe(
                d =>
            {
                if (d.Key == texType)
                {
                    bi.Texture = d.Value;
                }
            });

            e.AddControl(new MakerButton("Load new texture", makerCategory, owner))
            .OnClick.AddListener(
                () => OpenFileDialog.Show(strings => OnFileAccept(strings, texType), "Open overlay image", GetDefaultLoadDir(), FileFilter, FileExt));

            e.AddControl(new MakerButton("Clear texture", makerCategory, owner))
            .OnClick.AddListener(() => SetTexAndUpdate(null, texType));

            e.AddControl(new MakerButton("Export current texture", makerCategory, owner))
            .OnClick.AddListener(
                () =>
            {
                try
                {
                    var ctrl = GetOverlayController();
                    var tex  = ctrl.Overlays.FirstOrDefault(x => x.Key == texType).Value;
                    if (tex == null)
                    {
                        return;
                    }
                    WriteAndOpenPng(tex.Data);
                }
                catch (Exception ex)
                {
                    Logger.Log(LogLevel.Error | LogLevel.Message, "[KSOX] Failed to export texture - " + ex.Message);
                }
            });
        }
Ejemplo n.º 10
0
        private void RegisterCustomControls(RegisterCustomControlsEvent callback)
        {
            foreach (var categoryBones in InterfaceData.BoneControls.GroupBy(x => x.Category))
            {
                var category = categoryBones.Key;

                var first = true;
                foreach (var boneMeta in categoryBones)
                {
                    if (boneMeta.IsSeparator || !first)
                    {
                        callback.AddControl(new MakerSeparator(category, this)
                        {
                            TextColor = _settingColor
                        });
                    }

                    RegisterSingleControl(category, boneMeta, callback);
                    first = false;
                }

                if (ReferenceEquals(category, InterfaceData.BodyHands))
                {
                    if (!first)
                    {
                        callback.AddControl(new MakerSeparator(category, this)
                        {
                            TextColor = _settingColor
                        });
                    }

                    RegisterFingerControl(category, callback);
                }
            }

            callback.AddLoadToggle(new MakerLoadToggle("Bonemod"))
            .ValueChanged.Subscribe(b => GetRegistration().MaintainState = !b);

            callback.AddCoordinateLoadToggle(new MakerCoordinateLoadToggle("Bonemod"))
            .ValueChanged.Subscribe(b => GetRegistration().MaintainCoordinateState = !b);

            callback.AddSidebarControl(new SidebarToggle("Show advanced bonemod controls", false, this))
            .ValueChanged.Subscribe(b => gameObject.GetComponent <KKABMX_AdvancedGUI>().enabled = b);
        }
Ejemplo n.º 11
0
        private IEnumerator LoadPlugin(RegisterCustomControlsEvent e)
        {
            var sw = Stopwatch.StartNew();

            try
            {
                _boneSliderLookup = new Dictionary <Slider, Func <IEnumerable <Transform> > >();

                LoadShaders();

                LoadHighlightBody(MakerAPI.GetCharacterControl());

                _hi = Harmony.CreateAndPatchAll(typeof(Hooks));

                InitializeBodySliders();
                InitializeFaceSliders();

                // todo waste of space on sidebar?
                // var toggle = e.AddSidebarControl(new SidebarToggle("Highlight on hover", _enabled.Value, this));
                // toggle.ValueChanged.Subscribe(b => _enabled.Value = b);
                // _enabled.SettingChanged += (sender, args) =>
                // {
                //     if (!toggle.IsDisposed) toggle.Value = _enabled.Value;
                // };
            }
            catch (Exception)
            {
                Dispose();
                throw;
            }
            sw.Stop();

            // Need to wait for ABMX sliders to get instantiated
            yield return(new WaitUntil(() => MakerAPI.InsideAndLoaded));

            sw.Start();
            InitializeAbmxSliders();

            ScreenshotManager.OnPreCapture  += OnScreenshotPreCapture;
            ScreenshotManager.OnPostCapture += OnScreenshotPostCapture;

            Logger.LogDebug($"Initialized in {sw.ElapsedMilliseconds}ms");
        }
        private void RegisterCustomControls(object sender, RegisterCustomControlsEvent e)
        {
            var owner = this;

            _textureChanged   = new Subject <KeyValuePair <string, ClothesTexData> >();
            _refreshInterface = new Subject <int>();

            var loadToggle = e.AddLoadToggle(new MakerLoadToggle("Clothes overlays"));

            loadToggle.ValueChanged.Subscribe(newValue => GetControllerRegistration().MaintainState = !newValue);

            var coordLoadToggle = e.AddCoordinateLoadToggle(new MakerCoordinateLoadToggle("Clothes overlays"));

            coordLoadToggle.ValueChanged.Subscribe(newValue => GetControllerRegistration().MaintainCoordinateState = !newValue);

            var makerCategory = MakerConstants.GetBuiltInCategory("03_ClothesTop", "tglTop");

            SetupTexControls(e, makerCategory, owner, KoiClothesOverlayMgr.SubClothesNames[0], 0, "Overlay textures (Piece 1)");
            SetupTexControls(e, makerCategory, owner, KoiClothesOverlayMgr.SubClothesNames[1], 0, "Overlay textures (Piece 2)", true);
            SetupTexControls(e, makerCategory, owner, KoiClothesOverlayMgr.SubClothesNames[2], 0, "Overlay textures (Piece 3)", true);

            SetupTexControls(e, makerCategory, owner, KoiClothesOverlayMgr.MainClothesNames[0], 0);

            var cats = new[]
            {
                new KeyValuePair <string, string>("tglBot", "ct_clothesBot"),
                new KeyValuePair <string, string>("tglBra", "ct_bra"),
                new KeyValuePair <string, string>("tglShorts", "ct_shorts"),
                new KeyValuePair <string, string>("tglGloves", "ct_gloves"),
                new KeyValuePair <string, string>("tglPanst", "ct_panst"),
                new KeyValuePair <string, string>("tglSocks", "ct_socks"),
                new KeyValuePair <string, string>("tglInnerShoes", "ct_shoes_inner"),
                new KeyValuePair <string, string>("tglOuterShoes", "ct_shoes_outer")
            };

            for (var index = 0; index < cats.Length; index++)
            {
                var pair = cats[index];
                SetupTexControls(e, MakerConstants.GetBuiltInCategory("03_ClothesTop", pair.Key), owner, pair.Value, index + 1);
            }

            GetOverlayController().CurrentCoordinate.Subscribe(type => RefreshInterface(-1));
        }
Ejemplo n.º 13
0
        private void OnEarlyMakerFinishedLoading(object sender, RegisterCustomControlsEvent e)
        {
            _boneController = FindObjectOfType <BoneController>();
            if (_boneController == null)
            {
                Logger.Log(LogLevel.Error, "[KKABMX_GUI] Failed to find a BoneController or there are no bone modifiers");
                return;
            }

            _boneController.NewDataLoaded += (s, args) =>
            {
                foreach (var action in _updateActionList)
                {
                    action();
                }
            };

            gameObject.AddComponent <KKABMX_AdvancedGUI>().enabled = false;

            RegisterCustomControls(e);
        }
Ejemplo n.º 14
0
        private static void RegisterMakerControls(BaseUnityPlugin skinEffectsPlugin, RegisterCustomControlsEvent e)
        {
            // Doesn't apply to male characters
            if (MakerAPI.GetMakerSex() == 0)
            {
                return;
            }

            var cat = MakerConstants.GetBuiltInCategory("05_ParameterTop", "tglH");

            e.AddControl(new MakerToggle(cat, "Stretched hymen", false, skinEffectsPlugin))
            .BindToFunctionController <SkinEffectsController, bool>(controller => controller.StretchedHymen, (controller, value) => controller.StretchedHymen = value);
            e.AddControl(new MakerText("Makes it much less likely that she will bleed during the first time.", cat, skinEffectsPlugin)).TextColor             = new Color(0.7f, 0.7f, 0.7f);

            e.AddControl(new MakerToggle(cat, "Hymen regenerates", false, skinEffectsPlugin))
            .BindToFunctionController <SkinEffectsController, bool>(controller => controller.HymenRegen, (controller, value) => controller.HymenRegen   = value);
            e.AddControl(new MakerText("The hymen grows back after a good night's sleep (to the state before sex).", cat, skinEffectsPlugin)).TextColor = new Color(0.7f, 0.7f, 0.7f);

            e.AddControl(new MakerToggle(cat, "Fragile v****a", false, skinEffectsPlugin))
            .BindToFunctionController <SkinEffectsController, bool>(controller => controller.FragileVag, (controller, value) => controller.FragileVag = value);
            e.AddControl(new MakerText("When going at it very roughly has a chance to bleed, be gentle!", cat, skinEffectsPlugin)).TextColor          = new Color(0.7f, 0.7f, 0.7f);
        }
Ejemplo n.º 15
0
        private static void MakerAPI_MakerBaseLoaded(object sender, RegisterCustomControlsEvent e)
        {
            // Replace the stock skin type selection window with a dropdown
            // This is because the dropdown icons are all NSFW
            // This part creates the new control
            var chaListCtrl  = Singleton <Character> .Instance.chaListCtrl;
            var categoryInfo = chaListCtrl.GetCategoryInfo(ChaListDefine.CategoryNo.mt_body_detail);
            var headValues   = categoryInfo.Values.ToList();

            _skinTypeReplacementControl     = e.AddControl(new MakerDropdown("Skin type", headValues.Select(x => x.Name).ToArray(), MakerConstants.Body.All, 0, null));
            MakerAPI.ReloadCustomInterface += (o, args) => _skinTypeReplacementControl.Value = headValues.FindIndex(i => i.Id == MakerAPI.GetCharacterControl().chaFile.custom.body.detailId);
            _skinTypeReplacementControl.ValueChanged.Subscribe(x =>
            {
                var newId      = headValues[x].Id;
                var chaControl = MakerAPI.GetCharacterControl();
                var body       = chaControl.chaFile.custom.body;
                if (body.detailId != newId)
                {
                    body.detailId = newId;
                    chaControl.ChangeSettingBodyDetail();
                }
            });
        }
Ejemplo n.º 16
0
 private void MakerAPI_Enter(object sender, RegisterCustomControlsEvent e)
 {
     GameObject.Find("CanvasSub/SettingWindow/WinBody/B_ShapeBreast/Scroll View/Viewport/Content/SliderSet/Slider").GetComponent <Slider>().maxValue = 0.5f;
 }
Ejemplo n.º 17
0
 private static void MakerStartedLoading(object sender, RegisterCustomControlsEvent e)
 {
     CardNameTranslationManager.ClearCaches();
 }
Ejemplo n.º 18
0
        private void RegisterFingerControl(MakerCategory category, RegisterCustomControlsEvent callback)
        {
            var rbSide = callback.AddControl(new MakerRadioButtons(category, this, "Hand to edit", "Both", "Left", "Right")
            {
                TextColor = _settingColor
            });
            var rbFing = callback.AddControl(new MakerRadioButtons(category, this, "Finger to edit", "All", "1", "2", "3", "4", "5")
            {
                TextColor = _settingColor
            });
            var rbSegm = callback.AddControl(new MakerRadioButtons(category, this, "Segment to edit", "Base", "Center", "Tip")
            {
                TextColor = _settingColor
            });

            IEnumerable <string> GetFingerBoneNames()
            {
                var fingers   = rbFing.Value == 0 ? InterfaceData.FingerNamePrefixes : new[] { InterfaceData.FingerNamePrefixes[rbFing.Value - 1] };
                var segmented = fingers.Select(fName => $"{fName}0{rbSegm.Value + 1}").ToList();
                var sided     = Enumerable.Empty <string>();

                if (rbSide.Value <= 1)
                {
                    sided = segmented.Select(s => s + "_L");
                }
                if (rbSide.Value == 0 || rbSide.Value == 2)
                {
                    sided = sided.Concat(segmented.Select(s => s + "_R"));
                }
                return(sided);
            }

            var maxFingerValue = RaiseLimits.Value ? 3 * LimitRaiseAmount : 3;
            var x = callback.AddControl(new MakerSlider(category, "Scale X", 0, maxFingerValue, 1, this)
            {
                TextColor = _settingColor
            });
            var y = callback.AddControl(new MakerSlider(category, "Scale Y", 0, maxFingerValue, 1, this)
            {
                TextColor = _settingColor
            });
            var z = callback.AddControl(new MakerSlider(category, "Scale Z", 0, maxFingerValue, 1, this)
            {
                TextColor = _settingColor
            });

            void UpdateDisplay(int _)
            {
                var boneMod = _boneController.GetModifier(GetFingerBoneNames().First());
                var mod     = boneMod?.GetModifier(_boneController.CurrentCoordinate.Value);

                SetSliders(mod?.ScaleModifier ?? Vector3.one);
            }

            var isUpdatingValue = false;

            void SetSliders(Vector3 mod)
            {
                isUpdatingValue = true;
                if (x != null)
                {
                    x.Value = mod.x;
                }
                if (y != null)
                {
                    y.Value = mod.y;
                }
                if (z != null)
                {
                    z.Value = mod.z;
                }
                isUpdatingValue = false;
            }

            void PushValueToControls()
            {
                UpdateDisplay(0);
            }

            _updateActionList.Add(PushValueToControls);
            PushValueToControls();

            rbSide.ValueChanged.Subscribe(UpdateDisplay);
            rbFing.ValueChanged.Subscribe(UpdateDisplay);
            rbSegm.ValueChanged.Subscribe(UpdateDisplay);

            void PullValuesToBone(float _)
            {
                if (isUpdatingValue)
                {
                    return;
                }

                foreach (var boneName in GetFingerBoneNames())
                {
                    var bone     = _boneController.GetModifier(boneName);
                    var newValue = new Vector3(x.Value, y.Value, z.Value);
                    if (bone == null)
                    {
                        if (newValue == Vector3.one)
                        {
                            return;
                        }

                        bone = new BoneModifier(boneName);
                        _boneController.AddModifier(bone);
                    }

                    var mod = bone.GetModifier(_boneController.CurrentCoordinate.Value);
                    mod.ScaleModifier = newValue;
                }
            }

            var obs = Observer.Create <float>(PullValuesToBone);

            x?.ValueChanged.Subscribe(obs);
            y?.ValueChanged.Subscribe(obs);
            z?.ValueChanged.Subscribe(obs);
        }
Ejemplo n.º 19
0
 private static void MakerStartupTimerStart(object sender, RegisterCustomControlsEvent e)
 {
     _makerStartupStart             = Time.realtimeSinceStartup;
     MakerAPI.MakerFinishedLoading += MakerStartupTimer;
 }
        private void SetupTexControls(RegisterCustomControlsEvent e, MakerCategory makerCategory, BaseUnityPlugin owner, TexType texType, string title)
        {
            var radButtons = texType == TexType.EyeOver || texType == TexType.EyeUnder ?
                             e.AddControl(new MakerRadioButtons(makerCategory, owner, "Eye to edit", "Both", "Left", "Right")) :
                             null;

            TexType GetTexType(bool cantBeBoth)
            {
                if (radButtons != null)
                {
                    if (radButtons.Value == 0)
                    {
                        return(cantBeBoth ? texType + 2 : texType); // left or both
                    }
                    if (radButtons.Value == 1)
                    {
                        return(texType + 2); // left
                    }
                    if (radButtons.Value == 2)
                    {
                        return(texType + 4); // right
                    }
                }
                return(texType);
            }

            e.AddControl(new MakerText(title, makerCategory, owner));

            var forceAllowBoth = false;
            var bi             = e.AddControl(new MakerImage(null, makerCategory, owner)
            {
                Height = 150, Width = 150
            });

            _textureChanged.Subscribe(
                d =>
            {
                var incomingType = d.Key;
                if (!forceAllowBoth)
                {
                    // If left and right images are different, and we have Both selected, change selection to Left instead
                    var currentType = GetTexType(false);
                    if (radButtons != null && (currentType == TexType.EyeOver && incomingType == TexType.EyeOverR || currentType == TexType.EyeUnder && incomingType == TexType.EyeUnderR))
                    {
                        var leftTex = GetTex(GetTexType(true));
                        if (d.Value != leftTex)
                        {
                            radButtons.Value = 1;
                        }
                        else
                        {
                            radButtons.Value = 0;
                        }
                    }
                }

                if (incomingType == GetTexType(true) || incomingType == GetTexType(false))
                {
                    bi.Texture = d.Value;
                }
            });

            e.AddControl(new MakerButton("Load new texture", makerCategory, owner))
            .OnClick.AddListener(
                () => OpenFileDialog.Show(strings => OnFileAccept(strings, GetTexType(false)), "Open overlay image", GetDefaultLoadDir(), FileFilter, FileExt));

            e.AddControl(new MakerButton("Clear texture", makerCategory, owner))
            .OnClick.AddListener(() => SetTexAndUpdate(null, GetTexType(false)));

            e.AddControl(new MakerButton("Export current texture", makerCategory, owner))
            .OnClick.AddListener(
                () =>
            {
                try
                {
                    var tex = GetTex(GetTexType(true));
                    if (tex == null)
                    {
                        return;
                    }
                    WriteAndOpenPng(tex.EncodeToPNG(), GetTexType(false).ToString());
                }
                catch (Exception ex)
                {
                    Logger.LogMessage("Failed to export texture - " + ex.Message);
                }
            });

            radButtons?.ValueChanged.Subscribe(i =>
            {
                forceAllowBoth = true;
                var safeType   = GetTexType(true);
                _textureChanged.OnNext(new KeyValuePair <TexType, Texture2D>(safeType, GetTex(safeType)));
                forceAllowBoth = false;
            });

            Texture2D GetTex(TexType type)
            {
                var ctrl           = GetOverlayController();
                var overlayTexture = ctrl.OverlayStorage.GetTexture(type);

                return(overlayTexture);
            }
        }
Ejemplo n.º 21
0
 private static void MakerStartedLoading(object sender, RegisterCustomControlsEvent e)
 {
     TranslationHelper.NotifyBehaviorChanged(e);
 }
Ejemplo n.º 22
0
        private void RegisterSingleControl(MakerCategory category, BoneMeta boneMeta, RegisterCustomControlsEvent callback)
        {
            MakerRadioButtons rb = null;

            if (!string.IsNullOrEmpty(boneMeta.RightBoneName))
            {
                rb = callback.AddControl(new MakerRadioButtons(category, this, "Side to edit", "Both", "Left", "Right")
                {
                    TextColor = _settingColor
                });
            }

            var max  = RaiseLimits.Value ? boneMeta.Max * LimitRaiseAmount : boneMeta.Max;
            var lMax = RaiseLimits.Value ? boneMeta.LMax * LimitRaiseAmount : boneMeta.LMax;
            var x    = boneMeta.X ? callback.AddControl(new MakerSlider(category, boneMeta.XDisplayName, boneMeta.Min, max, 1, this)
            {
                TextColor = _settingColor
            }) : null;
            var y = boneMeta.Y ? callback.AddControl(new MakerSlider(category, boneMeta.YDisplayName, boneMeta.Min, max, 1, this)
            {
                TextColor = _settingColor
            }) : null;
            var z = boneMeta.Z ? callback.AddControl(new MakerSlider(category, boneMeta.ZDisplayName, boneMeta.Min, max, 1, this)
            {
                TextColor = _settingColor
            }) : null;
            var l = boneMeta.L ? callback.AddControl(new MakerSlider(category, boneMeta.LDisplayName, boneMeta.LMin, lMax, 1, this)
            {
                TextColor = _settingColor
            }) : null;

            var isUpdatingValue = false;

            void SetSliders(Vector3 mod, float lenMod)
            {
                isUpdatingValue = true;
                if (x != null)
                {
                    x.Value = mod.x;
                }
                if (y != null)
                {
                    y.Value = mod.y;
                }
                if (z != null)
                {
                    z.Value = mod.z;
                }
                if (l != null)
                {
                    l.Value = lenMod;
                }
                isUpdatingValue = false;
            }

            void PushValueToControls()
            {
                var bone = GetBoneModifier(boneMeta.BoneName, boneMeta.UniquePerCoordinate);

                if (bone == null)
                {
                    SetSliders(Vector3.one, 1f);
                    return;
                }

                if (rb != null)
                {
                    var bone2 = GetBoneModifier(boneMeta.RightBoneName, boneMeta.UniquePerCoordinate);
                    if (bone.ScaleModifier != bone2.ScaleModifier)
                    {
                        if (rb.Value == 0)
                        {
                            rb.Value = 1;
                        }
                        else if (rb.Value == 2)
                        {
                            bone = bone2;
                        }
                    }
                    else
                    {
                        rb.Value = 0;
                    }
                }

                SetSliders(bone.ScaleModifier, bone.LengthModifier);
            }

            _updateActionList.Add(PushValueToControls);
            PushValueToControls();

            rb?.ValueChanged.Subscribe(
                i =>
            {
                if (i == 1)
                {
                    var modifierData = GetBoneModifier(boneMeta.BoneName, boneMeta.UniquePerCoordinate);
                    if (modifierData != null)
                    {
                        SetSliders(modifierData.ScaleModifier, modifierData.LengthModifier);
                    }
                }
                else if (i == 2)
                {
                    var modifierData = GetBoneModifier(boneMeta.RightBoneName, boneMeta.UniquePerCoordinate);
                    if (modifierData != null)
                    {
                        SetSliders(modifierData.ScaleModifier, modifierData.LengthModifier);
                    }
                }
            });

            void PullValuesToBone(float _)
            {
                if (isUpdatingValue)
                {
                    return;
                }

                var bone      = GetBoneModifier(boneMeta.BoneName, boneMeta.UniquePerCoordinate);
                var prevValue = bone?.ScaleModifier ?? Vector3.one;
                var newValue  = new Vector3(x?.Value ?? prevValue.x, y?.Value ?? prevValue.y, z?.Value ?? prevValue.y);

                if (bone == null)
                {
                    var hasLen = l != null && Math.Abs(l.Value - 1f) > 0.001;
                    if (newValue == Vector3.one && !hasLen)
                    {
                        return;
                    }

                    _boneController.AddModifier(new BoneModifier(boneMeta.BoneName));
                    bone = GetBoneModifier(boneMeta.BoneName, boneMeta.UniquePerCoordinate);
                }

                if (rb != null)
                {
                    if (rb.Value != 1)
                    {
                        var bone2 = GetBoneModifier(boneMeta.RightBoneName, boneMeta.UniquePerCoordinate);
                        if (bone2 == null)
                        {
                            _boneController.AddModifier(new BoneModifier(boneMeta.RightBoneName));
                            bone2 = GetBoneModifier(boneMeta.RightBoneName, boneMeta.UniquePerCoordinate);
                        }

                        if (rb.Value == 0)
                        {
                            bone2.ScaleModifier = newValue;
                            if (l != null)
                            {
                                bone2.LengthModifier = l.Value;
                            }
                        }
                        else if (rb.Value == 2)
                        {
                            bone2.ScaleModifier = newValue;
                            if (l != null)
                            {
                                bone2.LengthModifier = l.Value;
                            }
                            return;
                        }
                    }
                }

                bone.ScaleModifier = newValue;
                if (l != null)
                {
                    bone.LengthModifier = l.Value;
                }
            }

            var obs = Observer.Create <float>(PullValuesToBone);

            x?.ValueChanged.Subscribe(obs);
            y?.ValueChanged.Subscribe(obs);
            z?.ValueChanged.Subscribe(obs);
            l?.ValueChanged.Subscribe(obs);
        }
Ejemplo n.º 23
0
 private static void MakerStartedLoading(object sender, RegisterCustomControlsEvent e)
 {
     ChaFileControlPaths.Clear();
 }
Ejemplo n.º 24
0
 private void MakerAPI_MakerBaseLoaded(object s, RegisterCustomControlsEvent e)
 {
     UI.InitUI();
 }
Ejemplo n.º 25
0
        private void MakerAPI_MakerBaseLoaded(object s, RegisterCustomControlsEvent e)
        {
            InitUI();

#if KK || EC
            var window = MakerAPI.AddAccessoryWindowControl(new MakerButton("Material Editor", null, this));
            window.GroupingID = "Buttons";
            window.OnClick.AddListener(UpdateUIAccessory);
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Body.All, this)).OnClick.AddListener(() => UpdateUICharacter("body"));
            e.AddControl(new MakerButton("Material Editor (Body)", MakerConstants.Face.All, this)).OnClick.AddListener(() => UpdateUICharacter("body"));
            e.AddControl(new MakerButton("Material Editor (Face)", MakerConstants.Face.All, this)).OnClick.AddListener(() => UpdateUICharacter("face"));
            e.AddControl(new MakerButton("Material Editor (All)", MakerConstants.Face.All, this)).OnClick.AddListener(() => UpdateUICharacter());

            e.AddControl(new MakerButton("Material Editor", MakerConstants.Clothes.Top, this)).OnClick.AddListener(() => UpdateUIClothes(0));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Clothes.Bottom, this)).OnClick.AddListener(() => UpdateUIClothes(1));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Clothes.Bra, this)).OnClick.AddListener(() => UpdateUIClothes(2));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Clothes.Shorts, this)).OnClick.AddListener(() => UpdateUIClothes(3));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Clothes.Gloves, this)).OnClick.AddListener(() => UpdateUIClothes(4));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Clothes.Panst, this)).OnClick.AddListener(() => UpdateUIClothes(5));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Clothes.Socks, this)).OnClick.AddListener(() => UpdateUIClothes(6));
#if KK
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Clothes.InnerShoes, this)).OnClick.AddListener(() => UpdateUIClothes(7));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Clothes.OuterShoes, this)).OnClick.AddListener(() => UpdateUIClothes(8));
#else
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Clothes.Shoes, this)).OnClick.AddListener(() => UpdateUIClothes(7));
#endif
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Hair.Back, this)).OnClick.AddListener(() => UpdateUIHair(0));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Hair.Front, this)).OnClick.AddListener(() => UpdateUIHair(1));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Hair.Side, this)).OnClick.AddListener(() => UpdateUIHair(2));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Hair.Extension, this)).OnClick.AddListener(() => UpdateUIHair(3));

            e.AddControl(new MakerButton("Material Editor", MakerConstants.Face.Eyebrow, this)).OnClick.AddListener(() => UpdateUICharacter("mayuge"));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Face.Eye, this)).OnClick.AddListener(() => UpdateUICharacter("eyeline,hitomi"));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Face.Nose, this)).OnClick.AddListener(() => UpdateUICharacter("nose"));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Face.Mouth, this)).OnClick.AddListener(() => UpdateUICharacter("tang,tooth,canine"));
#endif

#if PH
            MakerAPI.AddAccessoryWindowControl(new MakerButton("Material Editor", null, this)).OnClick.AddListener(UpdateUIAccessory);
            e.AddControl(new MakerButton("Material Editor (Body)", MakerConstants.Body.General, this)).OnClick.AddListener(() => UpdateUICharacter("body"));
            e.AddControl(new MakerButton("Material Editor (All)", MakerConstants.Body.General, this)).OnClick.AddListener(() => UpdateUICharacter());
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Body.Nail, this)).OnClick.AddListener(() => UpdateUICharacter("nail"));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Body.Lower, this)).OnClick.AddListener(() => UpdateUICharacter("mnpk"));

            e.AddControl(new MakerButton("Material Editor (Face)", MakerConstants.Face.General, this)).OnClick.AddListener(() => UpdateUICharacter("head,face"));
            e.AddControl(new MakerButton("Material Editor (All)", MakerConstants.Face.General, this)).OnClick.AddListener(() => UpdateUICharacter());
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Face.Eye, this)).OnClick.AddListener(() => UpdateUICharacter("eye"));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Face.Eyebrow, this)).OnClick.AddListener(() => UpdateUICharacter("mayuge"));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Face.Eyelash, this)).OnClick.AddListener(() => UpdateUICharacter("matuge"));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Face.Mouth, this)).OnClick.AddListener(() => UpdateUICharacter("ha,sita"));

            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.Tops, this)).OnClick.AddListener(() => UpdateUIClothes(0));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.Bottoms, this)).OnClick.AddListener(() => UpdateUIClothes(1));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.Bra, this)).OnClick.AddListener(() => UpdateUIClothes(2));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.Shorts, this)).OnClick.AddListener(() => UpdateUIClothes(3));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.SwimWear, this)).OnClick.AddListener(() => UpdateUIClothes(4));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.SwimTops, this)).OnClick.AddListener(() => UpdateUIClothes(5));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.SwimWear, this)).OnClick.AddListener(() => UpdateUIClothes(6));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.Glove, this)).OnClick.AddListener(() => UpdateUIClothes(7));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.Panst, this)).OnClick.AddListener(() => UpdateUIClothes(8));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.Socks, this)).OnClick.AddListener(() => UpdateUIClothes(9));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Wear.Shoes, this)).OnClick.AddListener(() => UpdateUIClothes(10));

            e.AddControl(new MakerButton("Material Editor", MakerConstants.Hair.Back, this)).OnClick.AddListener(() => UpdateUIHair(0));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Hair.Front, this)).OnClick.AddListener(() => UpdateUIHair(1));
            e.AddControl(new MakerButton("Material Editor", MakerConstants.Hair.Side, this)).OnClick.AddListener(() => UpdateUIHair(2));
#endif
            currentHairIndex    = 0;
            currentClothesIndex = 0;
        }
        private void MakerAPI_MakerBaseLoaded(object s, RegisterCustomControlsEvent e)
        {
            var controller = GetController(MakerAPI.GetCharacterControl());

            ColorMatchToggle     = new AccessoryControlWrapper <MakerToggle, bool>(MakerAPI.AddAccessoryWindowControl(new MakerToggle(null, "Match Color With Hair", ColorMatchDefault, this)));
            HairGlossToggle      = new AccessoryControlWrapper <MakerToggle, bool>(MakerAPI.AddAccessoryWindowControl(new MakerToggle(null, "Use Hair Gloss", ColorMatchDefault, this)));
            OutlineColorPicker   = new AccessoryControlWrapper <MakerColor, Color>(MakerAPI.AddAccessoryWindowControl(new MakerColor("Outline Color", false, null, OutlineColorDefault, this)));
            AccessoryColorPicker = new AccessoryControlWrapper <MakerColor, Color>(MakerAPI.AddAccessoryWindowControl(new MakerColor("Accessory Color", false, null, OutlineColorDefault, this)));
            HairLengthSlider     = new AccessoryControlWrapper <MakerSlider, float>(MakerAPI.AddAccessoryWindowControl(new MakerSlider(null, "Length", 0, 1, HairLengthDefault, this)));

            //Color Match
            ColorMatchToggle.Control.Visible.OnNext(false);
            ColorMatchToggle.ValueChanged += ColorMatchToggle_ValueChanged;
            void ColorMatchToggle_ValueChanged(object sender, AccessoryWindowControlValueChangedEventArgs <bool> eventArgs)
            {
                controller.SetColorMatch(eventArgs.NewValue, eventArgs.SlotIndex);
                OutlineColorPicker.Control.Visible.OnNext(!eventArgs.NewValue);

                if (eventArgs.NewValue)
                {
                    HideAccColors();
                }
                else
                {
                    ShowAccColors(true);
                }

                controller.UpdateAccessory(eventArgs.SlotIndex);
            }

            //Hair Gloss
            HairGlossToggle.Control.Visible.OnNext(false);
            HairGlossToggle.ValueChanged += HairGlossToggle_ValueChanged;
            void HairGlossToggle_ValueChanged(object sender, AccessoryWindowControlValueChangedEventArgs <bool> eventArgs)
            {
                controller.SetHairGloss(eventArgs.NewValue, eventArgs.SlotIndex);
                controller.UpdateAccessory(eventArgs.SlotIndex);
            }

            //Outline Color
            OutlineColorPicker.Control.ColorBoxWidth = 230;
            OutlineColorPicker.Control.Visible.OnNext(false);
            OutlineColorPicker.ValueChanged += OutlineColorPicker_ValueChanged;
            void OutlineColorPicker_ValueChanged(object sender, AccessoryWindowControlValueChangedEventArgs <Color> eventArgs)
            {
                controller.SetOutlineColor(eventArgs.NewValue, eventArgs.SlotIndex);
                controller.UpdateAccessory(eventArgs.SlotIndex);
            }

            //AccessoryColor
            AccessoryColorPicker.Control.ColorBoxWidth = 230;
            AccessoryColorPicker.Control.Visible.OnNext(false);
            AccessoryColorPicker.ValueChanged += AccessoryColorPicker_ValueChanged;
            void AccessoryColorPicker_ValueChanged(object sender, AccessoryWindowControlValueChangedEventArgs <Color> eventArgs)
            {
                controller.SetAccessoryColor(eventArgs.NewValue, eventArgs.SlotIndex);
                controller.UpdateAccessory(eventArgs.SlotIndex);
            }

            //HairLength
            HairLengthSlider.Control.Visible.OnNext(false);
            HairLengthSlider.ValueChanged += HairLengthSlider_ValueChanged;
            void HairLengthSlider_ValueChanged(object sender, AccessoryWindowControlValueChangedEventArgs <float> eventArgs)
            {
                controller.SetHairLength(eventArgs.NewValue, eventArgs.SlotIndex);
                controller.UpdateAccessory(eventArgs.SlotIndex);
            }
        }
        private void SetupTexControls(RegisterCustomControlsEvent e, MakerCategory makerCategory, BaseUnityPlugin owner, string clothesId, string title = "Overlay textures", bool addSeparator = false)
        {
            var texType = "overlay texture";

            var controlSeparator = addSeparator ? e.AddControl(new MakerSeparator(makerCategory, owner)) : null;

            var controlTitle = e.AddControl(new MakerText(title, makerCategory, owner));

            var controlGen = e.AddControl(new MakerButton("Dump original texture", makerCategory, owner));

            controlGen.OnClick.AddListener(() => GetOverlayController().DumpBaseTexture(clothesId, KoiSkinOverlayGui.WriteAndOpenPng));

            var controlImage = e.AddControl(new MakerImage(null, makerCategory, owner)
            {
                Height = 150, Width = 150
            });

            var controlOverride = e.AddControl(new MakerToggle(makerCategory, "Hide base texture", owner));

            controlOverride.ValueChanged.Subscribe(
                b =>
            {
                var c = GetOverlayController();
                if (c != null)
                {
                    var tex = c.GetOverlayTex(clothesId, true);
                    if (tex.Override != b)
                    {
                        tex.Override = b;
                        c.RefreshTexture(clothesId);
                    }
                }
            });

            var controlLoad = e.AddControl(new MakerButton("Load new " + texType, makerCategory, owner));

            controlLoad.OnClick.AddListener(
                () => OpenFileDialog.Show(
                    strings => OnFileAccept(strings, clothesId),
                    "Open overlay image",
                    KoiSkinOverlayGui.GetDefaultLoadDir(),
                    KoiSkinOverlayGui.FileFilter,
                    KoiSkinOverlayGui.FileExt));

            var controlClear = e.AddControl(new MakerButton("Clear " + texType, makerCategory, owner));

            controlClear.OnClick.AddListener(() => SetTexAndUpdate(null, clothesId));

            var controlExport = e.AddControl(new MakerButton("Export " + texType, makerCategory, owner));

            controlExport.OnClick.AddListener(
                () =>
            {
                try
                {
                    var tex = GetOverlayController().GetOverlayTex(clothesId, false)?.TextureBytes;
                    if (tex == null)
                    {
                        Logger.LogMessage("Nothing to export");
                        return;
                    }

                    KoiSkinOverlayGui.WriteAndOpenPng(tex);
                }
                catch (Exception ex)
                {
                    Logger.LogMessage("Failed to export texture - " + ex.Message);
                }
            });

            // Refresh logic -----------------------

            _textureChanged.Subscribe(
                d =>
            {
                if (Equals(clothesId, d.Key))
                {
                    controlImage.Texture = d.Value;
                    if (controlOverride != null)
                    {
                        controlOverride.Value = GetOverlayController().GetOverlayTex(d.Key, false)?.Override ?? false;
                    }
                }
            });

            _refreshInterface.Subscribe(
                cat =>
            {
                if (cat != null && cat != clothesId)
                {
                    return;
                }
                if (!controlImage.Exists)
                {
                    return;
                }

                var ctrl = GetOverlayController();

                var renderer = ctrl?.GetApplicableRenderers(clothesId)?.FirstOrDefault();
                var visible  = renderer?.material?.mainTexture != null;

                controlTitle.Visible.OnNext(visible);
                controlGen.Visible.OnNext(visible);
                controlImage.Visible.OnNext(visible);
                controlOverride?.Visible.OnNext(visible);
                controlLoad.Visible.OnNext(visible);
                controlClear.Visible.OnNext(visible);
                controlExport.Visible.OnNext(visible);
                controlSeparator?.Visible.OnNext(visible);

                _textureChanged.OnNext(new KeyValuePair <string, Texture2D>(clothesId, ctrl?.GetOverlayTex(clothesId, false)?.Texture));
            }
                );
        }
Ejemplo n.º 28
0
        private void MakerStartupTimerStart(object sender, RegisterCustomControlsEvent e)
        {
            var startTime = Time.realtimeSinceStartup;

            MakerAPI.MakerFinishedLoading += MakerAPI_MakerFinishedLoading;
        }