示例#1
0
文件: SelectBox.cs 项目: bagnalla/RTS
        public static void Draw(SpriteBatch spriteBatch, Camera camera)
        {
            if (!enabled || !selecting)
            {
                return;
            }

            /*selectBoxLine.ClearVectors();
             * selectBoxLine.AddVector(selectBox.UpperLeftCorner);
             * selectBoxLine.AddVector(selectBox.UpperRightCorner);
             * selectBoxLine.Render(spriteBatch);
             *
             * selectBoxLine.ClearVectors();
             * selectBoxLine.AddVector(selectBox.UpperLeftCorner);
             * selectBoxLine.AddVector(selectBox.LowerLeftCorner);
             * selectBoxLine.Render(spriteBatch);
             *
             * selectBoxLine.ClearVectors();
             * selectBoxLine.AddVector(selectBox.LowerLeftCorner);
             * selectBoxLine.AddVector(selectBox.LowerRightCorner);
             * selectBoxLine.Render(spriteBatch);
             *
             * selectBoxLine.ClearVectors();
             * selectBoxLine.AddVector(selectBox.UpperRightCorner);
             * selectBoxLine.AddVector(selectBox.LowerRightCorner);
             * selectBoxLine.Render(spriteBatch);
             */
            //

            selectBoxLine.ClearVectors();
            selectBoxLine.AddVector(new Vector2(drawBox.X, drawBox.Y));
            selectBoxLine.AddVector(new Vector2(drawBox.X + drawBox.Width, drawBox.Y));
            selectBoxLine.Render(spriteBatch);

            selectBoxLine.ClearVectors();
            selectBoxLine.AddVector(new Vector2(drawBox.X, drawBox.Y));
            selectBoxLine.AddVector(new Vector2(drawBox.X, drawBox.Y + drawBox.Height));
            selectBoxLine.Render(spriteBatch);

            selectBoxLine.ClearVectors();
            selectBoxLine.AddVector(new Vector2(drawBox.X, drawBox.Y + drawBox.Height));
            selectBoxLine.AddVector(new Vector2(drawBox.X + drawBox.Width, drawBox.Y + drawBox.Height));
            selectBoxLine.Render(spriteBatch);

            selectBoxLine.ClearVectors();
            selectBoxLine.AddVector(new Vector2(drawBox.X + drawBox.Width, drawBox.Y));
            selectBoxLine.AddVector(new Vector2(drawBox.X + drawBox.Width, drawBox.Y + drawBox.Height));
            selectBoxLine.Render(spriteBatch);
        }
示例#2
0
        public override void Draw(GameTime gameTime)
        {
            if (!enabled || lines.Count == 0)
            {
                return;
            }

            boxVectors = new Vector2[4];

            int biggestLineX = 0;

            foreach (string line in lines)
            {
                int lineX = (int)font.MeasureString(line).X;
                if (lineX > biggestLineX)
                {
                    biggestLineX = lineX;
                }
            }
            int lineSizeY = (int)font.MeasureString(lines[0]).Y;

            spriteBatch.Begin();

            int spacing = 2;

            if (position == Direction.North)
            {
            }
            else if (position == Direction.NorthEast)
            {
                int posX = Game.GraphicsDevice.Viewport.Width - biggestLineX;
                int posY = 2;

                for (int i = 0; i < lines.Count; i++)
                {
                    string line = lines[i];

                    if (i == 0)
                    {
                        boxVectors[0] = new Vector2(posX - 6, posY);
                        boxVectors[1] = new Vector2(Game.GraphicsDevice.Viewport.Width, posY);
                    }
                    else if (i == lines.Count - 1)
                    {
                        boxVectors[3] = new Vector2(posX - 6, posY + lineSizeY);
                        boxVectors[2] = new Vector2(Game.GraphicsDevice.Viewport.Width, posY + lineSizeY);
                    }

                    spriteBatch.DrawString(font, line, new Vector2((int)(Game.GraphicsDevice.Viewport.Width - biggestLineX - 2), posY), Color.Black);
                    posY += (int)lineSizeY + spacing;
                }
            }
            else if (position == Direction.East)
            {
            }
            else if (position == Direction.SouthEast)
            {
                int posX = Game.GraphicsDevice.Viewport.Width - biggestLineX;
                int posY = Game.GraphicsDevice.Viewport.Height - lineSizeY * lines.Count - 2;

                for (int i = 0; i < lines.Count; i++)
                {
                    string line = lines[i];

                    if (i == 0)
                    {
                        boxVectors[0] = new Vector2(posX - 5, posY);
                        boxVectors[1] = new Vector2(Game.GraphicsDevice.Viewport.Width - 1, posY);
                    }
                    if (i == lines.Count - 1)
                    {
                        boxVectors[2] = new Vector2(Game.GraphicsDevice.Viewport.Width - 1, posY + lineSizeY);
                        boxVectors[3] = new Vector2(posX - 5, posY + lineSizeY);
                    }

                    spriteBatch.DrawString(font, line, new Vector2((int)(Game.GraphicsDevice.Viewport.Width - biggestLineX - 2), posY), Color.Black);
                    posY += lineSizeY;
                }
            }
            else if (position == Direction.South)
            {
            }
            else if (position == Direction.SouthWest)
            {
            }
            else if (position == Direction.West)
            {
            }
            else if (position == Direction.NorthWest)
            {
            }

            if (drawBox)
            {
                boxLine.ClearVectors();
                foreach (Vector2 v in boxVectors)
                {
                    boxLine.AddVector(v);
                }
                boxLine.AddVector(boxVectors[0]);
                boxLine.Render(spriteBatch);
            }

            spriteBatch.End();

            lines.Clear();

            base.Draw(gameTime);
        }
