private static void UpdateFromGameState(UpdateRequest state) { Players.Clear(); Players.AddRange(state.Players); LightPlayer lightPlayer = Players[Player.ID]; if (lightPlayer.Deaths != Player.Deaths) { Player.Deaths = lightPlayer.Deaths; Sounds.PlayShort("pop"); } if (lightPlayer.Score != Player.Score) { Player.Score = lightPlayer.Score; Sounds.PlayShort("tic"); } Player.HasRespawned = lightPlayer.HasRespawned; if (lightPlayer.ReSpawn) { Respawn(); Player.HasRespawned = true; } if (state.Shots == null) { return; } for (int i = 0; i < state.Shots.Length; ++i) { LightShot shot = state.Shots[i]; if (ShotLog.Contains(shot.ID)) { continue; } ShotLog.Add(shot.ID); Sounds.PlayShort("shot"); Color color = new Color(255, 220, 200, 255); VertexArray line = new VertexArray(PrimitiveType.Lines); line.Append(new Vertex( Geometry.AdaptPoint(new Vector2f(shot.Origin.X, shot.Origin.Y)), color )); line.Append(new Vertex( Geometry.AdaptPoint(new Vector2f(shot.Dest.X, shot.Dest.Y)), color )); Screen.Echoes.Add(line); } }
public void HandleHitResponse(GameResponse gameResponse = null) { if (gameResponse == null) { return; } GameResponse response = gameResponse == null?dummy.GetHitResponseDummyData() : gameResponse; ShotLog shotLog = new ShotLog() { coordinate = gameResponse.coordinates, hit = gameResponse.hit }; StaticResources.log.shotLog.Add(shotLog); Player player = StaticResources.PlayerList.Where(p => p.PlayerId == response.playerId).FirstOrDefault(); string newstring = _placeholderShotReponse.Replace("{player}", player.name) .Replace("{field}", response.coordinates.field.ToString()) .Replace("{row}", response.coordinates.row.ToString()) .Replace("{col}", response.coordinates.col.ToString()) .Replace("{hit}", response.hit ? "landed a hit" : "missed"); WriteMessageToLog(newstring); if (player.PlayerId == StaticResources.user.PlayerId) { if (response.hit == true) //highscore bijhouden { StaticResources.records.hits += 1; StaticResources.records.currenctHitStreak += 1; if (StaticResources.records.currenctHitStreak > StaticResources.records.highestHitStreak) { StaticResources.records.highestHitStreak = StaticResources.records.currenctHitStreak; } } else { StaticResources.records.currenctHitStreak = 0; } } // start gameover function if player is gameover if (response.gameOver) { HandleGameOver(response.senderId); } }
private void HandleGameOver(int playerId, IPlayerField field = null) { var player = StaticResources.PlayerList.FirstOrDefault(Speler => Speler.PlayerId == playerId); string logEntry = "All boats of {player} have been destroyed"; logEntry = logEntry.Replace("{player}", player.name); WriteMessageToLog(logEntry); player.GameOver = true; CheckforHighscoreUpdate(player); if (field != null) { // display all boats in field as sunk // store all ship coordinates as GameResponse hit = true foreach (var boat in field.boats) { foreach (var coordinate in boat.coordinates) { ShotLog shotLog = new ShotLog() { coordinate = coordinate, hit = true }; StaticResources.log.shotLog.Add(shotLog); } } } int count = StaticResources.PlayerList.Where(p => p.GameOver == false).Count(); if (count == 1) { TimerHandler.ResetHandler(); player = StaticResources.PlayerList.FirstOrDefault(Speler => Speler.GameOver == false); StaticResources.log.winner = player.name; string message = player.name + " has won the game"; WriteMessageToLog(message); CheckforHighscoreUpdate(player); } }