示例#1
0
 private void Draw_AugmentIcon(SpriteBatch spriteBatch, Unit unit, Vector2 unitPos, Texture2D unitTexture)
 {
     //draw an icon to show that the stats of the unit have been
     // augmented according to the player's chosen character's ability.
     if (unit.Augmented)
     {
         spriteBatch.Draw(augmentIcon,
                          position: unitPos + boardScaleVector / 2 * UiTools.BoundsToVector(unitTexture.Bounds) - uiScale / 2 * UiTools.BoundsToVector(augmentIcon.Bounds),
                          scale: uiScaleVector
                          );
     }
 }
示例#2
0
文件: BattleTurn.cs 项目: Skittss/Hex
 private void Draw_StepActionOverUnits(SpriteBatch spriteBatch, Unit unit, Vector2 unitDrawPos)
 {
     //Draw information about what action a unit is about to take - specifically textures drawn OVER units
     if (pendingAction != null)
     {
         if (pendingAction.IsAttack)
         {
             //draw attack information: sword slash over attacking unit, shield over defending unit.
             if (pendingAction.ActingUnit == unit)
             {
                 spriteBatch.Draw(actionLogTextures.attackIcon,
                                  position: unitDrawPos + boardScale / 2 * (UiTools.BoundsToVector(unit.GetSprite(unitSprites).Bounds) - UiTools.BoundsToVector(actionLogTextures.attackIcon.Bounds)),
                                  scale: boardScaleVector
                                  );
             }
             else if (pendingAction.TargetUnit == unit)
             {
                 spriteBatch.Draw(actionLogTextures.defenseIcon,
                                  position: unitDrawPos + boardScale / 2 * (UiTools.BoundsToVector(unit.GetSprite(unitSprites).Bounds) - UiTools.BoundsToVector(actionLogTextures.defenseIcon.Bounds)),
                                  scale: boardScaleVector
                                  );
             }
         }
         else if (pendingAction.IsMove)
         {
             //draw move information: target over the unit the moving unit is going towards.
             if (pendingAction.ActingUnit == unit)
             {
             }
             else if (pendingAction.TargetUnit == unit)
             {
                 spriteBatch.Draw(actionLogTextures.targetIcon,
                                  position: unitDrawPos + boardScale / 2 * (UiTools.BoundsToVector(unit.GetSprite(unitSprites).Bounds) - UiTools.BoundsToVector(actionLogTextures.targetIcon.Bounds)),
                                  scale: boardScaleVector
                                  );
             }
         }
         else if (pendingAction.IsNone)
         {
             //draw a big red cross! This unit can't perform an action in its current position.
             if (pendingAction.ActingUnit == unit)
             {
                 spriteBatch.Draw(actionLogTextures.noMoveIcon,
                                  position: unitDrawPos + boardScale / 2 * (UiTools.BoundsToVector(unit.GetSprite(unitSprites).Bounds) - UiTools.BoundsToVector(actionLogTextures.noMoveIcon.Bounds)),
                                  scale: boardScaleVector
                                  );
             }
         }
     }
 }
示例#3
0
        public override void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Begin(samplerState: SamplerState.PointClamp);

            graphicsDevice.Clear(Color.Black);

            Vector2 pos = WindowTools.PaddingToPixelCoordinate(0.5f, 0.4f, 0, 0) - (uiScale / 2 * UiTools.BoundsToVector(nextTurnPlayer.CharacterSprite.Bounds));

            spriteBatch.Draw(
                texture: boundary,
                position: pos - new Vector2(3 * uiScale, 0),
                scale: uiScaleVector,
                color: nextTurnPlayer.Colour
                );

            spriteBatch.Draw(
                texture: nextTurnPlayer.CharacterSprite,
                position: pos,
                scale: uiScaleVector);

            //draw pass turn button
            if (passTurnButton.IsHovered)
            {
                spriteBatch.Draw(texture: passTurnButton.HoverTexture, position: passTurnButton.Position, scale: passTurnButton.ScaleVector);
            }
            else
            {
                spriteBatch.Draw(texture: passTurnButton.ButtonTexture, position: passTurnButton.Position, scale: passTurnButton.ScaleVector);
            }

            spriteBatch.DrawString(
                bebasSmall,
                "Begin",
                passTurnButton.MidPoint - bebasSmall.MeasureString("Begin") / 2 + new Vector2(0f, 3f),
                Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 0);

            spriteBatch.DrawString(
                bebas,
                text,
                WindowTools.PaddingToPixelCoordinate(0.5f, 0.20f, 0, 0) - 0.35f * bebas.MeasureString(text) / 2,
                Color.White, 0f, Vector2.Zero, 0.35f, SpriteEffects.None, 0);

            spriteBatch.End();
        }
