public async void Play() { this.State = GameState.InProgress; this.Units = new List <Character>(); bool notifiedEnding = false; while (this.State != GameState.Delete) { GameController.UpdateUnitsFor(this.Id, this.Units); List <Player> playerData = new List <Player>() { this.Player1, this.Player2 }; GameController.UpdatePlayersFor(this.Id, playerData); if (this.State == GameState.InProgress) { this.Player1.GetMoney(); this.Player2.GetMoney(); } for (var i = 0; i < this.Units.Count; i++) { var unit = this.Units[i]; if (unit.Dead) { if (unit.Side == 1) { Player1.AddStats(unit); } else { Player2.AddStats(unit); } this.Units.Remove(unit); } if (unit.X < -100 || unit.X > 1600) { this.Units.Remove(unit); } } for (var i = 0; i < this.Units.Count; i++) { this.Units[i].Update(); } if (this.Units.Count > 0) { this.CheckForCollisions(); } if (this.State >= GameState.Ended) { if (!notifiedEnding) { if (this.Player1.Castle.Dead) { GameController.EndGame(this.Id, 2); } else { GameController.EndGame(this.Id, 1); } for (var i = 0; i < this.Units.Count; i++) { this.Units[i].Damage = 0; } notifiedEnding = true; } } this.Shop.Refresh(); this.Tick++; if (!this.Multiplayer) { this.CheckComputerUnit(); this.CheckComputerIntervals(); } await Task.Delay(100); } }