/// <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); } }
} // 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)
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); } }
/// <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(); }