Beispiel #1
0
        /// <summary>
        /// Render the Entity.
        /// </summary>
        /// <param name="offsetX">Offset x.</param>
        /// <param name="offsetY">Offset y.</param>
        /// <param name="tileOffsetX">Tile offset x.</param>
        /// <param name="tileOffsetY">Tile offset y.</param>
        /// <param name="TileWidth">Tile width.</param>
        /// <param name="TileHeight">Tile height.</param>
        public void Render(float offsetX, float offsetY, float tileOffsetX, float tileOffsetY)
        {
            if (sprite == null || CurrentMap == null)
            {
                return;
            }

            bool shouldFlipX = sprite.ShouldFlipX;

            RectangleF rect = GetTileRectangle(offsetX, offsetY, tileOffsetX, tileOffsetY);

            rect.Width  = sprite.MaxWidth;
            rect.Height = sprite.MaxHeight;

            RectangleF tileRectangle = new RectangleF(0, 0, TileSizeX * CurrentMap.TileWidth, TileSizeY * CurrentMap.TileHeight);

            rect.X -= (rect.Width * 0.5f - tileRectangle.Width * 0.5f);
            rect.Y -= (rect.Height * 0.5f - tileRectangle.Height * 0.5f);

            if (sprite.CurrentFrame != null)
            {
                sprite.CurrentFrame.texture.RenderOnScreen(rect, shouldFlipX, false);
            }

            if (DebugOptions.ShowUnitFrames)
            {
                WWTexture.RenderRectangle(rect, Color.Blue);
            }
        }
Beispiel #2
0
        } // Tile(data)

        /// <summary>
        /// Render
        /// </summary>
        internal void Render(float x, float y, float scale)
        {
            texture.RenderOnScreen(x * scale, y * scale, 16.0f * scale, 16.0f * scale);
            if (DebugOptions.ShowTiles)
            {
                WWTexture.RenderRectangle(new RectangleF(x * scale, y * scale, 16.0f * scale, 16.0f * scale), Color.Red);
            }
        } // Render(x, y)
