Пример #1
0
        protected override void Start()
        {
            KoiSkinOverlayGui = Extension.Extension.TryGetPluginInstance("KSOX_GUI") as KoiSkinOverlayGui;
            CurrentCoordinate.Subscribe(onNext: delegate { ChangeCoordinate(); });

            base.Start();
        }
        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));
            }
                );
        }