示例#3
0
文件: Rts.cs 项目: nubington/rts
        public override void Draw(SpriteBatch spriteBatch)
        {
            Game1.Game.DebugMonitor.AddLine("camera position: " + camera.Pos);
            Game1.Game.DebugMonitor.AddLine("camera zoom: " + camera.Zoom);
            Game1.Game.DebugMonitor.AddLine("camera rotation: " + camera.Rotation);
            Game1.Game.DebugMonitor.AddLine("pathfinding usage: " + pathFindingPercentage.ToString("F1") + "%");
            Game1.Game.DebugMonitor.AddLine("pathfinding queue: " + pathFindQueueSize);
            Game1.Game.DebugMonitor.AddLine("time: " + GameTimer.Elapsed.Minutes + ":" + GameTimer.Elapsed.Seconds.ToString("D2"));

            GraphicsDevice.Clear(Color.Black);

            GraphicsDevice.Viewport = worldViewport;
            spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, camera.get_transformation(worldViewport));

            drawMap(spriteBatch);

            // units
            foreach (Unit unit in SelectingUnits)
                //drawSelectionRing(unit, spriteBatch, Color.Green);
                drawSelectingRing(unit, spriteBatch);
            foreach (Unit unit in SelectedUnits)
                //drawSelectionRing(unit, spriteBatch, Color.Khaki);
                drawSelectedRing(unit, spriteBatch);

            foreach (Unit unit in Unit.Units)
            {
                if (!SelectingUnits.Contains(unit) && !SelectedUnits.Contains(unit))
                    spriteBatch.Draw(unit.Texture, new Rectangle((int)unit.CenterPoint.X, (int)unit.CenterPoint.Y, unit.Width, unit.Height), null, Color.White, unit.Rotation, unit.TextureCenterOrigin, SpriteEffects.None, 0f);

                /*int teamIndicatorSize = (int)(unit.Diameter / 4);
                // Rectangle teamIndicator = new Rectangle((int)(unit.CenterPoint.X - teamIndicatorSize / 2), (int)(unit.CenterPoint.Y - teamIndicatorSize / 2), teamIndicatorSize, teamIndicatorSize);
                Rectangle teamIndicator = new Rectangle((int)unit.CenterPoint.X, (int)unit.CenterPoint.Y, teamIndicatorSize, teamIndicatorSize);

                if (unit.Team == myTeam)
                    spriteBatch.Draw(ColorTexture.Green, teamIndicator, null, Color.White, unit.Rotation, ColorTexture.CenterVector, SpriteEffects.None, 0f);
                else
                    spriteBatch.Draw(ColorTexture.Red, teamIndicator, null, Color.White, unit.Rotation, ColorTexture.CenterVector, SpriteEffects.None, 0f);*/

                if (unit.Team == myTeam)
                    spriteBatch.Draw(greenTeamIndicatorTexture, new Rectangle((int)unit.CenterPoint.X, (int)unit.CenterPoint.Y, unit.Width, unit.Height), null, Color.White, unit.Rotation, new Vector2(greenTeamIndicatorTexture.Width / 2, greenTeamIndicatorTexture.Height / 2), SpriteEffects.None, 0f);
                else
                    spriteBatch.Draw(redTeamIndicatorTexture, new Rectangle((int)unit.CenterPoint.X, (int)unit.CenterPoint.Y, unit.Width, unit.Height), null, Color.White, unit.Rotation, new Vector2(redTeamIndicatorTexture.Width / 2, redTeamIndicatorTexture.Height / 2), SpriteEffects.None, 0f);
            }

            // unit animations
            foreach (UnitAnimation a in UnitAnimation.UnitAnimations)
                spriteBatch.Draw(a, new Rectangle(a.Rectangle.Center.X, a.Rectangle.Center.Y, a.Rectangle.Width, a.Rectangle.Height), null, Color.White, a.Rotation, new Vector2(((Texture2D)a).Width / 2, ((Texture2D)a).Height / 2), SpriteEffects.None, 0f);

            foreach (Unit unit in SelectedUnits)
            {
                if (unit.IsMoving)
                {
                    selectionRingLine.ClearVectors();
                    selectionRingLine.AddVector(unit.CenterPoint);
                    //foreach (Vector2 v in unit.WayPoints)
                    //    selectionRingLine.AddVector(v);
                    foreach (MoveCommand command in unit.Commands)
                    {
                        if (command is AttackCommand)
                            selectionRingLine.Colour = Color.Red;
                        else
                            selectionRingLine.Colour = Color.Green;

                        foreach (Vector2 v in command.WayPoints)
                            selectionRingLine.AddVector(v);

                        selectionRingLine.Render(spriteBatch);
                        selectionRingLine.ClearVectors();
                        selectionRingLine.AddVector(command.Destination);
                    }
                }
            }

            PrimitiveLine line = new PrimitiveLine(GraphicsDevice, 1);
            line.Colour = Color.Black;

            if (SelectedUnits.Count == 1 && SelectedUnits[0] is Unit)
            {
                Unit unit = SelectedUnits[0] as Unit;

                //PrimitiveLine line = new PrimitiveLine(GraphicsDevice, 1);
                //line.Colour = Color.Black;
                lock (SelectedUnits[0].PotentialCollisions)
                {
                    foreach (Unit u in SelectedUnits[0].PotentialCollisions)
                    {
                        line.ClearVectors();
                        line.AddVector(SelectedUnits[0].CenterPoint);
                        line.AddVector(u.CenterPoint);
                        line.Render(spriteBatch);
                    }
                }
                line.Colour = Color.Red;
                line.ClearVectors();
                line.AddVector(new Vector2(unit.CurrentPathNode.Tile.X, unit.CurrentPathNode.Tile.Y));
                line.AddVector(new Vector2(unit.CurrentPathNode.Tile.X + unit.CurrentPathNode.Tile.Width, unit.CurrentPathNode.Tile.Y));
                line.AddVector(new Vector2(unit.CurrentPathNode.Tile.X + unit.CurrentPathNode.Tile.Width, unit.CurrentPathNode.Tile.Y + unit.CurrentPathNode.Tile.Height));
                line.AddVector(new Vector2(unit.CurrentPathNode.Tile.X, unit.CurrentPathNode.Tile.Y + unit.CurrentPathNode.Tile.Height));
                line.AddVector(new Vector2(unit.CurrentPathNode.Tile.X, unit.CurrentPathNode.Tile.Y));
                line.Render(spriteBatch);
                line.Colour = Color.Black;
                foreach (MapTile tile in unit.CurrentPathNode.Tile.Neighbors)
                {
                    line.ClearVectors();
                    line.AddVector(new Vector2(tile.X, tile.Y));
                    line.AddVector(new Vector2(tile.X + tile.Width, tile.Y));
                    line.AddVector(new Vector2(tile.X + tile.Width, tile.Y + tile.Height));
                    line.AddVector(new Vector2(tile.X, tile.Y + tile.Height));
                    line.AddVector(new Vector2(tile.X, tile.Y));
                    line.Render(spriteBatch);
                }
            }

            /*foreach (Unit unit in SelectedUnits)
            {
                lock (unit.PotentialCollisions)
                {
                    foreach (Unit u in unit.PotentialCollisions)
                    {
                        line.ClearVectors();
                        line.AddVector(unit.CenterPoint);
                        line.AddVector(u.CenterPoint);
                        line.Render(spriteBatch);
                    }
                }
            }*/

            // bullets
            foreach (RtsBullet b in RtsBullet.RtsBullets)
                //spriteBatch.Draw(b.Texture, b, Color.White);
                spriteBatch.Draw(b.Texture, new Rectangle((int)b.CenterPoint.X, (int)b.CenterPoint.Y, b.Width, b.Height), null, Color.White, b.Rotation, b.TextureCenterOrigin, SpriteEffects.None, 0f);

            // move command shrinker things
            foreach (Shrinker shrinker in Shrinker.Shrinkers)
                spriteBatch.Draw(shrinker.Texture, shrinker, Color.White);
            //spriteBatch.Draw(shrinker.Texture, new Rectangle((int)shrinker.CenterPoint.X, (int)shrinker.CenterPoint.Y, shrinker.Width, shrinker.Height), null, Color.White, shrinker.Rotation, shrinker.TextureCenterOrigin, SpriteEffects.None, 0f);

            spriteBatch.End();
            spriteBatch.Begin();

            GraphicsDevice.Viewport = uiViewport;

            SelectBox.Draw(spriteBatch, camera);

            drawMinimap(spriteBatch);
            drawSelectionInfoArea(spriteBatch);
            drawCommandCardArea(spriteBatch);
            drawCommandCardBorder(spriteBatch);

            //pause and fps count
            Vector2 pauseStringSize = pauseFont.MeasureString("PAUSED");
            if (paused)
                spriteBatch.DrawString(pauseFont, "PAUSED", new Vector2(uiViewport.Width / 2 - pauseStringSize.X / 2, uiViewport.Height / 2 - pauseStringSize.Y / 2), Color.White);
            else
                frameCounter++;

            // fps message
            spriteBatch.DrawString(fpsFont, fpsMessage, new Vector2(8, 5), Color.Black);

            spriteBatch.Draw(buttonTexture, button1, Color.White);
            Vector2 button1TextSize = fpsFont.MeasureString("1");
            spriteBatch.DrawString(fpsFont, "1", new Vector2((int)(button1.X + button1.Width / 2 - button1TextSize.X / 2), (int)(button1.Y + button1.Height / 2 - button1TextSize.Y / 2)), Color.White);
            spriteBatch.Draw(buttonTexture, button2, Color.White);
            Vector2 button2TextSize = fpsFont.MeasureString("10");
            spriteBatch.DrawString(fpsFont, "10", new Vector2((int)(button2.X + button2.Width / 2 - button2TextSize.X / 2), (int)(button2.Y + button2.Height / 2 - button2TextSize.Y / 2)), Color.White);
            spriteBatch.Draw(buttonTexture, button3, Color.White);
            Vector2 button3TextSize = fpsFont.MeasureString("FS");
            spriteBatch.DrawString(fpsFont, "FS", new Vector2((int)(button3.X + button3.Width / 2 - button3TextSize.X / 2), (int)(button3.Y + button3.Height / 2 - button3TextSize.Y / 2)), Color.White);
            spriteBatch.Draw(buttonTexture, button4, Color.White);
            Vector2 button4TextSize = fpsFont.MeasureString("M");
            spriteBatch.DrawString(fpsFont, "M", new Vector2((int)(button4.X + button4.Width / 2 - button4TextSize.X / 2), (int)(button4.Y + button4.Height / 2 - button4TextSize.Y / 2)), Color.White);
            spriteBatch.Draw(buttonTexture, button5, Color.White);
            Vector2 button5TextSize = fpsFont.MeasureString("X");
            spriteBatch.DrawString(fpsFont, "X", new Vector2((int)(button5.X + button5.Width / 2 - button5TextSize.X / 2), (int)(button5.Y + button5.Height / 2 - button5TextSize.Y / 2)), Color.White);

            // cursor
            /*if (usingAttackCommand)
                spriteBatch.Draw(attackCommandCursorTexture, new Rectangle(mouseState.X - attackCommandCursorSize / 2, mouseState.Y - attackCommandCursorSize / 2, attackCommandCursorSize, attackCommandCursorSize), Color.White);
            else
                spriteBatch.Draw(normalCursorTexture, new Rectangle(mouseState.X, mouseState.Y, attackCommandCursorSize, attackCommandCursorSize), Color.White);*/

            spriteBatch.End();

            // tell pathfinder to stop calculating
            Unit.PathFinder.Go = false;
        }