Пример #1
0
        /// <summary>
        /// initialise the first game with the initial player
        /// </summary>
        /// <param name="initialClient">the first player</param>
        public Game(Client initialClient)
        {
            gameId = Guid.NewGuid();
            initialClient.SetGameId(gameId);

            commandManager = new CommandManager(this);
            spawnManager   = new SpawnManager(commandManager);

            PlayerSpawnLocation spawn = spawnManager.GetPlayerSpawnLocation();
            Player initialPlayer      = new Player(initialClient, spawn.x, spawn.y, spawn.z, spawn.rotationX, spawn.rotationY, spawn.rotationZ);

            worldObjects.Add(initialPlayer);
            gameName = initialClient.username + "'s Game";



            //subscribes commandmanager and client to each other
            initialClient.Subscribe(commandManager);
            commandManager.Subscribe(initialClient);

            commandManager.InitializePlayer(initialPlayer);

            gameThread = new Thread(TickTimer);
            gameThread.Start();

            gameTimer           = new Timer();
            gameTimer.Interval  = 1000;
            gameTimer.AutoReset = true;
            gameTimer.Elapsed  += (v, e) => GameTimerElapsed();
            gameTimer.Start();
        }
Пример #2
0
        /// <summary>
        /// handle updateplayer commands from clients
        /// </summary>
        /// <param name="uPlayer">a command message contiaing details about hte player/client</param>
        public void PlayerUpdateHandler(UpdatePlayerCommand uPlayer)
        {
            List <Object3D> worldObjects = game.getWorldObjects();
            List <Object3D> deleteCueue  = new List <Object3D>();

            for (int i = 0; i < worldObjects.Count; i++)
            {
                if (worldObjects[i] == null)
                {
                    continue;
                }
                else if (worldObjects[i] is Player)
                {
                    if (worldObjects[i].guid == uPlayer.playerGuid)
                    {
                        if (uPlayer.y > -100)
                        {
                            worldObjects[i].Move(uPlayer.x, uPlayer.y, uPlayer.z);
                            worldObjects[i].Rotate(uPlayer.rotationX, uPlayer.rotationY, uPlayer.rotationZ);
                            deleteCueue = CheckForPickup(uPlayer, worldObjects[i]);
                            for (int j = 0; j < deleteCueue.Count; j++)
                            {
                                if (worldObjects.Contains(deleteCueue[j]))
                                {
                                    worldObjects.Remove(deleteCueue[j]);
                                }
                            }
                            deleteCueue.Clear();
                            UpdateObjectCommand cmd = new UpdateObjectCommand(worldObjects[i]);
                            SendCommandsToObservers(cmd);
                        }
                        else
                        {
                            PlayerSpawnLocation respawnLocation = playerSpawnList.GetSpawnLocation();
                            DeathCommand        cmd             = new DeathCommand((Player)worldObjects[i], respawnLocation);
                            ((Player)worldObjects[i]).addDeath();
                            UpdatePlayerStatsCommand cmd2 = new UpdatePlayerStatsCommand((Player)worldObjects[i]);
                            SendCommandsToObservers(cmd);
                            SendCommandsToObservers(cmd2);
                        }
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        /// adds a new player to the game
        /// </summary>
        /// <param name="newClient">the new player</param>
        /// <returns></returns>
        public bool AddPlayer(Client newClient)
        {
            if (GetPlayerCount() < 7)
            {
                PlayerSpawnLocation spawn = spawnManager.GetPlayerSpawnLocation();
                Player newPlayer          = new Player(newClient, spawn.x, spawn.y, spawn.z, spawn.rotationX, spawn.rotationY, spawn.rotationZ);
                worldObjects.Add(newPlayer);

                //subscribes commandmanager and client to each other
                newClient.Subscribe(commandManager);
                commandManager.Subscribe(newClient);
                commandManager.InitializePlayer(newPlayer);
                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #4
0
        /// <summary>
        /// handlees hit messages from clients and determines if one scored a kill or died
        /// </summary>
        /// <param name="hit">a hitcommand containing detail about a hit</param>
        public void HitHandler(HitCommand hit)
        {
            List <Object3D> worldObjects   = game.getWorldObjects();
            Player          hitPlayer      = null;
            Player          shootingPlayer = null;

            foreach (Object3D obj in worldObjects)
            {
                if (obj is Player)
                {
                    if (obj.guid == hit.hitPlayerGuid)
                    {
                        hitPlayer = (Player)obj;
                    }
                    else if (obj.guid == hit.shootingPlayerGuid)
                    {
                        shootingPlayer = (Player)obj;
                    }
                }
            }

            if (hitPlayer.DoDamage(hit.damage))
            {
                shootingPlayer.addKill();
                PlayerSpawnLocation      respawnLocation = playerSpawnList.GetSpawnLocation();
                DeathCommand             cmd             = new DeathCommand(hitPlayer, respawnLocation);
                UpdatePlayerStatsCommand cmd2            = new UpdatePlayerStatsCommand(shootingPlayer);
                SendCommandsToObservers(cmd);
                SendCommandsToObservers(cmd2);
            }
            else
            {
                UpdatePlayerStatsCommand cmd = new UpdatePlayerStatsCommand(hitPlayer);
                SendCommandsToObservers(cmd);
            }
        }
Пример #5
0
 public DeathCommand(Player deadPlayer, PlayerSpawnLocation spawnLocation) : base("DeathCommand")
 {
     this.deadPlayer    = deadPlayer;
     this.spawnLocation = spawnLocation;
 }