示例#4
0
        private void Draw_Units(SpriteBatch spriteBatch)
        {
            //draw bench units
            for (int x = (int)bench.Size.X - 1; x >= 0; x--)
            {
                //get unit on current bench tile iter
                Unit unit = turnPlayer.GetBenchUnits()[x];

                if (unit != null)
                {
                    //draw if not picked up
                    if (GetUnitFromTileData(pickedUpTileData) != unit || !pickedUpTileData.Item2)
                    {
                        Texture2D unitTexture = unit.GetSprite(unitSprites);
                        Vector2   pos         = bench.Tiles[x, 0].GetCentrePixelCoordinate(boardScale) - new Vector2(boardScale * (unitTexture.Width / 2), unitTexture.Height * boardScale);
                        spriteBatch.Draw(unitTexture, position: pos, scale: boardScaleVector);
                        Draw_AugmentIcon(spriteBatch, unit, pos, unitTexture);
                    }
                }
            }

            //draw units on the board - must be done from back of the grid to front
            // to preserve perspective.
            foreach (Unit unit in grid.Units.OrderByDescending(i => i.CubeCoordinate.Z).ThenBy(i => i.CubeCoordinate.Y))
            {
                Vector2 tileCoordinate = CoordConverter.CubeToOffset(unit.CubeCoordinate);
                if (turnPlayer.IsPointInHalf(tileCoordinate, false))
                {
                    if (GetUnitFromTileData(pickedUpTileData) != unit || !pickedUpTileData.Item2)
                    {
                        Texture2D unitTexture = unit.GetSprite(unitSprites);
                        Vector2   pos         = grid.Tiles[(int)tileCoordinate.X, (int)tileCoordinate.Y].GetCentrePixelCoordinate(boardScale) - new Vector2(boardScale * (unitTexture.Width / 2), unitTexture.Height * boardScale);
                        spriteBatch.Draw(unitTexture, position: pos, scale: boardScaleVector);
                        Draw_AugmentIcon(spriteBatch, unit, pos, unitTexture);
                    }
                }
            }

            //draw the picked up unit hovering over the mouse position
            if (pickedUpTileData.Item2)
            {
                Unit      toDraw  = GetUnitFromTileData(pickedUpTileData);
                Texture2D texture = toDraw.GetSprite(unitSprites);
                Vector2   pos     = InputManager.Instance.MousePos - boardScale / 2 * UiTools.BoundsToVector(texture.Bounds);

                spriteBatch.Draw(texture,
                                 position: pos,
                                 scale: boardScaleVector
                                 );
                Draw_AugmentIcon(spriteBatch, toDraw, pos, texture);
            }
        }
示例#5
0
        private void LoadContent_Button(ContentManager Content)
        {
            //generate the pass turn button and assign a method to it.
            Texture2D passTurnButtonTexture = Content.Load <Texture2D>("PreparationTurn/EndTurnButton");
            Texture2D hoverTexture          = Content.Load <Texture2D>("PreparationTurn/EndTurnButtonHovered");

            passTurnButton = new SinglePressSpriteButton(WindowTools.PaddingToPixelCoordinate(0.5f, 0.6f, 0, 0) - (0.5f * uiScale * UiTools.BoundsToVector(passTurnButtonTexture.Bounds)), passTurnButtonTexture, hoverTexture, UiTools.CreateBoolMask(passTurnButtonTexture), uiScale);
            passTurnButton.buttonPressed += HandlePassTurnButtonPress;
        }
