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]);
        }
예제 #2
0
        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);
        }