public void WithData_SerializedDeserialized_Success() { var target = ServerCurrentStateTransferMessage.Create() .AddDoor(3, 4) .SetExit(1, 2) .AddPlayer(43, 5, 6) .AddUnit(0, 3, 7, 8, 9); target.Map.Add(Base.Screens.RegionValue.Path); target.Map.Add(Base.Screens.RegionValue.Wall); var parser = TransferMessageParserUtils.FindWriter(target); Assert.IsTrue(parser.IsWritable(target)); var data = parser.Write(target); Console.WriteLine(data); var obj = (ServerCurrentStateTransferMessage)parser.Read(data); Assert.AreEqual(target.Doors.Count, obj.Doors.Count); Assert.AreEqual(target.Doors[0].X, obj.Doors[0].X); Assert.AreEqual(target.Doors[0].Y, obj.Doors[0].Y); Assert.AreEqual(target.Exit.X, obj.Exit.X); Assert.AreEqual(target.Exit.Y, obj.Exit.Y); Assert.AreEqual(target.Players.Count, obj.Players.Count); Assert.AreEqual(target.Players[0].PlayerId, obj.Players[0].PlayerId); Assert.AreEqual(target.Players[0].Units.Count, obj.Players[0].Units.Count); Assert.AreEqual(target.Players[0].Units[0].UnitId, obj.Players[0].Units[0].UnitId); Assert.AreEqual(target.Players[0].Units[0].Position.X, obj.Players[0].Units[0].Position.X); Assert.AreEqual(target.Players[0].Units[0].Position.Y, obj.Players[0].Units[0].Position.Y); Assert.AreEqual(target.Map.Count, obj.Map.Count); Assert.AreEqual(target.Map[0], obj.Map[0]); Assert.AreEqual(target.Map[1], obj.Map[1]); }
public static ServerCurrentStateTransferMessage BuildCurrentStateForPlayer(GameStateComponent gameState, Player player) { var result = ServerCurrentStateTransferMessage.Create(); var width = gameState.Map.GetLength(0); var height = gameState.Map.GetLength(1); for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { result.Map.Add(!IsVisible(player, gameState.Exit.X, gameState.Exit.Y, x, y) ? RegionValue.Unknown : gameState.Map[x, y]); } } var idx = 0; foreach (var statePlayer in gameState.Players.Values) { result.AddPlayer(statePlayer.PlayerId, statePlayer.LevelScore, statePlayer.TotalScore); for (var j = 0; j < statePlayer.Units.Count; j++) { var b = statePlayer.Units[j]; if (!IsVisible(player, gameState.Exit.X, gameState.Exit.Y, b.Position.X, b.Position.Y) && player.PlayerId != statePlayer.PlayerId) { continue; } result.AddUnit(idx, b.UnitId, b.Position.X, b.Position.Y, b.Hp); } idx++; } if (IsVisible(player, gameState.Exit.X, gameState.Exit.Y, gameState.Exit.X, gameState.Exit.Y)) { result.SetExit(gameState.Exit.X, gameState.Exit.Y); } for (var i = 0; i < gameState.Doors.Count; i++) { var door = gameState.Doors[i]; if (!IsVisible(player, gameState.Exit.X, gameState.Exit.Y, door.X, door.Y)) { continue; } result.AddDoor(door.X, door.Y); } return(result); }
public void WithoutData_SerializedDeserialized_Success() { var target = ServerCurrentStateTransferMessage.Create() .AddPlayer(43, 2, 3); var parser = TransferMessageParserUtils.FindWriter(target); Assert.IsTrue(parser.IsWritable(target)); var data = parser.Write(target); Console.WriteLine(data); var obj = (ServerCurrentStateTransferMessage)parser.Read(data); Assert.AreEqual(target.Doors, obj.Doors); Assert.AreEqual(target.Exit, obj.Exit); Assert.AreEqual(target.Players.Count, obj.Players.Count); Assert.AreEqual(target.Players[0].PlayerId, obj.Players[0].PlayerId); Assert.AreEqual(target.Players[0].Units, obj.Players[0].Units); Assert.AreEqual(target.Map, obj.Map); }