示例#6
0
        public void Draw(SpriteBatch spriteBatch, Color textColor)
        {
            spriteBatch.Begin(samplerState: SamplerState.PointClamp);

            //draw underlying alpha box
            playerNameBox.Draw(spriteBatch);
            //calculate the size of the players name
            Vector2 nameSize = textFont.MeasureString(playerName);
            //calculate the position where the name needs to be drawn to be central
            //  to the player name box.
            Vector2 namePos = playerNameBox.GetCentrePos() - 0.5f * nameSize;

            //draw the player name
            spriteBatch.DrawString(textFont, playerName, namePos, textColor, 0f, Vector2.Zero, 1f, SpriteEffects.None, 1f);

            characterSpriteBox.Draw(spriteBatch);
            characterInfoBox.Draw(spriteBatch);

            //draw dividing lines
            divisorA.Draw(spriteBatch);
            divisorB.Draw(spriteBatch);

            //draw respective information about character if a character is selected
            if (characterType != null)
            {
                //draw selected character sprite
                Vector2 spritePos = characterSpriteBox.GetCentrePos() - 0.5f * spriteScale * UiTools.BoundsToVector(characterSprite.Bounds);
                spriteBatch.Draw(characterSprite, position: spritePos, scale: spriteScaleVector);

                //draw character name
                string  chrName = characterType.Name;
                Vector2 basePos = characterInfoBox.GetPos() + new Vector2(characterInfoBox.DestinationRect.Width / 2, textPadding + textFont.MeasureString(chrName).Y / 2);
                namePos = basePos - textFont.MeasureString(chrName) / 2;
                spriteBatch.DrawString(textFont, chrName, namePos, textColor);

                string  ability     = $"Ability:";
                Vector2 abilitySize = textFont.MeasureString(ability);
                Vector2 abilityPos  = basePos
                                      + new Vector2(0, 5 * lineSpacing + textFont.MeasureString(chrName).Y / 2);
                spriteBatch.DrawString(textFont, ability, abilityPos - abilitySize / 2, Color.Red);

                //draw the ability description.
                // this is a long string being drawn to a small box, so
                // the text is wrapped according to the width of the box.
                // (See uitools for how text wrapping works).
                float   drawGap     = lineSpacing + textFont.MeasureString(abilityDescription).Y / 2;
                Vector2 linesOrigin = abilityPos + new Vector2(0, abilitySize.Y / 2 + lineSpacing);
                for (int i = 0; i < descriptionLines.Length; i++)
                {
                    spriteBatch.DrawString(textFont,
                                           descriptionLines[i],
                                           linesOrigin + new Vector2(0, i * drawGap) - textFont.MeasureString(descriptionLines[i]) / 2,
                                           Color.White);
                }
            }

            spriteBatch.End();
        }