Beispiel #3
0
        internal override void Draw()
        {
            base.Draw();

            if (CurrentMap != null)
            {
                CurrentMap.Render(this.X, this.Y, this.Width, this.Height, mapOffsetX, mapOffsetY);
            }

            // Render selection rectangle
            if (InputHandler.IsSpanningRectangle)
            {
                WWTexture.RenderRectangle(InputHandler.SelectionRectangle, new Color(0, 255, 0), 3);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Render
        /// </summary>
        internal void Render(int setX, int setY, int setWidth, int setHeight, float tileOffsetX, float tileOffsetY)
        {
            // Render tiles
            if (tileOffsetX < 0.0f)
            {
                tileOffsetX = 0.0f;
            }
            if (tileOffsetY < 0.0f)
            {
                tileOffsetY = 0.0f;
            }

            int tilesToDrawX = (setWidth / TileWidth) + 1;
            int tilesToDrawY = (setHeight / TileHeight) + 1;

            int startTileX = ((int)tileOffsetX / TileWidth);
            int startTileY = ((int)tileOffsetY / TileHeight);

            if (tilesToDrawX + startTileX > MapWidth)
            {
                tilesToDrawX = MapWidth - startTileX;
            }
            if (tilesToDrawY + startTileY > MapHeight)
            {
                tilesToDrawY = MapHeight - startTileY;
            }

            //float innerTileOffsetX = (float)((int)(tileOffsetX * 100) % (TileWidth * 100)) / 100.0f;
            //float innerTileOffsetY = (float)((int)(tileOffsetY * 100) % (TileHeight * 100)) / 100.0f;
            int innerTileOffsetX = ((int)tileOffsetX % TileWidth);
            int innerTileOffsetY = ((int)tileOffsetY % TileHeight);

            //int count = 170;
            Performance.Push("Map rendering - Tiles");
            RenderManager.StartBatch();
            for (int y = 0; y < tilesToDrawY; y++)
            {
                for (int x = 0; x < tilesToDrawX; x++)
                {
                    int index = levelVisual.visualData[(x + startTileX) + ((y + startTileY) * MapWidth)];

                    tileSet.DrawTile(index, setX + x * TileWidth - innerTileOffsetX, setY + y * TileHeight - innerTileOffsetY, 1.0f);

                    if (DebugOptions.ShowBlockedTiles)
                    {
                        short passableValue = levelPassable.passableData[x + startTileX, y + startTileY];
                        bool  isBlocked     = passableValue > 0;
                        if (isBlocked)
                        {
                            Color col = new Color(0.0f, 1.0f, 0.0f, 0.5f);
                            if (passableValue == 128)
                            {
                                col = new Color(0.2f, 0.0f, 0.8f, 0.5f);
                            }

                            WWTexture.SingleWhite.RenderOnScreen(setX + x * TileWidth - innerTileOffsetX, setY + y * TileHeight - innerTileOffsetY,
                                                                 TileWidth, TileHeight, col);
                        }
                    }
                }
            }
            RenderManager.EndBatch();
            Performance.Pop();

            Performance.Push("Map rendering - Roads");
            // Render Roads
            for (int i = 0; i < Roads.Count; i++)
            {
                bool isVisible = true;

                Construct road = Roads[i];

                if (mapDiscoverState[road.X + road.Y * MapWidth] == MapDiscover.Unknown)
                {
                    isVisible = false;
                }

                int x = road.X - startTileX;
                int y = road.Y - startTileY;
                if (isVisible)
                {
                    tileSet.DrawRoadTile(road.Config, setX + x * TileWidth - innerTileOffsetX, setY + y * TileHeight - innerTileOffsetY, 1.0f);
                }
            }
            Performance.Pop();

            Performance.Push("Map rendering - Entities");
            // Render entities
            for (int i = 0; i < entities.Count; i++)
            {
                bool isVisible = true;

                Entity ent = entities[i];

                if (isVisible)
                {
                    ent.Render(setX, setY, tileOffsetX, tileOffsetY);
                }
            }
            Performance.Pop();

            Performance.Push("Map rendering - Selected Entities");
            // Render selected entities
            for (int i = 0; i < selectedEntities.Count; i++)
            {
                Entity selEnt = selectedEntities[i];
                Color  selCol = new Color(0, 255, 0);
                if (HumanPlayer.IsNeutralTowards(selEnt.Owner))
                {
                    selCol = new Color(255, 255, 0);
                }
                else if (HumanPlayer.IsHostileTowards(selEnt.Owner))
                {
                    selCol = new Color(255, 0, 0);
                }

                WWTexture.RenderRectangle(selEnt.GetTileRectangle(setX, setY, tileOffsetX, tileOffsetY), selCol, 3);
            }
            Performance.Pop();

            Performance.Push("Map rendering - Undiscovered places");
            RenderManager.StartBatch(BlendState.AlphaBlend);
            // Overlay undiscovered places + fog of war
            for (int y = 0; y < tilesToDrawY; y++)
            {
                for (int x = 0; x < tilesToDrawX; x++)
                {
                    int pos = (x + startTileX) + ((y + startTileY) * MapWidth);

                    if (mapDiscoverState[pos] == MapDiscover.Fog)
                    {
                        WWTexture.SingleWhite.RenderOnScreen(setX + x * TileWidth - innerTileOffsetX, setY + y * TileHeight - innerTileOffsetY,
                                                             TileWidth, TileHeight, new Color(0.0f, 0.0f, 0.0f, 0.5f));
                    }
                    else if (mapDiscoverState[pos] == MapDiscover.Unknown)
                    {
                        WWTexture.SingleWhite.RenderOnScreen(setX + x * TileWidth - innerTileOffsetX, setY + y * TileHeight - innerTileOffsetY,
                                                             TileWidth, TileHeight, new Color(0.0f, 0.0f, 0.0f, 1.0f));
                    }
                }
            }
            RenderManager.EndBatch();
            Performance.Pop();
        }