//Обработка события передвижения у контроллера public void OnMove(object sender, KeyboardControllerEventArgs args) { switch (args.Key) { //Проверка границ и передвижение координат case ConsoleKey.UpArrow: if (this.PositionY > 0) { this.args.NewStatePosY--; } break; case ConsoleKey.DownArrow: if (this.PositionY < GameField.MaxHeight) { this.args.NewStatePosY++; } break; } //Если границы допускают передвижение то меняем положение оригинала и сообщаем отрисовщику if (this.args.NewStatePosY != this.PositionY) { this.PositionX = this.args.NewStatePosX; this.PositionY = this.args.NewStatePosY; if (this.move != null) { this.move(this, this.args); } } }
//Действия на выход public void OnExit(object sender, KeyboardControllerEventArgs args) { //Если был нажат esc то игрок вышел if (args.Key == ConsoleKey.Escape) { //Устаналиваем аргумент жизни в false this.args.IsAlive = false; } //Оповещаем подписчиков на событии выход игрока this.exit?.Invoke(this, this.args); //Устанавливаем флаг завершения игры GameField.IsEndGame = true; //Удаляем всех подписчиков this.exit = this.move = this.shoot = null; }
//Действия на выстрел public void OnShoot(object sender, KeyboardControllerEventArgs args) { this.shoot(this, this.args); }