示例#7
0
        public void Draw(SpriteBatch spriteBatch, BattleTurn.ActionArgs[] actions, Player[] players, DrawParams textures)
        {
            //pass in the information about actions -- draw for each one. This information does not need to be stored here too.


            //draw underlying alpha box for the box containing text.
            textBox.Draw(spriteBatch);
            //calculate the size of the text
            Vector2 nameSize = textFont.MeasureString(text);
            //calculate the position where the text needs to be drawn to be central
            //  to the text box.
            Vector2 namePos = textBox.GetCentrePos() - 0.5f * new Vector2(nameSize.X, nameSize.Y);

            //draw the text
            spriteBatch.DrawString(textFont, text, namePos, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 1f);

            foreach (RectBox box in actionBoxes)
            {
                box.Draw(spriteBatch);
            }

            //draw respective information about each action
            for (int i = 0; i < actions.Length; i++)
            {
                BattleTurn.ActionArgs action = actions[i];
                RectBox boxDrawingTo         = actionBoxes[i];
                Vector2 boxPos = boxDrawingTo.GetPos();

                Color boxColor = (action.ActingUnit.OwnerId == 3) ?
                                 Color.Gray :
                                 players.Where(player => player.Id == action.ActingUnit.OwnerId).First().Colour; //set the color to Ai color/player color


                //draw a coloured block to specify which player the acting unit belongs to.
                //Using a single pixel texture instead of a non-disposable object (say my RectBox class for instance)
                // eliminates memory leak issues.
                spriteBatch.Draw(emptyRect, new Rectangle(boxDrawingTo.GetPos().ToPoint(), new Point(10, actionBoxHeight)), color: boxColor);

                Texture2D actingUnitSprite = action.ActingUnit.GetSprite(textures.unitSprites);


                //draw the units involved in each action, and the icons displaying the type of action.
                if (action.IsAttack)
                {
                    //draw the attacking unit
                    spriteBatch.Draw(actingUnitSprite,
                                     position: boxPos + new Vector2(width / 5, boxDrawingTo.GetHeight() / 2) - spriteScale / 2 * UiTools.BoundsToVector(actingUnitSprite.Bounds),
                                     scale: spriteScaleVector
                                     );

                    //draw the attack icon
                    spriteBatch.Draw(textures.attackIcon,
                                     position: boxPos + new Vector2(width / 5, boxDrawingTo.GetHeight() / 2),
                                     scale: iconScaleVector
                                     );

                    //draw the target unit
                    Texture2D targetUnitSprite = action.TargetUnit.GetSprite(textures.unitSprites);
                    spriteBatch.Draw(targetUnitSprite,
                                     position: boxPos + new Vector2(2.5f * width / 5, boxDrawingTo.GetHeight() / 2) - spriteScale / 2 * UiTools.BoundsToVector(targetUnitSprite.Bounds),
                                     scale: spriteScaleVector
                                     );

                    //draw the defense icon
                    spriteBatch.Draw(textures.defenseIcon,
                                     position: boxPos + new Vector2(2.5f * width / 5, boxDrawingTo.GetHeight() / 2) - iconScale * new Vector2(textures.defenseIcon.Width, 0),
                                     scale: iconScaleVector
                                     );

                    //draw the skull icon if the target unit died as a result of the action.
                    if (action.TargetFainted)
                    {
                        spriteBatch.Draw(textures.skullIcon,
                                         position: boxPos + new Vector2(3.5f * width / 5, boxDrawingTo.GetHeight() / 2) - iconScale / 2 * UiTools.BoundsToVector(textures.skullIcon.Bounds),
                                         scale: iconScaleVector * 2
                                         );
                    }
                }
                else if (action.IsMove)
                {
                    //draw acting unit
                    spriteBatch.Draw(actingUnitSprite,
                                     position: boxPos + new Vector2(width / 5, boxDrawingTo.GetHeight() / 2) - spriteScale / 2 * UiTools.BoundsToVector(actingUnitSprite.Bounds),
                                     scale: spriteScaleVector
                                     );

                    //draw move icon
                    spriteBatch.Draw(textures.moveIcon,
                                     position: boxPos + new Vector2(width / 5, boxDrawingTo.GetHeight() / 2),
                                     scale: iconScaleVector
                                     );

                    //draw target unit
                    Texture2D targetUnitSprite = action.TargetUnit.GetSprite(textures.unitSprites);
                    spriteBatch.Draw(targetUnitSprite,
                                     position: boxPos + new Vector2(2.5f * width / 5, boxDrawingTo.GetHeight() / 2) - spriteScale / 2 * UiTools.BoundsToVector(targetUnitSprite.Bounds),
                                     scale: spriteScaleVector
                                     );

                    //draw targetting icon
                    spriteBatch.Draw(textures.targetIcon,
                                     position: boxPos + new Vector2(2.5f * width / 5, boxDrawingTo.GetHeight() / 2) - iconScale * new Vector2(textures.targetIcon.Width, 0),
                                     scale: iconScaleVector
                                     );
                }
                else //(No move)
                {
                    //Draw the unit trying to act
                    spriteBatch.Draw(actingUnitSprite,
                                     position: boxPos + new Vector2(width / 5, boxDrawingTo.GetHeight() / 2) - spriteScale / 2 * UiTools.BoundsToVector(actingUnitSprite.Bounds),
                                     scale: spriteScaleVector
                                     );

                    //Draw no act icon (cant move)
                    spriteBatch.Draw(textures.noMoveIcon,
                                     position: boxPos + new Vector2(width / 5, boxDrawingTo.GetHeight() / 2),
                                     scale: iconScaleVector
                                     );
                }
            }

            //draw dividing line
            divisorA.Draw(spriteBatch);
        }
