private void Update() { switch (_states) { case States.MenuState: MenuTrigger?.Invoke(); break; case States.GameState: GameTrigger?.Invoke(); break; case States.PauseState: PauseTrigger?.Invoke(); break; case States.GameOverState: GameOverTrigger?.Invoke(); break; case States.None: break; default: break; } }
void AutoCompleteTextBox_TextChanged(object sender, TextChangedEventArgs e) { CheckIfTriggered(); Rect position = this.GetRectFromCharacterIndex(this.SelectionStart - 1, true); if (_isTriggered) { popupMenu.Commands.Clear(); string searchStr = this.Text.Substring(_triggerLocation, _triggerDistance) .TrimStart(MenuTrigger.ToCharArray()[0]); IEnumerable <string> items = _dictionary.Where(f => f.StartsWith(searchStr)).Take <string>(6); foreach (var item in items) { popupMenu.Commands.Add(new UICommand(item, (IUICommand command) => { var oldSelectionStart = this.SelectionStart; string remainder = command.Label.Substring(searchStr.Length); var newSelectionStart = oldSelectionStart + remainder.Length; this.Text = this.Text.Insert(this.SelectionStart, remainder); this.SelectionStart = newSelectionStart; _triggerLocation = 0; _triggerDistance = 1; })); } var transform = this.TransformToVisual((UIElement)this.Parent); var point = transform.TransformPoint(new Point(position.Left, position.Bottom)); try { popupMenu.ShowForSelectionAsync(new Rect(point, point), Placement.Below).AsTask(); } catch (InvalidOperationException ex) { } } }
private void CheckIfTriggered() { if (this.SelectionStart > 0) { if (!_isTriggered) { _isTriggered = this.Text.Substring(this.SelectionStart - _triggerDistance, 1).EndsWith(MenuTrigger.ToString()); if (_isTriggered) { _triggerLocation = this.SelectionStart - _triggerDistance; } } else { _isTriggered = !this.Text.Substring(this.SelectionStart - 1, 1).Equals(" "); if (_isTriggered) { _triggerDistance = this.SelectionStart - _triggerLocation; } else { _triggerLocation = 0; _triggerDistance = 1; } } } }
//- Constructors public Menu(XmlNode menuNode) { Title = menuNode.Attributes["title"].Value; Options = new Dictionary <string, Tuple <string, IMenuItem, string> >(); foreach (XmlNode menuItem in menuNode.ChildNodes) { if (menuItem.Name == "menu") { SubMenu newSubMenu = new SubMenu(menuItem, this); Options[menuItem.Attributes["title"].Value] = new Tuple <string, IMenuItem, string>(newSubMenu.Text, newSubMenu, newSubMenu.Image); } else if (menuItem.Name == "menu_option") { MenuOption newMenuOption = new MenuOption(menuItem, this); Options[menuItem.Attributes["name"].Value] = new Tuple <string, IMenuItem, string>(newMenuOption.Text, newMenuOption, newMenuOption.Image); } else if (menuItem.Name == "menu_trigger") { MenuTrigger newMenuOption = new MenuTrigger(menuItem, this); Options[menuItem.Attributes["name"].Value] = new Tuple <string, IMenuItem, string>(newMenuOption.Text, newMenuOption, newMenuOption.Image); } } }
/** * Checks if there is any context menu around to open */ private GameObject checkContextMenu() { GameObject[] objs = GameObject.FindGameObjectsWithTag("Context Menu"); GameObject closest = null; float closestDist = float.MaxValue; foreach (GameObject obj in objs) { if (closest == null) // to have something to compare with { closest = obj; closestDist = Vector3.Distance(transform.position, obj.transform.position); } // Get the distance float compareDist = Vector3.Distance(transform.position, obj.transform.position); if (compareDist < closestDist) // compare and overwrite it { closest = obj; closestDist = compareDist; } } if (debugDraws) { Debug.DrawLine(transform.position, closest.transform.position, Color.red, 2f, false); } MenuTrigger trigger = closest.GetComponent <MenuTrigger>(); if (trigger != null && closestDist <= trigger.triggerDistance) // trigger tells the trigger distance { trigger.TriggerMenu(); playerInput = false; // audioSource.PlayOneShot (openChest); // Debug.Log ("Chest opened"); } else if (trigger == null) { Debug.Log("Trigger -> null"); } return(closest); }