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)); } ); }