示例#8
0
        public void Draw(SpriteBatch spriteBatch, Player owner, UnitShop.ShopEntry[] entries, Dictionary <Type, Texture2D> unitSprites, Texture2D moneyIcon, SpriteFont textFont)
        {
            //pass in the information about shop entries -- draw for each one.

            //draw underlying alpha box for the box containing text.
            textBox.Draw(spriteBatch);
            //calculate the size of the text
            Vector2 textSize = textFont.MeasureString(text);
            //calculate the position where the text needs to be drawn to be central
            //  to the text box.
            Vector2 textPos = textBox.GetCentrePos() - 0.5f * textSize;

            //draw the text
            spriteBatch.DrawString(textFont, text, textPos, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 1f);

            foreach (UnitShopButton box in unitBoxes)
            {
                box.Draw(spriteBatch, owner, entries);
            }

            //draw respective information about each entry
            for (int i = 0; i < entries.Length; i++)
            {
                UnitShop.ShopEntry entry        = entries[i];
                UnitShopButton     boxDrawingTo = unitBoxes[i];
                Vector2            boxPos       = boxDrawingTo.GetPos();
                Texture2D          unitSprite   = unitSprites[entry.unitType];

                spriteBatch.Draw(unitSprite,
                                 position: boxPos + new Vector2(width / 6, boxDrawingTo.GetHeight() / 2) - spriteScale / 2 * UiTools.BoundsToVector(unitSprite.Bounds),
                                 scale: spriteScaleVector
                                 );

                if (entry.Sold)
                {
                    Vector2 size = textFont.MeasureString(soldText);
                    Vector2 pos  = boxPos + new Vector2(width / 3, (boxDrawingTo.GetHeight() - size.Y) / 2);
                    spriteBatch.DrawString(textFont, soldText, pos, Color.White);
                }
                else if (owner.IsBenchFull())
                {
                    Vector2 size = textFont.MeasureString(fullText);
                    Vector2 pos  = boxPos + new Vector2(width / 3, (boxDrawingTo.GetHeight() - size.Y) / 2);
                    spriteBatch.DrawString(textFont, fullText, pos, Color.White);
                }
                else
                {
                    string  text = $"Buy: {entry.cost}";
                    Vector2 size = textFont.MeasureString(text);
                    Vector2 pos  = boxPos + new Vector2(width / 3, (boxDrawingTo.GetHeight() - size.Y) / 2);
                    spriteBatch.DrawString(textFont, text, pos, Color.White);
                    spriteBatch.Draw(moneyIcon,
                                     position: boxPos + new Vector2(width / 3 + width / 15 + size.X, boxDrawingTo.GetHeight() / 2) - spriteScale / 2 * UiTools.BoundsToVector(moneyIcon.Bounds),
                                     scale: spriteScaleVector
                                     );
                }
            }

            //draw dividing line
            divisorA.Draw(spriteBatch);
        }
