protected void AddInsertMenuItems(ref CtxMenu.Item[] items) { int inserts = 0; if (items != null) { for (int idx=0; idx < items.Length; idx++) { if (items[idx].isSelected) { items[idx].isSelected = false; CtxMenu.Item newItem = new CtxMenu.Item(); newItem.id = NextHighestItemID(ref items); ArrayUtility.Insert<CtxMenu.Item>(ref items, idx, newItem); ++inserts; } } } if (inserts == 0) { CtxMenu.Item newItem = new CtxMenu.Item(); newItem.id = NextHighestItemID(ref items); if (items == null) { items = new CtxMenu.Item[1]; items[0] = newItem; } else ArrayUtility.Add<CtxMenu.Item>(ref items, newItem); } }
private void __InitializeContextMenu() { // IMPROVE use of string _ctxObject = gameObject.GetSafeMonoBehaviour<CtxObject>(); _ctxObject.offsetMenu = true; if (_playerFleetMenu == null) { _playerFleetMenu = GuiManager.Instance.gameObject.GetSafeMonoBehavioursInChildren<CtxMenu>().Single(menu => menu.gameObject.name == "PlayerFleetMenu"); // NOTE: Cannot set CtxMenu.items from here as CtxMenu.Awake sets defaultItems = items (null) before I can set items programmatically. // Accordingly, the work around is to either use the editor to set the items, or have every CtxObject set their menuItems programmatically. // I've chosen to use the editor for now, and to verify my editor settings from here using ValidateShipMenuItems() var desiredfleetMenuItems = new CtxMenu.Item[_playerFleetMenuOrders.Length]; for (int i = 0; i < _playerFleetMenuOrders.Length; i++) { var item = new CtxMenu.Item(); item.text = _playerFleetMenuOrders[i].GetValueName(); // IMPROVE GetDescription would be better for the context menu display item.id = i; desiredfleetMenuItems[i] = item; } var editorPopulatedMenuItems = _playerFleetMenu.items; ValidateMenuItems(editorPopulatedMenuItems, desiredfleetMenuItems); _lowestUnusedItemId = _playerFleetMenu.items.Length; } _ctxObject.contextMenu = _playerFleetMenu; D.Assert(_ctxObject.contextMenu != null, "{0}.contextMenu on {1} is null.".Inject(typeof(CtxObject).Name, Presenter.FullName)); EventDelegate.Add(_ctxObject.onShow, OnContextMenuShow); EventDelegate.Add(_ctxObject.onSelection, OnContextMenuSelection); EventDelegate.Add(_ctxObject.onHide, OnContextMenuHide); }
protected void AddInsertMenuItems(ref CtxMenu.Item[] items) { int inserts = 0; if (items != null) { for (int idx = 0; idx < items.Length; idx++) { if (items[idx].isSelected) { items[idx].isSelected = false; CtxMenu.Item newItem = new CtxMenu.Item(); newItem.id = NextHighestItemID(ref items); ArrayUtility.Insert <CtxMenu.Item>(ref items, idx, newItem); ++inserts; } } } if (inserts == 0) { CtxMenu.Item newItem = new CtxMenu.Item(); newItem.id = NextHighestItemID(ref items); if (items == null) { items = new CtxMenu.Item[1]; items[0] = newItem; } else { ArrayUtility.Add <CtxMenu.Item>(ref items, newItem); } } }
/// <summary> /// Assign a new icon sprite to this menu item. /// </summary> /// <param name='items'> /// The array of items to search. /// </param> /// <param name='id'> /// The menu item id number. /// </param> /// <param name='icon'> /// The name of the sprite to assign. Note that the sprite must be in the atlas /// used by this context menu. Refer to the NGUI documentation for more information. /// </param> public static void SetIcon(CtxMenu.Item[] items, int id, string icon) { CtxMenu.Item item = FindItemRecursively(items, id); if (item != null) { item.icon = icon; } }
/// <summary> /// Assigns a new text string to the specified menu item. If this is a localized /// menu, you should only assign key strings and allow the localization /// logic to update the visible text. /// </summary> /// <param name='items'> /// The array of items to search. /// </param> /// <param name='id'> /// The menu item id number. /// </param> /// <param name='text'> /// The text that will be displayed for this menu item. /// </param> public static void SetText(CtxMenu.Item[] items, int id, string text) { CtxMenu.Item item = FindItemRecursively(items, id); if (item != null) { item.text = text; } }
/// <summary> /// Sets the disabled state for the specified menu item. /// </summary> /// <param name='id'> /// The menu item id number. /// </param> /// <param name='items'> /// The array of items to search. /// </param> /// <param name='isDisabled'> /// The desired disable state. /// </param> public static void SetDisabled(CtxMenu.Item[] items, int id, bool isDisabled) { CtxMenu.Item item = FindItemRecursively(items, id); if (item != null) { item.isDisabled = isDisabled; } }
/// <summary> /// Retrieve the name of the icon sprite displayed by this menu item. /// </summary> /// <returns> /// The icon sprite name. /// </returns> /// <param name='items'> /// The array of items to search. /// </param> /// <param name='id'> /// The menu item id number. /// </param> public static string GetIcon(CtxMenu.Item[] items, int id) { CtxMenu.Item item = FindItemRecursively(items, id); if (item != null) { return(item.icon); } return(null); }
/// <summary> /// Determines whether the specified menu item is disabled. /// </summary> /// <returns> /// <c>true</c> if the specified menu item is disabled; otherwise, <c>false</c>. /// </returns> /// <param name='items'> /// The array of items to search. /// </param> /// <param name='id'> /// The menu item id number. /// </param> public static bool IsDisabled(CtxMenu.Item[] items, int id) { CtxMenu.Item item = FindItemRecursively(items, id); if (item != null) { return(item.isDisabled); } return(false); }
/// <summary> /// Sets the checkmark state for the specified menu item. Note that this flag /// will be ignored if the item didn't originally have its 'checkable' flag set. /// If this item is part of a mutex group, then the other items in the group /// will be unchecked when this item is checked. /// </summary> /// <param name='items'> /// The array of items to search. /// </param> /// <param name='id'> /// The menu item id number. /// </param> /// <param name='isChecked'> /// The desired checkmark state. /// </param> public static void SetChecked(CtxMenu.Item[] items, int id, bool isChecked) { CtxMenu.Item item = FindItemRecursively(items, id); if (item != null && item.isCheckable) { item.isChecked = isChecked; if (item.mutexGroup >= 0) { MutexItems(items, id, item.mutexGroup); } } }
public void OnShowMenu(CtxObject obj) { if (menuItems == null) { int cnt = (int)MenuItemID.Count; menuItems = new CtxMenu.Item[cnt]; for (int i = 0; i < cnt; i++) { MenuItemID itemID = (MenuItemID)i; menuItems[i] = new CtxMenu.Item(); menuItems[i].text = ItemText(itemID); if (menuItems[i].text.StartsWith("Separator")) { menuItems[i].isSeparator = true; } else { menuItems[i].id = i; } } menuItems[(int)MenuItemID.Small].isCheckable = true; menuItems[(int)MenuItemID.Medium].isCheckable = true; menuItems[(int)MenuItemID.Large].isCheckable = true; menuItems[(int)MenuItemID.Small].mutexGroup = 0; menuItems[(int)MenuItemID.Medium].mutexGroup = 0; menuItems[(int)MenuItemID.Large].mutexGroup = 0; menuItems[(int)MenuItemID.Stealth].isCheckable = true; menuItems[(int)MenuItemID.Shield].isCheckable = true; } if (transform.localScale.x == 1f) { CtxHelper.SetChecked(menuItems, (int)MenuItemID.Small, true); } else if (transform.localScale.x == 2f) { CtxHelper.SetChecked(menuItems, (int)MenuItemID.Medium, true); } else { CtxHelper.SetChecked(menuItems, (int)MenuItemID.Large, true); } menuItems[(int)MenuItemID.Stealth].isChecked = stealthOn; menuItems[(int)MenuItemID.Shield].isChecked = shieldOn; obj.menuItems = menuItems; }
/// <summary> /// Retrieve the menu item descriptor with the specified id. If this menu has /// submenus, the search will recurse into the child menus after searching all /// of the items in the current menu. /// </summary> /// <returns> /// The menu item descriptor instance. /// </returns> /// <param name='items'> /// The array of items to search. /// </param> /// <param name='id'> /// The menu item id number. /// </param> public static CtxMenu.Item FindItemRecursively(CtxMenu.Item[] itemsArray, int id) { bool hasSubmenus = false; foreach (CtxMenu.Item item in itemsArray) { if (item.id == id) { return(item); } #if CTX_NO_SERIALIZATION_FIX if (item.submenuItems != null || item.submenu) #else if (item.submenu) #endif { hasSubmenus = true; } } if (hasSubmenus) { foreach (CtxMenu.Item item in itemsArray) { #if CTX_NO_SERIALIZATION_FIX if (item.submenuItems != null) { CtxMenu.Item res = FindItemRecursively(item.submenuItems, id); if (res != null) { return(res); } } #endif if (item.submenu != null) { CtxMenu.Item res = FindItemRecursively(item.submenu.items, id); if (res != null) { return(res); } } } } return(null); }
void BuildMenu() { int baseItem = base.MenuItemCount; if (menuItems == null) { int itemCnt = baseItem + 1; menuItems = new CtxMenu.Item[itemCnt]; for (int i = 0; i < itemCnt; i++) { menuItems[i] = new CtxMenu.Item(); } } base.FillMenuItems(menuItems); menuItems[baseItem].text = "Transport"; menuItems[baseItem].isSubmenu = true; menuItems[baseItem].submenu = commandSubmenu; #if CTX_NO_SERIALIZATION_FIX CtxMenu.Item[] submenuItems = new CtxMenu.Item[3]; menuItems[baseItem].submenuItems = submenuItems; #else CtxMenu.Item[] submenuItems = new CtxMenu.Item[3]; commandSubmenu.items = submenuItems; #endif for (int i = 0; i < 3; i++) { submenuItems[i] = new CtxMenu.Item(); submenuItems[i].id = (int)Commands.LandAtWhiteHouse + i; } submenuItems[0].text = "Land At White House"; submenuItems[1].text = "Deploy Grays"; submenuItems[2].text = "Recover Grays"; }
void BuildMenu() { int baseItem = base.MenuItemCount; if (menuItems == null) { int itemCnt = baseItem + 1; menuItems = new CtxMenu.Item[itemCnt]; for (int i = 0; i < itemCnt; i++) { menuItems[i] = new CtxMenu.Item(); } } base.FillMenuItems(menuItems); menuItems[baseItem].text = "Enforcer"; menuItems[baseItem].isSubmenu = true; menuItems[baseItem].submenu = commandSubmenu; #if CTX_NO_SERIALIZATION_FIX CtxMenu.Item[] submenuItems = new CtxMenu.Item[3]; menuItems[baseItem].submenuItems = submenuItems; #else CtxMenu.Item[] submenuItems = new CtxMenu.Item[3]; commandSubmenu.items = submenuItems; #endif for (int i = 0; i < 3; i++) { submenuItems[i] = new CtxMenu.Item(); submenuItems[i].id = (int)Commands.AttackMilitary + i; } submenuItems[0].text = "Attack Military"; submenuItems[1].text = "Attack Civilians"; submenuItems[2].text = "Deploy Ultimate Weapon"; }
void BuildMenu() { int baseItem = base.MenuItemCount; if (menuItems == null) { int itemCnt = baseItem + 1; menuItems = new CtxMenu.Item[itemCnt]; for (int i = 0; i < itemCnt; i++) { menuItems[i] = new CtxMenu.Item(); } } base.FillMenuItems(menuItems); menuItems[baseItem].text = "Spy"; menuItems[baseItem].isSubmenu = true; menuItems[baseItem].submenu = commandSubmenu; #if CTX_NO_SERIALIZATION_FIX CtxMenu.Item[] submenuItems = new CtxMenu.Item[3]; menuItems[baseItem].submenuItems = submenuItems; #else CtxMenu.Item[] submenuItems = new CtxMenu.Item[3]; commandSubmenu.items = submenuItems; #endif for (int i = 0; i < 3; i++) { submenuItems[i] = new CtxMenu.Item(); submenuItems[i].id = (int)Commands.FakeAutopsy + i; } submenuItems[0].text = "Fake Autopsy"; submenuItems[1].text = "Make Crop Circles"; submenuItems[2].text = "Buzz Radar Towers"; }
void BuildMenu() { int baseItem = base.MenuItemCount; if (menuItems == null) { int itemCnt = baseItem + 1; menuItems = new CtxMenu.Item[itemCnt]; for (int i = 0; i < itemCnt; i++) { menuItems[i] = new CtxMenu.Item(); } } base.FillMenuItems(menuItems); menuItems[baseItem].text = "Abductor"; menuItems[baseItem].isSubmenu = true; menuItems[baseItem].submenu = commandSubmenu; #if CTX_NO_SERIALIZATION_FIX CtxMenu.Item[] submenuItems = new CtxMenu.Item[3]; menuItems[baseItem].submenuItems = submenuItems; #else CtxMenu.Item[] submenuItems = new CtxMenu.Item[3]; commandSubmenu.items = submenuItems; #endif for (int i = 0; i < 3; i++) { submenuItems[i] = new CtxMenu.Item(); submenuItems[i].id = (int)Commands.AbductSpecimens + i; } submenuItems[0].text = "Abduct Specimens"; submenuItems[1].text = "Erase Memory"; submenuItems[2].text = "Use 'Probe' Device"; }
void BuildMenu() { int baseItem = base.MenuItemCount; if (menuItems == null) { int itemCnt = baseItem + 1; menuItems = new CtxMenu.Item[itemCnt]; for (int i = 0; i < itemCnt; i++) { menuItems[i] = new CtxMenu.Item(); } } base.FillMenuItems(menuItems); menuItems[baseItem].text = "Scout"; menuItems[baseItem].isSubmenu = true; menuItems[baseItem].submenu = commandSubmenu; #if CTX_NO_SERIALIZATION_FIX CtxMenu.Item[] submenuItems = new CtxMenu.Item[3]; menuItems[baseItem].submenuItems = submenuItems; #else CtxMenu.Item[] submenuItems = new CtxMenu.Item[3]; commandSubmenu.items = submenuItems; #endif for (int i = 0; i < 3; i++) { submenuItems[i] = new CtxMenu.Item(); submenuItems[i].id = (int)Commands.BuzzAirliners + i; } submenuItems[0].text = "Buzz Airliners"; submenuItems[1].text = "Fly in Circles"; submenuItems[2].text = "Hover Aimlessly"; }
/// <summary> /// Adds the optimal focus distance item to the menu operator menu without regard /// to whether the MenuOperator is owned by the user. /// </summary> private void AddOptimalFocusDistanceItemToMenu() { _optimalFocusDistanceItemID = _nextAvailableItemId; CtxMenu.Item optimalFocusDistanceItem = new CtxMenu.Item() { text = SetOptimalFocusDistanceItemText, id = _optimalFocusDistanceItemID }; // many SelectedItems will not offer any other menuItems to select var menuItems = (_ctxObject.menuItems != null) ? _ctxObject.menuItems.ToList() : new List<CtxMenu.Item>(1); menuItems.Add(optimalFocusDistanceItem); _ctxObject.menuItems = menuItems.ToArray(); _nextAvailableItemId++; // probably not necessary as this is the last item being added }
private void PopulateMenu_UserRemoteBaseIsSelected() { var topLevelMenuItems = new List<CtxMenu.Item>(); var selectedItemDistanceLabel = CreateRemoteSelectedItemDistanceLabel(); topLevelMenuItems.Add(selectedItemDistanceLabel); foreach (var directive in UserRemoteBaseDirectives) { int topLevelItemID = _nextAvailableItemId; var topLevelItem = new CtxMenu.Item() { text = TopLevelMenuItemTextFormat.Inject(directive.GetValueName()), id = topLevelItemID }; topLevelMenuItems.Add(topLevelItem); _directiveLookup.Add(topLevelItemID, directive); _nextAvailableItemId++; topLevelItem.isDisabled = IsUserRemoteBaseMenuItemDisabledFor(directive); } _ctxObject.menuItems = topLevelMenuItems.ToArray(); }
private CtxMenu.Item CreateRemoteSelectedItemDistanceLabel() { float distanceToSelectedItem = GetDistanceTo(_remoteUserOwnedSelectedItem); var menuItem = new CtxMenu.Item() { text = SelectedItemDistanceTextFormat.Inject(distanceToSelectedItem) }; menuItem.id = -1; // needed to get spacing right menuItem.isDisabled = true; return menuItem; }
protected void EditMenuItem(CtxMenu.Item item, UIAtlas atlas) { if (item == null) return; GUILayoutOption[] itemSpriteOpt = { GUILayout.Height(16f), GUILayout.Width(140f) }; GUILayoutOption[] itemSpriteDelOpt = { GUILayout.Height(16f), GUILayout.Width(60f) }; Color normalColor, disabledColor; Rect box = EditorGUILayout.BeginVertical(); GUILayout.Space(4f); GUI.Box(box, ""); EditorGUILayout.BeginHorizontal(); item.isSelected = EditorGUILayout.Toggle(item.isSelected, GUILayout.Width(12f)); EditorGUIUtility.labelWidth = 64f; CtxMenu.ItemStyle itemStyle = (CtxMenu.ItemStyle)EditorGUILayout.EnumMaskField("Style", item.style, GUILayout.Width(188f)); if (item.style != itemStyle) { RegisterUndo(); bool wasSubmenu = item.isSubmenu; item.style = itemStyle; if (item.isSubmenu && ! wasSubmenu) item.id = -1; } if (item.isCheckable) { EditorGUIUtility.labelWidth = 44f; int mutexGroup = EditorGUILayout.IntField("Mutex", item.mutexGroup, GUILayout.Width(88f)); if (mutexGroup != item.mutexGroup) { RegisterUndo(); item.mutexGroup = mutexGroup; } } EditorGUIUtility.labelWidth = 80f; EditorGUILayout.EndHorizontal(); if ((item.style & CtxMenu.ItemStyle.Separator) != (CtxMenu.ItemStyle)0) item.id = -1; else { EditorGUILayout.BeginHorizontal(); string text = EditorGUILayout.TextField(" Text", item.text, GUILayout.Width(204f)); if (item.text != text) { RegisterUndo(); item.text = text; } EditorGUIUtility.labelWidth = 32f; GUILayout.Space(12f); int itemId = EditorGUILayout.IntField("ID", item.id, GUILayout.Width(76f)); if (item.id != itemId) { RegisterUndo(); item.id = itemId; } EditorGUIUtility.labelWidth = 80f; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Icon", GUILayout.Width(76f)); string iconTitle = item.icon; if (string.IsNullOrEmpty(iconTitle)) iconTitle = "..."; if (GUILayout.Button(iconTitle, itemSpriteOpt)) { currentItem = item; NGUISettings.atlas = atlas; SpriteSelector.Show(OnItemIcon); } GUILayout.Space(12f); if (GUILayout.Button("None", itemSpriteDelOpt)) { if (! string.IsNullOrEmpty(item.icon)) RegisterUndo(); item.icon = ""; } EditorGUILayout.EndHorizontal(); if (! string.IsNullOrEmpty(item.icon)) { EditorGUILayout.BeginHorizontal(); normalColor = EditorGUILayout.ColorField(" Normal", item.spriteColor, GUILayout.Width(140f)); if (normalColor != item.spriteColor) { RegisterUndo(); item.spriteColor = normalColor; } GUILayout.Space(32f); disabledColor = EditorGUILayout.ColorField("Disabled", item.spriteColorDisabled, GUILayout.Width(140f)); if (item.spriteColorDisabled != disabledColor) { RegisterUndo(); item.spriteColorDisabled = disabledColor; } EditorGUILayout.EndHorizontal(); } if (item.isSubmenu) { CtxMenu submenu = (CtxMenu)EditorGUILayout.ObjectField(" Submenu", item.submenu, typeof(CtxMenu), true, GUILayout.Width(317f)); if (item.submenu != submenu) { RegisterUndo(); item.submenu = submenu; } if (submenu != null) EditMenuItemList(ref item.submenuItems, submenu.atlas, false, ref item.isEditingItems); } } GUILayout.Space(4f); EditorGUILayout.EndVertical(); GUILayout.Space(4f); }
protected void EditMenuItem(CtxMenu.Item item, UIAtlas atlas) { if (item == null) { return; } GUILayoutOption[] itemSpriteOpt = { GUILayout.Height(16f), GUILayout.Width(140f) }; GUILayoutOption[] itemSpriteDelOpt = { GUILayout.Height(16f), GUILayout.Width(60f) }; Color normalColor, disabledColor; Rect box = EditorGUILayout.BeginVertical(); GUILayout.Space(4f); GUI.Box(box, ""); EditorGUILayout.BeginHorizontal(); item.isSelected = EditorGUILayout.Toggle(item.isSelected, GUILayout.Width(12f)); EditorGUIUtility.labelWidth = 64f; CtxMenu.ItemStyle itemStyle = (CtxMenu.ItemStyle)EditorGUILayout.EnumFlagsField("Style", item.style, GUILayout.Width(188f)); if (item.style != itemStyle) { RegisterUndo(); bool wasSubmenu = item.isSubmenu; item.style = itemStyle; if (item.isSubmenu && !wasSubmenu) { item.id = -1; } } if (item.isCheckable) { EditorGUIUtility.labelWidth = 44f; int mutexGroup = EditorGUILayout.IntField("Mutex", item.mutexGroup, GUILayout.Width(88f)); if (mutexGroup != item.mutexGroup) { RegisterUndo(); item.mutexGroup = mutexGroup; } } EditorGUIUtility.labelWidth = 80f; EditorGUILayout.EndHorizontal(); if ((item.style & CtxMenu.ItemStyle.Separator) != (CtxMenu.ItemStyle) 0) { item.id = -1; } else { EditorGUILayout.BeginHorizontal(); string text = EditorGUILayout.TextField(" Text", item.text, GUILayout.Width(204f)); if (item.text != text) { RegisterUndo(); item.text = text; } EditorGUIUtility.labelWidth = 32f; GUILayout.Space(12f); int itemId = EditorGUILayout.IntField("ID", item.id, GUILayout.Width(76f)); if (item.id != itemId) { RegisterUndo(); item.id = itemId; } EditorGUIUtility.labelWidth = 80f; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label(" Icon", GUILayout.Width(76f)); string iconTitle = item.icon; if (string.IsNullOrEmpty(iconTitle)) { iconTitle = "..."; } if (GUILayout.Button(iconTitle, itemSpriteOpt)) { currentItem = item; NGUISettings.atlas = atlas; SpriteSelector.Show(OnItemIcon); } GUILayout.Space(12f); if (GUILayout.Button("None", itemSpriteDelOpt)) { if (!string.IsNullOrEmpty(item.icon)) { RegisterUndo(); } item.icon = ""; } EditorGUILayout.EndHorizontal(); if (!string.IsNullOrEmpty(item.icon)) { EditorGUILayout.BeginHorizontal(); normalColor = EditorGUILayout.ColorField(" Normal", item.spriteColor, GUILayout.Width(140f)); if (normalColor != item.spriteColor) { RegisterUndo(); item.spriteColor = normalColor; } GUILayout.Space(32f); disabledColor = EditorGUILayout.ColorField("Disabled", item.spriteColorDisabled, GUILayout.Width(140f)); if (item.spriteColorDisabled != disabledColor) { RegisterUndo(); item.spriteColorDisabled = disabledColor; } EditorGUILayout.EndHorizontal(); } if (item.isSubmenu) { CtxMenu submenu = (CtxMenu)EditorGUILayout.ObjectField(" Submenu", item.submenu, typeof(CtxMenu), true, GUILayout.Width(317f)); if (item.submenu != submenu) { RegisterUndo(); item.submenu = submenu; #if CTX_NO_SERIALIZATION_FIX if (submenu.items == null || submenu.items.Length == 0) { Debug.Log("Wizzy Submenu Item Transfer Test!!!!"); if (item.submenuItems != null && item.submenuItems.Length > 0) { Debug.Log("Wizzy Submenu Item Transfer!!!!"); submenu.items = item.submenuItems; item.submenuItems = null; EditorUtility.SetDirty(submenu); EditorUtility.SetDirty(target); } } #endif } if (submenu != null) #if CTX_NO_SERIALIZATION_FIX { EditMenuItemList(ref item.submenuItems, submenu.atlas, false, ref item.isEditingItems); } #else { EditMenuItemList(ref submenu.items, submenu.atlas, false, ref item.isEditingItems); } #endif } } GUILayout.Space(4f); EditorGUILayout.EndVertical(); GUILayout.Space(4f); }
private void InitializeContextMenu() { // IMPROVE use of strings UnityUtility.ValidateComponentPresence<Collider>(gameObject); _ctxObject = gameObject.GetSafeMonoBehaviour<CtxObject>(); _ctxObject.offsetMenu = true; if (_shipMenu == null) { _shipMenu = GuiManager.Instance.gameObject.GetSafeMonoBehavioursInChildren<CtxMenu>() .Single(menu => menu.gameObject.name.Equals("ShipMenu")); // NOTE: Cannot set CtxMenu.items from here as CtxMenu.Awake sets defaultItems = items (null) before I can set items programmatically. // Accordingly, the work around is to either use the editor to set the items, or have every CtxObject set their menuItems programmatically. // I've chosen to use the editor for now, and to verify my editor settings from here using ValidateShipMenuItems() var desiredShipMenuItems = new CtxMenu.Item[_shipMenuOrders.Length]; for (int i = 0; i < _shipMenuOrders.Length; i++) { var item = new CtxMenu.Item(); item.text = _shipMenuOrders[i].GetValueName(); // IMPROVE GetDescription would be better for the context menu display item.id = i; desiredShipMenuItems[i] = item; } var editorPopulatedShipMenuItems = _shipMenu.items; ValidateShipMenuItems(editorPopulatedShipMenuItems, desiredShipMenuItems); _lowestUnusedItemId = _shipMenu.items.Length; } if (_subMenuLookup == null) { _subMenuLookup = new Dictionary<ShipDirective, CtxMenu>(_shipMenuOrders.Length); var availableSubMenus = GuiManager.Instance.gameObject.GetSafeMonoBehavioursInChildren<CtxMenu>() .Where(menu => menu.gameObject.name.Equals("SubMenu")).ToArray(); D.Assert(_shipMenuOrders.Length <= availableSubMenus.Length); for (int i = 0; i < _shipMenuOrders.Length; i++) { _subMenuLookup.Add(_shipMenuOrders[i], availableSubMenus[i]); } } if (_subMenuOrderLookup == null) { _subMenuOrderLookup = new Dictionary<ValueRange<int>, ShipDirective>(); } if (_joinableFleetLookup == null) { _joinableFleetLookup = new Dictionary<int, FleetCmdModel>(); } if (_disbandRefitBaseLookup == null) { _disbandRefitBaseLookup = new Dictionary<int, AUnitBaseCmdModel>(); } _ctxObject.contextMenu = _shipMenu; EventDelegate.Add(_ctxObject.onShow, OnContextMenuShow); EventDelegate.Add(_ctxObject.onSelection, OnContextMenuSelection); EventDelegate.Add(_ctxObject.onHide, OnContextMenuHide); }
private void PopulateSubMenus() { //D.Log("ShipMenu.items length = {0}.", _shipMenu.items.Length); foreach (var order in _shipMenuOrders) { int orderItemID = _shipMenuOrders.IndexOf(order); CtxMenu subMenu = _subMenuLookup[order]; switch (order) { case ShipDirective.Join: //D.Log("JoinFleet order ID = {0}.", orderItemID); FleetCmdModel[] joinableFleets = FindObjectsOfType<FleetCmdModel>().Where(f => f.Owner.IsPlayer).Except(Presenter.Model.UnitCommand as FleetCmdModel).ToArray(); var joinFleetSubmenuItemCount = joinableFleets.Length; if (joinFleetSubmenuItemCount > Constants.Zero) { var joinFleetItem = _shipMenu.items[orderItemID]; joinFleetItem.isSubmenu = true; joinFleetItem.submenu = subMenu; var joinFleetSubmenuItems = new CtxMenu.Item[joinFleetSubmenuItemCount]; for (int i = 0; i < joinFleetSubmenuItemCount; i++) { joinFleetSubmenuItems[i] = new CtxMenu.Item(); joinFleetSubmenuItems[i].text = joinableFleets[i].Data.ParentName; int subMenuItemId = i + _lowestUnusedItemId; // submenu item IDs can't interfere with IDs already assigned joinFleetSubmenuItems[i].id = subMenuItemId; _joinableFleetLookup.Add(subMenuItemId, joinableFleets[i]); //D.Log("{0}.submenu ID {1} = {2}.", Presenter.FullName, joinFleetSubmenuItems[i].id, joinFleetSubmenuItems[i].text); } subMenu.items = joinFleetSubmenuItems; //joinFleetItem.submenuItems = joinFleetSubmenuItems; // removed in Contextual1.2.9 to fix Unity Serialization Depth error msg int lastUsedSubMenuID = _lowestUnusedItemId + joinFleetSubmenuItemCount - 1; _subMenuOrderLookup.Add(new ValueRange<int>(_lowestUnusedItemId, lastUsedSubMenuID), order); _lowestUnusedItemId = lastUsedSubMenuID + 1; } else { _shipMenu.items[orderItemID].isDisabled = true; } break; case ShipDirective.Disband: //TODO case ShipDirective.Refit: //TODO D.Warn("{0} is not yet implemented.", order.GetValueName()); break; case ShipDirective.None: default: throw new NotImplementedException(ErrorMessages.UnanticipatedSwitchValue.Inject(order)); } } }
protected void FillMenuItems(CtxMenu.Item[] items) { items[0].text = "Small"; items[0].isCheckable = true; items[0].mutexGroup = 0; items[0].id = (int)MenuCommands.Small; items[1].text = "Medium"; items[1].isCheckable = true; items[1].mutexGroup = 0; items[1].id = (int)MenuCommands.Medium; items[2].text = "Large"; items[2].isCheckable = true; items[2].mutexGroup = 0; items[2].id = (int)MenuCommands.Large; float s = transform.localScale.x; if (s < 1f) { items[0].isChecked = true; } else if (s > 1f) { items[2].isChecked = true; } else { items[1].isChecked = true; } items[3].isSeparator = true; items[4].text = "Color Scheme"; items[4].isSubmenu = true; items[4].submenu = colorSubmenu; if (submenuItems == null) { submenuItems = new CtxMenu.Item[5]; for (int i = 0; i < 5; i++) { submenuItems[i] = new CtxMenu.Item(); } } #if CTX_NO_SERIALIZATION_FIX items[4].submenuItems = submenuItems; #else colorSubmenu.items = submenuItems; #endif int matID = FindMaterialIndex(); for (int i = 0; i < 5; i++) { submenuItems[i].isCheckable = true; submenuItems[i].mutexGroup = 0; submenuItems[i].id = (int)MenuCommands.ColorScheme1 + i; if (i == matID) { submenuItems[i].isChecked = true; } } submenuItems[0].text = "Mirage"; submenuItems[1].text = "Vinyard"; submenuItems[2].text = "Sunset"; submenuItems[3].text = "Holly"; submenuItems[4].text = "Embers"; }
protected virtual void PopulateMenu_UserRemoteFleetIsSelected() { // IMPROVE temp virtual to allow SectorCtxControl to override var topLevelMenuItems = new List<CtxMenu.Item>(); var selectedItemDistanceLabel = CreateRemoteSelectedItemDistanceLabel(); topLevelMenuItems.Add(selectedItemDistanceLabel); foreach (var directive in UserRemoteFleetDirectives) { int topLevelItemID = _nextAvailableItemId; var topLevelItem = new CtxMenu.Item() { text = TopLevelMenuItemTextFormat.Inject(directive.GetValueName()), id = topLevelItemID }; topLevelMenuItems.Add(topLevelItem); _directiveLookup.Add(topLevelItemID, directive); _nextAvailableItemId++; topLevelItem.isDisabled = IsUserRemoteFleetMenuItemDisabledFor(directive); } _ctxObject.menuItems = topLevelMenuItems.ToArray(); }