Пример #1
0
        /// <summary>
        /// Seareches for the available respawn quarter for the given playerDefaultGuns.
        /// </summary>
        /// <param name="quarterOwner">The given player that has to be respawned</param>
        /// <param name="gameTime">Game time</param>
        /// <returns>Quarter where the given player can be respawned</returns>
        TownQuarter FindAndRespawnQuartersFor(ITownQuarterOwner quarterOwner, GameTime gameTime)
        {
            TownQuarter newPosQuarter = null;
            IOrderedEnumerable <TownQuarter> randomizedQuarters = from q in town.Quarters where q.Owner == quarterOwner || q.Owner == EmptyTownQuarterOwner.Instance orderby random.Next() select q;

            foreach (TownQuarter quarter in town.Quarters)
            {
                if (quarter.Owner == quarterOwner)
                {
                    if (newPosQuarter == null)
                    {
                        newPosQuarter = quarter;
                    }
                    else
                    {
                        quarter.SetOwner(EmptyTownQuarterOwner.Instance, gameTime);
                    }
                }
            }
            if (newPosQuarter == null)
            {
                newPosQuarter = randomizedQuarters.First();
            }
            return(newPosQuarter);
        }
Пример #2
0
 /// <summary>
 /// Sets the new owner of the quarter.
 /// </summary>
 /// <param name="newOwner">The new owner</param>
 /// <param name="gameTime">Game time</param>
 public void SetOwner(ITownQuarterOwner newOwner, GameTime gameTime)
 {
     lastTimeGuardAdded = gameTime.TotalGameTime;
     owner = newOwner;
     roadSignTexture.Dispose();
     GenerateRoadSignPicture();
     foreach (Plate roadSign in roadSignsPointingToMe)
     {
         roadSign.SetFront(roadSignTexture, true);
     }
     flag.SetModel(owner.Content.FlagModel, game.Drawer.WorldTransformMatrix);
     ownershipBeginTime = gameTime.TotalGameTime;
     if (boxes.Count == 0)
     {
         AddBoxesDuringTheGame();
     }
 }
Пример #3
0
        /// <summary>
        /// Creates new town quarter as map fragment. Generates roads, buildings, etc.
        /// </summary>
        /// <param name="size">Size of quarter without joining interface</param>
        /// <param name="degree">Number of quarter's interfaces (joining streets)</param>
        public TownQuarter(ActionGame game, Vector2 size, int degree)
        {
            owner = EmptyTownQuarterOwner.Instance;

            this.game  = game;
            interfaces = new List <TownQuarterInterface>(degree);
            if (nameRepository.Count > 0)
            {
                Random rand      = new Random();
                int    nameIndex = rand.Next(0, nameRepository.Count - 1);
                Name = nameRepository[nameIndex];
                nameRepository.RemoveAt(nameIndex);
            }
            else
            {
                Name = emptyName;
            }

            int xSize = (int)Math.Floor(size.X / SquareWidth);
            int ySize = (int)Math.Floor(size.Y / SquareWidth);

            bitmapSize = new System.Drawing.Size(xSize, ySize);
            mapBitmap  = new MapFillType[bitmapSize.Width * bitmapSize.Height];
            for (int i = 0; i < mapBitmap.Length; i++)
            {
                mapBitmap[i] = MapFillType.Empty;
            }
            spaceGrid = new Grid(bitmapSize.Width, bitmapSize.Height, GridFiledWidth, GridFiledWidth);

            try
            {
                Generate(degree);
            }
            catch (Exception ex)
            {
                if (Name != emptyName)
                {
                    nameRepository.Add(Name);
                }
                throw ex;
            }
            spaceGrid.Fill(GetAllSolidObjects());
        }
