/// <summary> /// Initializes a new instance of the <see cref="CommandConsole"/> class. /// </summary> /// <param name="font"></param> /// <param name="parent">The parent.</param> /// <param name="assemblies">The assemblies containing commands and options to add to this <see cref="CommandConsole"/> instance.</param> /// <param name="game"></param> public CommandConsole(Game game, SpriteFont font, Control parent, params Assembly[] assemblies) : base(parent) { _engine = new CommandEngine(assemblies); _writer = new ConsoleWriter(this); PresentationParameters pp = game.GraphicsDevice.PresentationParameters; SetSize(0, pp.BackBufferHeight / 3); SetPoint(Points.Top, 0, 5); SetPoint(Points.Left, 5, 0); SetPoint(Points.Right, -5, 0); Strata = new ControlStrata() { Layer = Layer.Overlay, Offset = 100 }; FocusPriority = int.MaxValue; LikesHavingFocus = false; IsVisible = false; RespectSafeArea = true; ToggleKey = Keys.Oem8; //var font = Content.Load<SpriteFont>(game, "Consolas"); //skin = Content.Load<Skin>(game, "Console"); //skin.BackgroundColour = new Color(1f, 1f, 1f, 0.8f); _background = new Texture2D(game.GraphicsDevice, 1, 1); _background.SetData(new Color[] { Color.Black }); _textBox = new TextBox(this, game, font, "Command Console", "Enter your command"); _textBox.SetPoint(Points.Bottom, 0, -3); _textBox.SetPoint(Points.Left, 3, 0); _textBox.SetPoint(Points.Right, -3, 0); _textBox.FocusPriority = 1; _textBox.FocusedChanged += c => { if (c.IsFocused) _textBox.BeginTyping(PlayerIndex.One); }; _textBox.IgnoredCharacters.Add('`'); _log = new TextLog(this, font, (int)(3 * Area.Height / (float)font.LineSpacing)); _log.SetPoint(Points.TopLeft, 3, 3); _log.SetPoint(Points.TopRight, -3, 3); _log.SetPoint(Points.Bottom, 0, 0, _textBox, Points.Top); _log.WriteLine("Hello world"); _tabCompletion = new Label(this, font); _tabCompletion.SetSize(300, 0); _tabCompletion.SetPoint(Points.TopLeft, 3, 6, this, Points.BottomLeft); _infoBox = new Label(this, font); _infoBox.SetPoint(Points.TopRight, -3, 6, this, Points.BottomRight); AreaChanged += c => _infoBox.SetSize(Math.Max(0, c.Area.Width - 311), 0); _commandStack = new CommandStack(_textBox, Gestures); BindGestures(); Gestures.BlockedDevices.Add(typeof(KeyboardDevice)); }
public CommandStack(TextBox textBox, GestureGroup gestures) { if (textBox == null) throw new NullReferenceException("textBox"); _textBox = textBox; gestures.Bind((GestureHandler<IGesture>) OnPreviousCommand, new KeyPressed(Keys.Up)); gestures.Bind((GestureHandler<IGesture>) OnNextCommand, new KeyPressed(Keys.Down)); }