public Area(int layers, int width, int height) { // Sicherheitsprüfungen if (width < 5) throw new ArgumentException("Spielbereich muss mindestens 5 Zellen breit sein"); if (height < 5) throw new ArgumentException("Spielfeld muss mindestens 5 Zellen hoch sein"); Width = width; Height = height; // Erzeugung der unterschiedlichen Layer. Layers = new Layer[layers]; for (int l = 0; l < layers; l++) Layers[l] = new Layer(width, height); // Leere Liste der Spielelemente. Items = new List<Item>(); // Leere Liste der Portale erstellen Portals = new List<Portal>(); // Leere Liste von Tiles erstellen. Tiles = new Dictionary<int, Tile>(); // Leere Liste von Startpunkten. Startpoints = new List<Vector2>(); }
/// <summary> /// Rendert einen Layer der aktuellen Szene /// </summary> private void RenderLayer(Area area, Layer layer, Point offset) { // TODO: Nur den sichtbaren Bereich rendern for (int x = 0; x < area.Width; x++) { for (int y = 0; y < area.Height; y++) { // Prüfen, ob diese Zelle ein Tile enthält int tileId = layer.Tiles[x, y]; if (tileId == 0) continue; // Tile ermitteln Tile tile = area.Tiles[tileId]; Texture2D texture = GetTileset(tile.Texture); // Position ermitteln int offsetX = (int)(x * Camera.Scale) - offset.X; int offsetY = (int)(y * Camera.Scale) - offset.Y; // Zelle mit der Standard-Textur (Gras) ausmalen spriteBatch.Draw(texture, new Rectangle(offsetX, offsetY, (int)Camera.Scale, (int)Camera.Scale), tile.SourceRectangle, Color.White); } } }