Пример #4
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            if (running)
            {
                base.Update(gameTime);
                Debug.Write("UPS", 1d / gameTime.ElapsedGameTime.TotalSeconds);

                // Allows the game to exit
                if (Keyboard.GetState().IsKeyDown(Keys.Escape))
                {
                    this.Restart();
                    return;
                }
                bool opponentInTheSameQuarter = opponent.Position.Quarter == town.CurrentQuarter;
                if (!opponentInTheSameQuarter)
                {
                    opponent.Position.Quarter.Update(gameTime, true);
                }
                if (town.SecondaryDrawnQuarter != null && town.SecondaryDrawnQuarter != opponent.Position.Quarter && town.SecondaryDrawnQuarter != player.Position.Quarter && !gameTime.IsRunningSlowly)
                {
                    town.SecondaryDrawnQuarter.Update(gameTime, false);
                }
                opponent.Update(gameTime, !opponentInTheSameQuarter);
                player.Update(gameTime);

                ITownQuarterOwner owner = town.Quarters[0].Owner;

                if ((owner == player || owner == opponent) && town.Quarters.All(q => q.Owner == owner))
                {
                    System.Drawing.Bitmap townMap = town.CreateTownMapImage();
                    PrepareEnd();
                    bool playAgain;
                    using (GameOver gameOver = new GameOver(owner == player, townMap))
                    {
                        System.Windows.Forms.DialogResult result = gameOver.ShowDialog();
                        playAgain = result != System.Windows.Forms.DialogResult.Cancel;
                    }
                    townMap.Dispose();
                    if (playAgain)
                    {
                        ShowMainMenuDialog(false);
                        PrepareStart();
                    }
                    else
                    {
                        Exit();
                    }
                    return;
                }

                if (player.Health <= 0)
                {
                    TownQuarter newQuarter = FindAndRespawnQuartersFor(player, gameTime);
                    player.RespawnInto(newQuarter);
                    drawer.ShowMessage(gameTime, String.Format("You were killed! You are now in {0}.", newQuarter.Name));
                    town.CurrentQuarter = newQuarter;
                    drawer.ShowFullscreenEffect(gameTime, contentRepository.RespawnFullscreenEffect, Player.RespawnFullscreenEffectDuration);
                }
                if (opponent.Health <= 0)
                {
                    TownQuarter newQuarter = FindAndRespawnQuartersFor(opponent, gameTime);
                    opponent.RespawnInto(newQuarter);
                    opponent.ClearTasks();
                    drawer.ShowMessage(gameTime, String.Format("Congratulations, your opponent was killed. He respawned in {0}.", newQuarter.Name));
                }
            }
        }
Пример #5
0
 /// <summary>
 /// Sets the new owner of the quarter.
 /// </summary>
 /// <param name="newOwner">The new owner</param>
 /// <param name="gameTime">Game time</param>
 public void SetOwner(ITownQuarterOwner newOwner, GameTime gameTime)
 {
     lastTimeGuardAdded = gameTime.TotalGameTime;
     owner = newOwner;
     roadSignTexture.Dispose();
     GenerateRoadSignPicture();
     foreach (Plate roadSign in roadSignsPointingToMe)
     {
         roadSign.SetFront(roadSignTexture, true);
     }
     flag.SetModel(owner.Content.FlagModel, game.Drawer.WorldTransformMatrix);
     ownershipBeginTime = gameTime.TotalGameTime;
     if (boxes.Count == 0)
     {
         AddBoxesDuringTheGame();
     }
 }
Пример #6
0
        /// <summary>
        /// Creates new town quarter as map fragment. Generates roads, buildings, etc.
        /// </summary>
        /// <param name="size">Size of quarter without joining interface</param>
        /// <param name="degree">Number of quarter's interfaces (joining streets)</param>
        public TownQuarter(ActionGame game, Vector2 size, int degree)
        {
            owner = EmptyTownQuarterOwner.Instance;

            this.game = game;
            interfaces = new List<TownQuarterInterface>(degree);
            if (nameRepository.Count > 0)
            {
                Random rand = new Random();
                int nameIndex = rand.Next(0, nameRepository.Count - 1);
                Name = nameRepository[nameIndex];
                nameRepository.RemoveAt(nameIndex);
            }
            else
            {
                Name = emptyName;
            }

            int xSize = (int)Math.Floor(size.X / SquareWidth);
            int ySize = (int)Math.Floor(size.Y / SquareWidth);
            bitmapSize = new System.Drawing.Size(xSize, ySize);
            mapBitmap = new MapFillType[bitmapSize.Width * bitmapSize.Height];
            for (int i = 0; i < mapBitmap.Length; i++)
                mapBitmap[i] = MapFillType.Empty;
            spaceGrid = new Grid(bitmapSize.Width, bitmapSize.Height, GridFiledWidth, GridFiledWidth);

            try
            {
                Generate(degree);
            }
            catch (Exception ex)
            {
                if (Name != emptyName)
                {
                    nameRepository.Add(Name);
                }
                throw ex;
            }
            spaceGrid.Fill(GetAllSolidObjects());
        }
Пример #7
0
 /// <summary>
 /// Seareches for the available respawn quarter for the given playerDefaultGuns.
 /// </summary>
 /// <param name="quarterOwner">The given player that has to be respawned</param>
 /// <param name="gameTime">Game time</param>
 /// <returns>Quarter where the given player can be respawned</returns>
 TownQuarter FindAndRespawnQuartersFor(ITownQuarterOwner quarterOwner, GameTime gameTime)
 {
     TownQuarter newPosQuarter = null;
     IOrderedEnumerable<TownQuarter> randomizedQuarters = from q in town.Quarters where q.Owner == quarterOwner || q.Owner == EmptyTownQuarterOwner.Instance orderby random.Next() select q;
     foreach (TownQuarter quarter in town.Quarters)
     {
         if (quarter.Owner == quarterOwner)
         {
             if (newPosQuarter == null)
             {
                 newPosQuarter = quarter;
             }
             else
             {
                 quarter.SetOwner(EmptyTownQuarterOwner.Instance, gameTime);
             }
         }
     }
     if (newPosQuarter == null)
     {
         newPosQuarter = randomizedQuarters.First();
     }
     return newPosQuarter;
 }