123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine;
- using static MeidoPhotoStudio.Plugin.MenuFileUtility;
- namespace MeidoPhotoStudio.Plugin;
- public class ModPropsPane : BasePane
- {
- private readonly PropManager propManager;
- private readonly Dropdown propCategoryDropdown;
- private readonly Toggle modFilterToggle;
- private readonly Toggle baseFilterToggle;
- private readonly bool isModsOnly = PropManager.ModItemsOnly;
- private Vector2 propListScrollPos;
- private List<ModItem> modPropList;
- private string currentCategory;
- private bool modItemsReady;
- private bool shouldDraw;
- private int categoryIndex;
- private bool modFilter;
- private bool baseFilter;
- private int currentListCount;
- public ModPropsPane(PropManager propManager)
- {
- this.propManager = propManager;
- modItemsReady = MenuFilesReady || PropManager.ModItemsOnly;
- var listItems = Translation.GetArray("clothing", MenuCategories);
- if (!modItemsReady)
- {
- listItems[0] = Translation.Get("systemMessage", "initializing");
- MenuFilesReadyChange += (_, _) =>
- {
- modItemsReady = true;
- propCategoryDropdown.SetDropdownItems(Translation.GetArray("clothing", MenuCategories));
- };
- }
- propCategoryDropdown = new(listItems);
- propCategoryDropdown.SelectionChange += (_, _) =>
- {
- if (!modItemsReady)
- return;
- ChangePropCategory();
- };
- if (isModsOnly)
- return;
- modFilterToggle = new(Translation.Get("background2Window", "modsToggle"));
- modFilterToggle.ControlEvent += (_, _) =>
- ChangeFilter(FilterType.Mod);
- baseFilterToggle = new(Translation.Get("background2Window", "baseToggle"));
- baseFilterToggle.ControlEvent += (_, _) =>
- ChangeFilter(FilterType.Base);
- }
- private enum FilterType
- {
- None,
- Mod,
- Base,
- }
- private string SelectedCategory =>
- MenuCategories[propCategoryDropdown.SelectedItemIndex];
- public override void Draw()
- {
- const float dropdownButtonHeight = 30f;
- var dropdownButtonWidth = isModsOnly ? 120f : 90f;
- var dropdownLayoutOptions = new[]
- {
- GUILayout.Height(dropdownButtonHeight),
- GUILayout.Width(dropdownButtonWidth),
- };
- GUILayout.BeginHorizontal();
- if (isModsOnly)
- {
- GUILayout.FlexibleSpace();
- propCategoryDropdown.Draw(dropdownLayoutOptions);
- GUILayout.FlexibleSpace();
- }
- else
- {
- GUI.enabled = modItemsReady;
- propCategoryDropdown.Draw(dropdownLayoutOptions);
- GUI.enabled = shouldDraw;
- modFilterToggle.Draw();
- baseFilterToggle.Draw();
- GUI.enabled = true;
- }
- GUILayout.EndHorizontal();
- if (shouldDraw)
- {
- var windowRect = parent.WindowRect;
- var windowHeight = windowRect.height;
- var windowWidth = windowRect.width;
- const float offsetTop = 80f;
- const int columns = 4;
- var buttonSize = windowWidth / columns - 10f;
- var positionRect = new Rect(5f, offsetTop + dropdownButtonHeight, windowWidth - 10f, windowHeight - 145f);
- var viewRect = new Rect(
- 0f, 0f, buttonSize * columns, buttonSize * Mathf.Ceil(currentListCount / (float)columns) + 5);
- propListScrollPos = GUI.BeginScrollView(positionRect, propListScrollPos, viewRect);
- var modIndex = 0;
- foreach (var modItem in modPropList)
- {
- if (modFilter && !modItem.IsMod || baseFilter && modItem.IsMod)
- continue;
- var x = modIndex % columns * buttonSize;
- var y = modIndex / columns * buttonSize;
- var iconRect = new Rect(x, y, buttonSize, buttonSize);
- if (GUI.Button(iconRect, string.Empty))
- propManager.AddModProp(modItem);
- GUI.DrawTexture(iconRect, modItem.Icon);
- modIndex++;
- }
- GUI.EndScrollView();
- }
- }
- protected override void ReloadTranslation()
- {
- var listItems = Translation.GetArray("clothing", MenuCategories);
- if (!modItemsReady)
- listItems[0] = Translation.Get("systemMessage", "initializing");
- propCategoryDropdown.SetDropdownItems(listItems);
- if (isModsOnly)
- return;
- modFilterToggle.Label = Translation.Get("background2Window", "modsToggle");
- baseFilterToggle.Label = Translation.Get("background2Window", "baseToggle");
- }
- private void ChangeFilter(FilterType filterType)
- {
- if (updating)
- return;
- if (modFilterToggle.Value && baseFilterToggle.Value)
- {
- updating = true;
- modFilterToggle.Value = filterType is FilterType.Mod;
- baseFilterToggle.Value = filterType is FilterType.Base;
- updating = false;
- }
- modFilter = modFilterToggle.Value;
- baseFilter = baseFilterToggle.Value;
- SetListCount();
- }
- private void ChangePropCategory()
- {
- var category = SelectedCategory;
- if (currentCategory == category)
- return;
- currentCategory = category;
- categoryIndex = propCategoryDropdown.SelectedItemIndex;
- shouldDraw = categoryIndex > 0;
- if (!shouldDraw)
- return;
- propListScrollPos = Vector2.zero;
- modPropList = Constants.GetModPropList(category);
- SetListCount();
- }
- private void SetListCount() =>
- currentListCount = modFilter
- ? modPropList.Count(mod => mod.IsMod)
- : baseFilter
- ? modPropList.Count(mod => !mod.IsMod)
- : modPropList.Count;
- }
|