123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine;
- namespace MeidoPhotoStudio.Plugin;
- public class PropsPane : BasePane
- {
- private static bool handItemsReady;
- private readonly PropManager propManager;
- private readonly Dropdown doguCategoryDropdown;
- private readonly Dropdown doguDropdown;
- private readonly Button addDoguButton;
- private readonly Button nextDoguButton;
- private readonly Button prevDoguButton;
- private readonly Button nextDoguCategoryButton;
- private readonly Button prevDoguCategoryButton;
- private string currentCategory;
- private bool itemSelectorEnabled = true;
- public PropsPane(PropManager propManager)
- {
- this.propManager = propManager;
- handItemsReady = Constants.HandItemsInitialized;
- if (!handItemsReady)
- Constants.MenuFilesChange += InitializeHandItems;
- doguCategoryDropdown = new(Translation.GetArray("doguCategories", Constants.DoguCategories));
- doguCategoryDropdown.SelectionChange += (_, _) =>
- ChangeDoguCategory(SelectedCategory);
- doguDropdown = new(new[] { string.Empty });
- addDoguButton = new("+");
- addDoguButton.ControlEvent += (_, _) =>
- SpawnObject();
- nextDoguButton = new(">");
- nextDoguButton.ControlEvent += (_, _) =>
- doguDropdown.Step(1);
- prevDoguButton = new("<");
- prevDoguButton.ControlEvent += (_, _) =>
- doguDropdown.Step(-1);
- nextDoguCategoryButton = new(">");
- nextDoguCategoryButton.ControlEvent += (_, _) =>
- doguCategoryDropdown.Step(1);
- prevDoguCategoryButton = new("<");
- prevDoguCategoryButton.ControlEvent += (_, _) =>
- doguCategoryDropdown.Step(-1);
- ChangeDoguCategory(SelectedCategory);
- }
- private string SelectedCategory =>
- Constants.DoguCategories[doguCategoryDropdown.SelectedItemIndex];
- public override void Draw()
- {
- const float buttonHeight = 30;
- var arrowLayoutOptions = new[]
- {
- GUILayout.Width(buttonHeight),
- GUILayout.Height(buttonHeight),
- };
- const float dropdownButtonWidth = 120f;
- var dropdownLayoutOptions = new[]
- {
- GUILayout.Height(buttonHeight),
- GUILayout.Width(dropdownButtonWidth),
- };
- GUILayout.BeginHorizontal();
- prevDoguCategoryButton.Draw(arrowLayoutOptions);
- doguCategoryDropdown.Draw(dropdownLayoutOptions);
- nextDoguCategoryButton.Draw(arrowLayoutOptions);
- GUILayout.EndHorizontal();
- GUI.enabled = itemSelectorEnabled;
- GUILayout.BeginHorizontal();
- doguDropdown.Draw(dropdownLayoutOptions);
- prevDoguButton.Draw(arrowLayoutOptions);
- nextDoguButton.Draw(arrowLayoutOptions);
- addDoguButton.Draw(arrowLayoutOptions);
- GUILayout.EndHorizontal();
- GUI.enabled = true;
- }
- protected override void ReloadTranslation()
- {
- doguCategoryDropdown.SetDropdownItems(Translation.GetArray("doguCategories", Constants.DoguCategories));
- var category = SelectedCategory;
- var translationArray =
- category == Constants.CustomDoguCategories[Constants.DoguCategory.HandItem] && !handItemsReady
- ? new[] { Translation.Get("systemMessage", "initializing") }
- : GetTranslations(category);
- doguDropdown.SetDropdownItems(translationArray);
- }
- private void InitializeHandItems(object sender, MenuFilesEventArgs args)
- {
- if (args.Type is not MenuFilesEventArgs.EventType.HandItems)
- return;
- handItemsReady = true;
- var selectedCategory = SelectedCategory;
- if (selectedCategory == Constants.CustomDoguCategories[Constants.DoguCategory.HandItem])
- ChangeDoguCategory(selectedCategory, true);
- }
- private void ChangeDoguCategory(string category, bool force = false)
- {
- if (category == currentCategory && !force)
- return;
- currentCategory = category;
- string[] translationArray;
- if (category == Constants.CustomDoguCategories[Constants.DoguCategory.HandItem] && !handItemsReady)
- {
- translationArray = new[] { Translation.Get("systemMessage", "initializing") };
- itemSelectorEnabled = false;
- }
- else
- {
- translationArray = GetTranslations(category);
- itemSelectorEnabled = true;
- }
- doguDropdown.SetDropdownItems(translationArray, 0);
- }
- private string[] GetTranslations(string category)
- {
- IEnumerable<string> itemList = Constants.DoguDict[category];
- if (category == Constants.CustomDoguCategories[Constants.DoguCategory.HandItem])
- {
- // TODO: itemList should not be reused
- itemList = itemList.Select(item =>
- {
- var handItemAsOdogu = Utility.HandItemToOdogu(item);
- return Translation.Has("propNames", handItemAsOdogu) ? handItemAsOdogu : item;
- });
- }
- var translationCategory = category == Constants.CustomDoguCategories[Constants.DoguCategory.BGSmall]
- ? "bgNames"
- : "propNames";
- return Translation.GetArray(translationCategory, itemList);
- }
- private void SpawnObject()
- {
- var assetName = Constants.DoguDict[SelectedCategory][doguDropdown.SelectedItemIndex];
- if (SelectedCategory == Constants.CustomDoguCategories[Constants.DoguCategory.BGSmall])
- propManager.AddBgProp(assetName);
- else
- propManager.AddGameProp(assetName);
- }
- }
|