示例#9
0
        public void Draw(SpriteBatch spriteBatch, Texture2D vsAiIcon, Texture2D vsPlayerIcon)
        {
            //draw underlying alpha box
            textBox.Draw(spriteBatch);
            //calculate the size of the text
            Vector2 textSize = textFont.MeasureString(text);
            //calculate the position where the text needs to be drawn to be central
            //  to the text box.
            Vector2 textPos = textBox.GetCentrePos() - 0.5f * new Vector2(textSize.X, textSize.Y);

            //draw the text
            spriteBatch.DrawString(textFont, text, textPos, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 1f);

            //draw the underlying alpha boxes for each round.
            foreach (RectBox box in stageIconBoxes)
            {
                box.Draw(spriteBatch);
            }


            //draw dividing line
            divisorA.Draw(spriteBatch);

            //draw respective information about each round.
            for (int i = 0; i < stage.Length; i++)
            {
                if (stage.Rounds[i] == Stage.RoundTypes.vsAi)
                {
                    spriteBatch.Draw(vsAiIcon,
                                     position: stageIconBoxes[i].GetCentrePos() - 0.5f * spriteScale * UiTools.BoundsToVector(vsAiIcon.Bounds),
                                     scale: spriteScaleVector,
                                     color: (i < stageIndex - 1)? Color.Gray : Color.White
                                     );
                }
                else
                {
                    spriteBatch.Draw(vsPlayerIcon,
                                     position: stageIconBoxes[i].GetCentrePos() - 0.5f * spriteScale * UiTools.BoundsToVector(vsPlayerIcon.Bounds),
                                     scale: spriteScaleVector,
                                     color: (i < stageIndex - 1) ? Color.DarkRed : Color.Red
                                     );
                }
            }
        }
示例#10
0
        public override void Draw(SpriteBatch spriteBatch)
        {
            //base: draw the overlay.
            base.Draw(spriteBatch);
            spriteBatch.Begin(samplerState: SamplerState.PointClamp);

            //draw a string telling the player how to continue/quit.
            spriteBatch.DrawString(font,
                                   newGameText,
                                   newGamePos,
                                   Color.Green
                                   );

            //draw a string to show who won.
            string winText = $"Player {winner.Id + 1} Wins!";

            spriteBatch.DrawString(largeFont,
                                   winText,
                                   WindowTools.PaddingToPixelCoordinate(0.5f, 0.05f, 0, 0) -
                                   new Vector2(largeFont.MeasureString(winText).X / 2, 0),
                                   winner.Colour
                                   );

            //draw the final score alongside each character sprite.
            Vector2 spriteOffset = uiScale / 2 * UiTools.BoundsToVector(winner.CharacterSprite.Bounds);
            Vector2 pos          = WindowTools.PaddingToPixelCoordinate(0.5f, 0.4f, 0, 0);

            //(character sprites)
            spriteBatch.Draw(
                texture: boundary,
                position: pos - spriteOffset - sepDistance - new Vector2(3 * uiScale, 0),
                scale: uiScaleVector,
                color: winner.Colour
                );

            spriteBatch.Draw(
                texture: winner.CharacterSprite,
                position: pos - spriteOffset - sepDistance,
                scale: uiScaleVector);

            spriteBatch.Draw(
                texture: boundary,
                position: pos - spriteOffset + sepDistance + new Vector2(3 * uiScale, 0),
                scale: uiScaleVector,
                color: loser.Colour
                );

            spriteBatch.Draw(
                texture: loser.CharacterSprite,
                position: pos - spriteOffset + sepDistance,
                scale: uiScaleVector);


            //(score)
            string  text = $"{winner.WinProgress} - {loser.WinProgress}";
            Vector2 size = font.MeasureString(text);

            spriteBatch.DrawString(font,
                                   text,
                                   pos - size / 2,
                                   Color.White
                                   );

            spriteBatch.End();
        }