using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; public class RandomPresetCtrl : MonoBehaviour { public void Init(GameObject goRandomPresetPanel) { string text = "random_preset_category_name.nei"; using (AFileBase afileBase = GameUty.FileSystem.FileOpen(text)) { using (CsvParser csvParser = new CsvParser()) { bool condition = csvParser.Open(afileBase); NDebug.Assert(condition, text + "\nopen failed."); NDebug.Assert(csvParser.max_cell_y - 1 == this.categoryTitleLabels.Length, text + "に書かれているカテゴリー数とオブジェクト数が一致していません"); } } this.LoadRandomLogicParamter(); this.CreateRandomItem(goRandomPresetPanel); this.m_listCheckRandomActive = new List { MPN.wear, MPN.mizugi, MPN.onepiece }; this.m_notSettingIcon = (Resources.Load("SceneEdit/RandomPreset/Texture/_I_del") as Texture2D); this.m_defaultColorIcon = (Resources.Load("SceneEdit/RandomPreset/Texture/_I_del") as Texture2D); this.m_dicRandomPresetBtnOrderByExecutionOrder = from pair in this.m_dicRandomPresetBtn orderby pair.Value.m_executionOrder select pair; this.LoadMaidPropData(); } private void CreateRandomItem(GameObject goRandomPresetPanel) { this.m_sceneEdit = GameObject.Find("__SceneEdit__").GetComponent(); this.m_dicPartsTypePair = SceneEditInfo.m_dicPartsTypePair; this.m_dicRandomPresetBtn = new Dictionary(); bool flag = false; foreach (KeyValuePair keyValuePair in this.m_dicPartsTypePair) { RandomPresetContent.MPNMapping mpnmapping; if (RandomPresetContent.m_dicMPNMapping.TryGetValue(keyValuePair.Key, out mpnmapping)) { string str; if (RandomPresetContent.m_dicCategoryMapping.TryGetValue(keyValuePair.Value.m_eMenuCate, out str)) { GameObject childObject = UTY.GetChildObject(goRandomPresetPanel, "Contents/" + str + "/Buttons/" + mpnmapping.m_buttonName, true); NDebug.Assert(childObject != null, string.Concat(new string[] { "ランダムプリセットのボタン[", mpnmapping.m_buttonTitle, "]のオブジェクト、[", mpnmapping.m_buttonName, "]が見つかりませんでした" })); UIButton component = childObject.GetComponent(); if (!flag) { this.activeColor = new Color(component.defaultColor.r, component.defaultColor.g, component.defaultColor.b, 1f); this.inActiveColor = component.defaultColor; flag = true; } SceneEditInfo.CCateNameType.EType eType = keyValuePair.Value.m_eType; RandomPresetButton buttonByType = this.GetButtonByType(eType); buttonByType.m_menuCategory = keyValuePair.Value.m_eMenuCate; buttonByType.m_eButtonType = eType; buttonByType.m_name = mpnmapping.m_buttonName; buttonByType.m_mpn = keyValuePair.Key; buttonByType.m_btnButton = component; buttonByType.m_bBtnActive = false; buttonByType.m_executionOrder = mpnmapping.m_executionOrder; if (eType != SceneEditInfo.CCateNameType.EType.Item) { if (eType != SceneEditInfo.CCateNameType.EType.Slider) { if (eType == SceneEditInfo.CCateNameType.EType.Color) { buttonByType.m_txtColor = UTY.GetChildObject(childObject, "Color", false).GetComponent(); } } else { buttonByType.m_lValue = UTY.GetChildObject(childObject, "Value", false).GetComponent(); } } else { buttonByType.m_txtItem = UTY.GetChildObject(childObject, "Item", false).GetComponent(); } this.m_dicRandomPresetBtn.Add(buttonByType.m_name, buttonByType); } } } } public void LoadMaidPropData() { Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0); MaidProp prop = maid.GetProp(MPN.MuneL); foreach (KeyValuePair keyValuePair in this.m_dicRandomPresetBtn) { RandomPresetButton value = keyValuePair.Value; EventDelegate.Add(value.m_btnButton.onClick, new EventDelegate.Callback(this.randomRandomPresetMgr.OnButtonClick)); if (value.m_eButtonType == SceneEditInfo.CCateNameType.EType.Item) { int num = maid.GetProp(value.m_mpn).nFileNameRID; foreach (SceneEdit.SubPropMpnData subPropMpnData in this.m_sceneEdit.subPropDatas) { if (value.m_mpn == subPropMpnData.mpn) { if (subPropMpnData.manager.sloatItems != null && subPropMpnData.manager.sloatItems[0].menuItem != null) { num = subPropMpnData.manager.sloatItems[0].menuItem.m_nMenuFileRID; } break; } } Texture2D texture2D; if (num == 0) { texture2D = this.m_notSettingIcon; } else { texture2D = this.GetTextureByRid(value.m_menuCategory, value.m_mpn, num); } value.m_txtItem.mainTexture = texture2D; } else if (value.m_eButtonType == SceneEditInfo.CCateNameType.EType.Slider) { value.m_lValue.text = maid.GetProp(value.m_mpn).value.ToString(); } else if (value.m_eButtonType == SceneEditInfo.CCateNameType.EType.Color) { int nFileNameRID = maid.GetProp(value.m_mpn).nFileNameRID; Texture2D texture2D; if (nFileNameRID == 0) { texture2D = this.m_defaultColorIcon; } else { texture2D = this.GetColorTextureByRid(value.m_menuCategory, value.m_mpn, nFileNameRID); if (texture2D == null) { texture2D = this.m_defaultColorIcon; } } value.m_txtColor.mainTexture = texture2D; } } Debug.Log("データのロード処理が完了しました。"); } private Texture2D GetTextureByRid(SceneEditInfo.EMenuCategory eMenuCategory, MPN btnMpn, int rid) { List categoryList = this.m_sceneEdit.CategoryList; foreach (SceneEdit.SCategory scategory in categoryList) { if (scategory.m_eCategory == eMenuCategory) { foreach (SceneEdit.SPartsType spartsType in scategory.m_listPartsType) { if (spartsType.m_mpn == btnMpn) { foreach (SceneEdit.SMenuItem smenuItem in spartsType.m_listMenu) { if (smenuItem.m_nMenuFileRID == rid) { if (smenuItem.m_boDelOnly) { return smenuItem.m_texIcon; } return smenuItem.m_texIcon; } } return this.m_notSettingIcon; } } } } return null; } private Texture2D GetColorTextureByRid(SceneEditInfo.EMenuCategory eMenuCategory, MPN btnMpn, int rid) { MPN mpn = RandomPresetContent.m_dicColorFolderMapping[btnMpn]; List categoryList = this.m_sceneEdit.CategoryList; foreach (SceneEdit.SCategory scategory in categoryList) { if (scategory.m_eCategory == eMenuCategory) { foreach (SceneEdit.SPartsType spartsType in scategory.m_listPartsType) { if (spartsType.m_mpn == mpn) { foreach (SceneEdit.SMenuItem smenuItem in spartsType.m_listMenu) { foreach (SceneEdit.SMenuItem smenuItem2 in smenuItem.m_listColorSet) { if (smenuItem2.m_nMenuFileRID == rid) { if (smenuItem2.m_bColor) { if (smenuItem2.m_boDelOnly) { return this.m_notSettingIcon; } return smenuItem2.m_texIconRandomColor; } else { Debug.LogError(string.Format("SMenuItemクラスのm_bColorフラグの設定が誤っています。設定されているm_bColor={0}", smenuItem.m_bColor)); } } } } } } } } return null; } private List GetMenuItemList(SceneEditInfo.EMenuCategory eMenuCategory, MPN mpn) { List categoryList = this.m_sceneEdit.CategoryList; foreach (SceneEdit.SCategory scategory in categoryList) { if (scategory.m_eCategory == eMenuCategory) { foreach (SceneEdit.SPartsType spartsType in scategory.m_listPartsType) { if (spartsType.m_mpn == mpn) { return spartsType.m_listMenu; } } } } Debug.LogError(string.Format("不適切なメニューカテゴリとMPNが指定されました。 MenuCategory={0}, MPN={1}", eMenuCategory, mpn)); return null; } private void LoadRandomLogicParamter() { RandomPresetContent randomPresetContent = new RandomPresetContent(); randomPresetContent.InitRandomPresetParamter(); } private RandomPresetButton GetButtonByType(SceneEditInfo.CCateNameType.EType btnType) { if (btnType == SceneEditInfo.CCateNameType.EType.Item) { return new ItemTypeRandomPresetButton(); } if (btnType == SceneEditInfo.CCateNameType.EType.Slider) { return new SliderTypeRandomPresetButton(); } if (btnType != SceneEditInfo.CCateNameType.EType.Color) { return new ItemTypeRandomPresetButton(); } return new ColorTypeRandomPresetButton(); } public void OnButtonClick(string clickBtnName) { RandomPresetButton randomPresetButton = this.m_dicRandomPresetBtn[clickBtnName]; randomPresetButton.m_bBtnActive = !randomPresetButton.m_bBtnActive; if (randomPresetButton.m_bBtnActive) { randomPresetButton.m_btnButton.defaultColor = this.activeColor; } else { randomPresetButton.m_btnButton.defaultColor = this.inActiveColor; } } public void Execute() { Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0); if (maid.IsBusy) { return; } MaidProp prop = maid.GetProp(MPN.MuneL); int num = 0; if (this.m_dicRandomPresetBtn["b_BreastSize"].m_bBtnActive) { num = UnityEngine.Random.Range(prop.min, prop.max + 1); } else { num = prop.value; } int randomBaseGrpId = RandomPresetContent.GetRandomBaseGrpId(num); Dictionary dictionary = new Dictionary(); foreach (KeyValuePair keyValuePair in RandomPresetContent.m_dicRandomMapping) { if (keyValuePair.Value.randomBaseGroupId == randomBaseGrpId) { dictionary.Add(keyValuePair.Value.bodyBase.bodyBaseCategory, keyValuePair.Value); } } List randomActiveListByMPN = this.GetRandomActiveListByMPN(this.m_listCheckRandomActive); MPN mpn = MPN.null_mpn; if (randomActiveListByMPN.Count > 0) { mpn = randomActiveListByMPN[UnityEngine.Random.Range(0, randomActiveListByMPN.Count)]; foreach (MPN mpn2 in randomActiveListByMPN) { if (mpn != mpn2) { this.GetButtonByMPN(mpn2).m_bCanNotExecuteConcurrency = true; } } if (mpn == MPN.onepiece) { RandomPresetButton buttonByMPN = this.GetButtonByMPN(MPN.skirt); if (buttonByMPN.m_bBtnActive) { buttonByMPN.m_bCanNotExecuteConcurrency = true; } } } foreach (KeyValuePair keyValuePair2 in this.m_dicRandomPresetBtnOrderByExecutionOrder) { RandomPresetButton value = keyValuePair2.Value; if (value.m_name == "b_BreastSize") { maid.SetProp(value.m_mpn, num, false); value.m_lValue.text = num.ToString(); if (value.m_bBtnActive) { maid.SetProp(MPN.MuneTare, 0, false); } } else if (value.m_bCanNotExecuteConcurrency) { value.m_bCanNotExecuteConcurrency = false; } else if (value.m_bBtnActive) { SceneEditInfo.CCateNameType.EType eButtonType = value.m_eButtonType; if (eButtonType != SceneEditInfo.CCateNameType.EType.Slider) { if (eButtonType != SceneEditInfo.CCateNameType.EType.Item) { if (eButtonType == SceneEditInfo.CCateNameType.EType.Color) { if (this.PutOnItemOrColor(value, maid)) { this.ExecuteColorButtonByUnit(value, maid); } } } else if (this.PutOnItemOrColor(value, maid)) { this.ExecuteRandomItemButtonByUnit(value, maid); if (value.m_menuCategory == SceneEditInfo.EMenuCategory.服装) { this.SetClothesFilterFlg(value); } } } else { this.ExecuteRandomNumberButtonByUnit(value, maid, dictionary); } } } maid.AllProcPropSeqStart(); base.StartCoroutine(this.ExecuteAfterSetModel(maid)); } public IEnumerator ExecuteAfterSetModel(Maid maid) { while (maid.IsBusy) { yield return null; } this.LoadMaidPropData(); this.UpdateClothesFilter(); Debug.Log("データロード及びフィルター処理を完了しました。"); yield break; yield break; } private bool IsDelOnly(SceneEditInfo.EMenuCategory targetCategory, MPN targetMpn, int targetRid) { List categoryList = this.m_sceneEdit.CategoryList; foreach (SceneEdit.SCategory scategory in categoryList) { if (scategory.m_eCategory == targetCategory) { foreach (SceneEdit.SPartsType spartsType in scategory.m_listPartsType) { if (spartsType.m_mpn == targetMpn) { foreach (SceneEdit.SMenuItem smenuItem in spartsType.m_listMenu) { if (smenuItem.m_nMenuFileRID == targetRid && smenuItem.m_boDelOnly) { return true; } } } } } } return false; } private void SetClothesFilterFlg(RandomPresetButton btn) { if (RandomPresetContent.m_listClothesItemGroupn.Contains(btn.m_mpn)) { this.m_bDoFilterClothes = true; } else if (RandomPresetContent.m_listUnderwearsItemGroup.Contains(btn.m_mpn)) { this.m_bDoFilterUnderwears = true; } } private void UpdateClothesFilter() { if (this.m_bDoFilterClothes) { BaseMgr.Instance.UpdateClothesByName("Clothes_Dress"); } else if (this.m_bDoFilterUnderwears) { BaseMgr.Instance.UpdateClothesByName("Clothes_Lingerie"); } this.m_bDoFilterClothes = false; this.m_bDoFilterUnderwears = false; } private bool PutOnItemOrColor(RandomPresetButton btn, Maid maid) { RandomPresetContent.MPNMapping mpnmapping; if (!RandomPresetContent.m_dicMPNMapping.TryGetValue(btn.m_mpn, out mpnmapping) || mpnmapping.m_ratioToPutOn <= 0) { return true; } int num = UnityEngine.Random.Range(0, 100); if (mpnmapping.m_ratioToPutOn >= num) { return true; } SceneEdit.SMenuItem smenuItem = null; SceneEditInfo.CCateNameType.EType eButtonType = btn.m_eButtonType; if (eButtonType != SceneEditInfo.CCateNameType.EType.Item) { if (eButtonType == SceneEditInfo.CCateNameType.EType.Color) { MPN btnMpn = RandomPresetContent.m_dicColorFolderMapping[btn.m_mpn]; smenuItem = this.GetMenuItemByDelOnly(btn.m_menuCategory, btnMpn); if (smenuItem != null) { } } } else { smenuItem = this.GetMenuItemByDelOnly(btn.m_menuCategory, btn.m_mpn); if (smenuItem != null) { } } maid.SetProp(smenuItem.m_strCateName, smenuItem.m_strMenuFileName, smenuItem.m_nMenuFileRID, false, false); foreach (SceneEdit.SubPropMpnData subPropMpnData in this.m_sceneEdit.subPropDatas) { if (btn.m_mpn == subPropMpnData.mpn) { subPropMpnData.manager.UpdateAllItem(); break; } } return false; } private Texture2D GetDelOnlyTexture(SceneEditInfo.EMenuCategory eMenuCategory, MPN btnMpn) { SceneEdit.SMenuItem menuItemByDelOnly = this.GetMenuItemByDelOnly(eMenuCategory, btnMpn); if (menuItemByDelOnly != null) { return menuItemByDelOnly.m_texIcon; } return this.m_notSettingIcon; } private SceneEdit.SMenuItem GetMenuItemByDelOnly(SceneEditInfo.EMenuCategory eMenuCategory, MPN btnMpn) { List categoryList = this.m_sceneEdit.CategoryList; foreach (SceneEdit.SCategory scategory in categoryList) { if (scategory.m_eCategory == eMenuCategory) { foreach (SceneEdit.SPartsType spartsType in scategory.m_listPartsType) { if (spartsType.m_mpn == btnMpn) { foreach (SceneEdit.SMenuItem smenuItem in spartsType.m_listMenu) { if (smenuItem.m_boDelOnly) { return smenuItem; } } } } } } Debug.LogWarning(string.Format("除外用のアイコンが存在しませんでした。対象MPN={0}", btnMpn)); return null; } private List GetRandomActiveListByMPN(List m_listCheckRandomActive) { List list = new List(); foreach (MPN mpn in m_listCheckRandomActive) { RandomPresetButton buttonByMPN = this.GetButtonByMPN(mpn); if (buttonByMPN.m_bBtnActive) { list.Add(mpn); } } return list; } private void ExecuteRandomNumberButtonByUnit(RandomPresetButton btn, Maid maid, Dictionary dicTargerRandomMapping) { RandomPresetContent.RandomMapping randomMapping; int min; int num; if (dicTargerRandomMapping.TryGetValue(btn.m_mpn, out randomMapping)) { min = randomMapping.bodyBase.lowerLimit; num = randomMapping.bodyBase.upperLimit; } else { min = maid.GetProp(btn.m_mpn).min; num = maid.GetProp(btn.m_mpn).max; } int val = UnityEngine.Random.Range(min, num + 1); maid.SetProp(btn.m_mpn, val, false); btn.m_lValue.text = val.ToString(); } private void ExecuteRandomItemButtonByUnit(RandomPresetButton btn, Maid maid) { List categoryList = this.m_sceneEdit.CategoryList; List menuItemList = this.GetMenuItemList(btn.m_menuCategory, btn.m_mpn); Dictionary dicMapping = RandomPresetContent.m_dicPriorityPartMapping; List list = this.GetIconNameListIfPushButtonIsMappingTarget(dicMapping, btn.m_mpn, maid); if (list == null) { dicMapping = RandomPresetContent.m_dicExceptionPartMapping; List iconNameListIfPushButtonIsMappingTarget = this.GetIconNameListIfPushButtonIsMappingTarget(dicMapping, btn.m_mpn, maid); if (iconNameListIfPushButtonIsMappingTarget != null) { list = this.GetRandomIconList(menuItemList, iconNameListIfPushButtonIsMappingTarget); } } string text = null; SceneEdit.SMenuItem smenuItem; if (list == null) { int index = UnityEngine.Random.Range(0, menuItemList.Count); smenuItem = menuItemList[index]; } else { text = list[UnityEngine.Random.Range(0, list.Count)]; smenuItem = this.GetMenuItemByFileName(menuItemList, text); } if (smenuItem == null) { Debug.LogWarning(string.Format("組み合わせとして存在しないパーツIDが選択されました。カテゴリ名={0}, MPN={1}, パーツ名={2}", btn.m_menuCategory, btn.m_mpn, text)); return; } this.m_sceneEdit.customPartsWindow.ResetPoint(smenuItem.m_mpn); bool flag = false; foreach (SceneEdit.SubPropMpnData subPropMpnData in this.m_sceneEdit.subPropDatas) { if (btn.m_mpn == subPropMpnData.mpn) { flag = true; MaidProp prop = maid.GetProp(subPropMpnData.mpn); maid.SetProp(subPropMpnData.mpn.ToString(), prop.strFileName, prop.nFileNameRID, false, false); subPropMpnData.manager.UpdateAllItem(); if (smenuItem.m_nMenuFileRID != prop.nFileNameRID) { subPropMpnData.manager.SetItem(smenuItem); subPropMpnData.manager.UpdateAllItem(); } break; } } if (!flag) { maid.SetProp(smenuItem.m_strCateName, smenuItem.m_strMenuFileName, smenuItem.m_nMenuFileRID, false, false); } } private void ExecuteColorButtonByUnit(RandomPresetButton btn, Maid maid) { List categoryList = this.m_sceneEdit.CategoryList; MPN mpn = RandomPresetContent.m_dicColorFolderMapping[btn.m_mpn]; List menuItemList = this.GetMenuItemList(btn.m_menuCategory, mpn); int index = UnityEngine.Random.Range(0, menuItemList.Count); SceneEdit.SMenuItem smenuItem = menuItemList[index]; if (smenuItem.m_boDelOnly) { maid.SetProp(smenuItem.m_strCateName, smenuItem.m_strMenuFileName, smenuItem.m_nMenuFileRID, false, false); return; } if (smenuItem.m_listColorSet == null || smenuItem.m_listColorSet.Count == 0) { Debug.LogWarning(string.Format("カラーセットが存在しません。対象カテゴリ={0}, ファイル名={1}, FileRID={2}", smenuItem.m_strCateName, smenuItem.m_strMenuFileName, smenuItem.m_nMenuFileRID)); return; } int index2 = UnityEngine.Random.Range(0, smenuItem.m_listColorSet.Count); SceneEdit.SMenuItem smenuItem2 = smenuItem.m_listColorSet[index2]; if (btn.m_mpn != MPN.haircolor) { maid.SetProp(smenuItem.m_strCateName, smenuItem.m_strMenuFileName, smenuItem.m_nMenuFileRID, false, false); } maid.SetProp(smenuItem2.m_strCateName, smenuItem2.m_strMenuFileName, smenuItem2.m_nMenuFileRID, false, false); } private List GetIconNameListIfPushButtonIsMappingTarget(Dictionary dicMapping, MPN btnMPN, Maid maid) { if (dicMapping == null) { return null; } List result = null; foreach (KeyValuePair keyValuePair in dicMapping) { RandomPresetContent.PartMapping value = keyValuePair.Value; if (value.targetCategory == btnMPN) { MPN category = value.category; string strB = this.DelSuffix(maid.GetProp(category).strFileName); if (!string.IsNullOrEmpty(value.partId) && string.Compare(value.partId, strB, true) == 0) { result = this.GetMappingIconNameList(value.partId, dicMapping); return result; } } } return result; } private string DelSuffix(string str) { int num = str.IndexOf(".menu"); if (num > 0) { return str.Substring(0, num); } return str; } private SceneEdit.SMenuItem GetMenuItemByFileName(List list, string iconName) { foreach (SceneEdit.SMenuItem smenuItem in list) { if (string.Compare(this.DelSuffix(smenuItem.m_strMenuFileName), iconName, true) == 0) { return smenuItem; } } return null; } private List GetRandomIconList(List listMenuItem, List listExceptionIconName) { List list = new List(); foreach (SceneEdit.SMenuItem smenuItem in listMenuItem) { if (!listExceptionIconName.Contains(this.DelSuffix(smenuItem.m_strMenuFileName))) { list.Add(this.DelSuffix(smenuItem.m_strMenuFileName)); } } return list; } private List GetMappingIconNameList(string partId, Dictionary dicMapping) { List list = new List(); foreach (KeyValuePair keyValuePair in dicMapping) { if (keyValuePair.Value.partId == partId) { list.Add(keyValuePair.Value.targetPartId); } } return list; } public RandomPresetButton GetButtonByMPN(MPN mpn) { RandomPresetContent.MPNMapping mpnmapping; if (RandomPresetContent.m_dicMPNMapping.TryGetValue(mpn, out mpnmapping)) { return this.m_dicRandomPresetBtn[mpnmapping.m_buttonName]; } return null; } public void OnAllButtonClick() { Color defaultColor = this.inActiveColor; bool bBtnActive = false; string name = UIButton.current.name; if (name == "SelectAll") { bBtnActive = true; defaultColor = this.activeColor; } else if (name == "DeselectAll") { bBtnActive = false; defaultColor = this.inActiveColor; } foreach (KeyValuePair keyValuePair in this.m_dicRandomPresetBtn) { keyValuePair.Value.m_bBtnActive = bBtnActive; keyValuePair.Value.m_btnButton.defaultColor = defaultColor; } } public void OnDisable() { base.StopCoroutine(this.ExecuteAfterSetModel(null)); Debug.Log("データロード等がコルーチンで実行中の場合、PanelのCloseに伴い処理を停止します。"); } [SerializeField] private RandomPresetMgr randomRandomPresetMgr; [SerializeField] private UILabel[] categoryTitleLabels; private SceneEdit m_sceneEdit; private Dictionary m_dicRandomPresetBtn; private Dictionary m_dicPartsTypePair; private IOrderedEnumerable> m_dicRandomPresetBtnOrderByExecutionOrder; private List m_listCheckRandomActive; private Texture2D m_notSettingIcon; private Texture2D m_defaultColorIcon; private bool m_bDoFilterUnderwears; private bool m_bDoFilterClothes; private Color activeColor; private Color inActiveColor; private const string RANDOM_BASE_PART_NAME = "b_BreastSize"; private const int NOT_SETTING = 0; private const string NOT_SETTING_ICON_PATH = "SceneEdit/RandomPreset/Texture/_I_del"; private const string DEFAULT_COLOR_ICON_PATH = "SceneEdit/RandomPreset/Texture/cm3d2_edit_random_partcolor"; private const string STR_FILENAME_SUFFIX = ".menu"; private const int NOT_SET_RATIO_TO_PUT_ON = 0; private enum MappingType { Priority, Exception } public enum ButtonType { Slider, Item, ItemAndColor } }