Пример #1
0
        private void SendMapData(MapData map)
        {
            var packet = new MapDataPacket(map.width, map.height, map.tiles);

            for (var i = 0; i < players.Count; i++)
            {
                players[i].client.Send(packet);
            }
        }
Пример #2
0
        private void Client_Received(Client client, IPacket packet)
        {
            switch (packet.Type)
            {
            case PacketType.Unknown:
                break;

            case PacketType.Ping:
                var pong = (PingPacket)packet;

                pong.contents = "PONG";

                client.Send(pong);

                infoLog.AddEntry(EntryType.Message, string.Format("responding to ping at {0}", DateTime.Now.ToLongTimeString()));
                break;

            case PacketType.PlayerData:
                if (players.Count == 2)
                {
                    players.Clear();
                }

                var playerData = (PlayerDataPacket)packet;

                players.Add(playerData);
                break;

            case PacketType.MapData:
                map = (MapDataPacket)packet;

                infoLog.AddEntry(EntryType.Message, "got map data from server...");
                break;

            case PacketType.ProjectilePacket:
                var projectilePacket = (ProjectilePacket)packet;

                if (projectilePacket.destroyed)
                {
                    projectiles.Remove(projectiles.First(p => p.id == projectilePacket.pid));
                }
                else
                {
                    var projectile = new Projectile();

                    projectile.x    = projectilePacket.x;
                    projectile.y    = projectilePacket.y;
                    projectile.velx = projectilePacket.velx;
                    projectile.vely = projectilePacket.vely;
                    projectile.id   = projectilePacket.pid;

                    var guid = Guid.Parse(projectilePacket.ownerGuid);

                    if (guid == client.Guid)
                    {
                        projectile.color = Color.Green;
                    }
                    else
                    {
                        projectile.color = Color.Red;
                    }

                    projectiles.Add(projectile);
                }
                break;

            case PacketType.RoundStatus:
                break;

            case PacketType.GameStatus:
                break;

            case PacketType.Authentication:
                var authentication = (AuthenticationPacket)packet;

                client.Guid             = Guid.Parse(authentication.guid);
                authentication.response = string.Format("NAME:{0}", Configuration.Name);

                infoLog.AddEntry(EntryType.Message, "responding to authentication request...");

                client.Send(authentication);
                break;

            case PacketType.ServerStatus:
                serverState = (ServerStatusPacket)packet;
                break;

            case PacketType.Message:
                var message = (MessagePacket)packet;

                if (message.contents.StartsWith("found an opponent"))
                {
                    gameState          = GameState.WaitingForGameplay;
                    waitDisplayStrings = message.contents.Split('\n');
                    waitElapsed        = 3000;
                }

                infoLog.AddEntry(EntryType.Message, "joined match!");
                break;

            case PacketType.GameEnd:
                var gameEnd = (GameEndPacket)packet;

                gameState         = GameState.GameEnd;
                returnToLobbyTime = 7500;
                gameEndDisplayStr = gameEnd.contents;
                break;

            default:
                break;
            }
        }
Пример #3
0
        public void OnGenerateMapExecute()
        {
            if (seed <= 0)
            {
                var seedGeneration = new Random();
                Seed = seedGeneration.Next().ToString();
            }
            Random r = new Random(seed);

            var townOptions   = new FractalOptions(townSmallScale, townLargeScale);
            int n             = blocks;
            var popMap        = WrappingFractal.fractal(128, n, n, townOptions, FractalWrapMode.NoWrap, (uint)r.Next());
            var forestOptions = new FractalOptions(forestSmallScale, forestLargeScale);
            var forestMap     = WrappingFractal.fractal(128, n, n, forestOptions, FractalWrapMode.NoWrap, (uint)r.Next());;
            var forestLevels  = FractalUtility.getCutOffLevels(forestMap, new float[] { 100 - forestProportion, forestProportion });
            var bitmap        = new Bitmap(128 * n, 128 * n);
            var terrainMap    = new int[128 * n, 128 * n];

            for (int i = 0; i < bitmap.Width; i++)
            {
                for (int j = 0; j < bitmap.Height; j++)
                {
                    popMap[i, j] = popMap[i, j] - forestMap[i, j];
                }
            }
            var popLevels = FractalUtility.getCutOffLevels(popMap, new float[] { (100 - (forestProportion + townProportion)), townProportion });

            for (int i = 0; i < bitmap.Width; i++)
            {
                for (int j = 0; j < bitmap.Height; j++)
                {
                    popMap[i, j] = popMap[i, j] - popLevels[0];
                    if (popMap[i, j] < 0)
                    {
                        popMap[i, j] = 0;
                    }
                    var pop = (popMap[i, j] / (popLevels[1] - popLevels[0]));
                    if (forestMap[i, j] > forestLevels[0])
                    {
                        terrainMap[i, j] = 2;

                        /*forestMap[i, j] -= forestLevels[0];
                         * pop -= 1f;
                         * var g = (int)(255 * forestMap[i, j] / (forestLevels[1] - forestLevels[0]));
                         * bitmap.SetPixel(i, j, Color.FromArgb(0, 255, 0));*/
                    }
                    else if (pop > 0)
                    {
                        terrainMap[i, j] = 3;

                        /*var b = (int)(255 * pop);
                         * bitmap.SetPixel(i, j, Color.FromArgb(255, 0, 0));
                         */
                    }
                    else
                    {
                        terrainMap[i, j] = 1;
                        //bitmap.SetPixel(i, j, Color.FromArgb(255, 255, 255));
                    }
                    //popMap[i, j] = pop;
                }
            }
            var popCentres = Sanitize(ref terrainMap);

            MapData  = new MapDataPacket(terrainMap, popCentres);
            TownData = null;
        }