int tileSize; /**< Size of single tile */ #endregion Fields #region Constructors /// <summary> /// Constructor /// </summary> /// <param name="WS">Reference to World Screen</param> /// <param name="tileSize">Size of single tile</param> /// <param name="size">Size of map</param> public Map(WorldScreen WS, int tileSize, int size) { this.tileSize = tileSize; this.size = size; this.Entities = new List<Entity>(); PhysicalWorld = new World(new Vector2(0, 0)); Player = new Player(new Rectangle(6 * 64, 6 * 64, 64, 64), this); AddEntity(Player); chunk = new Chunk(new Rectangle(0, 0, size * tileSize, size * tileSize), this, tileSize); Parent = WS; pfinder = new PathFinderFast(GetChunk().GetCostArray()); for (int i = 0; i < 25; i++) { Rectangle r = new Rectangle((int)Helper.GetRandomTo(size * tileSize), (int)Helper.GetRandomTo(size * tileSize), 64, 64); Rectangle t = new Rectangle(r.X / tileSize, r.Y / tileSize, tileSize, tileSize); while (chunk.tiles[t.X,t.Y].isSolid) { r = new Rectangle((int)Helper.GetRandomTo(size * tileSize), (int)Helper.GetRandomTo(size * tileSize), 64, 64); t = new Rectangle(r.X / tileSize, r.Y / tileSize, tileSize, tileSize); } new ZombieBig(r, this); } new Barrel(new Rectangle(Player.Position.X + 64, Player.Position.Y + 64, 32, 32), this); new FloorFan(new Rectangle(Player.Position.X + 64, Player.Position.Y + 64, 128, 128), this); //chunk.Save("Content/Chunks/00.xml"); }
/// <summary> /// Overrided method to Generate empty Map /// </summary> /// <param name="Chunk">Chunk to generate in</param> public override void Generate(Chunk Chunk) { for (int y = 0; y < Chunk.position.Height / Chunk.tileSize; y++) { for (int x = 0; x < Chunk.position.Width / Chunk.tileSize; x++) { Chunk.SetTile(x, y, new Tile(new Rectangle(Chunk.position.X + x * Chunk.tileSize, Chunk.position.Y + y * Chunk.tileSize, Chunk.tileSize, Chunk.tileSize), "dungFloor", 30)); } } for (int x = 2; x <= 10; x++) { Chunk.SetTile(x, 2, new Tile(new Rectangle(Chunk.position.X + x * Chunk.tileSize, Chunk.position.Y + 2 * Chunk.tileSize, Chunk.tileSize, Chunk.tileSize), "dungWall", 0)); Chunk.SetTile(x, 10, new Tile(new Rectangle(Chunk.position.X + x * Chunk.tileSize, Chunk.position.Y + 10 * Chunk.tileSize, Chunk.tileSize, Chunk.tileSize), "dungWall", 0)); } for (int y = 2; y <= 10; y++) { Chunk.SetTile(2, y, new Tile(new Rectangle(Chunk.position.X + 2 * Chunk.tileSize, Chunk.position.Y + y * Chunk.tileSize, Chunk.tileSize, Chunk.tileSize), "dungWall", 0)); Chunk.SetTile(10, y, new Tile(new Rectangle(Chunk.position.X + 10 * Chunk.tileSize, Chunk.position.Y + y * Chunk.tileSize, Chunk.tileSize, Chunk.tileSize), "dungWall", 0)); } }
void ConvertDungeon(Chunk C) { for (int y = 0; y < ymax; y++) { for (int x = 0; x < xmax; x++) { switch (GetCellType(x, y)) { case Tile.Corridor: C.SetTile(x, y, new MapManager.Tile(new Rectangle(C.position.X + x * C.tileSize, C.position.Y + y * C.tileSize, C.tileSize, C.tileSize), "dungFloor", 30)); break; case Tile.DirtFloor: C.SetTile(x, y, new MapManager.Tile(new Rectangle(C.position.X + x * C.tileSize, C.position.Y + y * C.tileSize, C.tileSize, C.tileSize), "dungFloor", 30)); break; case Tile.DirtWall: C.SetTile(x, y, new MapManager.Tile(new Rectangle(C.position.X + x * C.tileSize, C.position.Y + y * C.tileSize, C.tileSize, C.tileSize), "dungWall", 0)); break; case Tile.StoneWall: C.SetTile(x, y, new MapManager.Tile(new Rectangle(C.position.X + x * C.tileSize, C.position.Y + y * C.tileSize, C.tileSize, C.tileSize), "dungWall", 0)); break; case Tile.Unused: C.SetTile(x, y, new MapManager.Tile(new Rectangle(C.position.X + x * C.tileSize, C.position.Y + y * C.tileSize, C.tileSize, C.tileSize), "dungWall", 0)); break; case Tile.Upstairs: C.SetTile(x, y, new MapManager.Tile(new Rectangle(C.position.X + x * C.tileSize, C.position.Y + y * C.tileSize, C.tileSize, C.tileSize), "dungFloor", 30)); C.map.Player.Position = new Rectangle(x * C.tileSize, y * C.tileSize,C.tileSize,C.tileSize); break; default: C.SetTile(x, y, new MapManager.Tile(new Rectangle(C.position.X + x * C.tileSize, C.position.Y + y * C.tileSize, C.tileSize, C.tileSize), "dungFloor", 30)); break; } } } }
public override void Generate(Chunk Chunk) { this.Chunk = Chunk; xmax = (int)Chunk.Size.X; ymax = (int)Chunk.Size.Y; LightList = new List<Vector2>(); AlarmLights = new List<KeyValuePair<Vector2, Direction>>(); CreateDungeon((int)Chunk.Size.X, (int)Chunk.Size.Y, 100); ConvertDungeon(Chunk); LightingEngine LE = (LightingEngine)Renderer.GetRenderEffect("LightingEngine"); foreach (Vector2 V in LightList) { PointLight L = new PointLight() { IsEnabled = true, Color = new Vector4(0.9f, .2f, .2f, 1f), Power = .85f, LightDecay = 300, Position = new Vector3(V.X * Chunk.tileSize, V.Y * Chunk.tileSize, 1), }; LE.AddLight(L); } foreach (KeyValuePair<Vector2, Direction> Alarm in AlarmLights) { switch (Alarm.Value) { case Direction.North: for (int i = -2; i <= 2; i++) { if (!(GetCellType((int)Alarm.Key.X + i, (int)Alarm.Key.Y) == Tile.DirtFloor || GetCellType((int)Alarm.Key.X + i, (int)Alarm.Key.Y) == Tile.Corridor) || (GetCellType((int)Alarm.Key.X + i, (int)Alarm.Key.Y - 1) == Tile.DirtFloor || GetCellType((int)Alarm.Key.X + i, (int)Alarm.Key.Y - 1) == Tile.Corridor)) { break; } } new RedAlarmLamp(new Rectangle((int)Alarm.Key.X * 64 + 32, (int)Alarm.Key.Y * 64 + 4, 16,8), Chunk.map); break; case Direction.South: for (int i = -2; i <= 2; i++) { if (!(GetCellType((int)Alarm.Key.X + i, (int)Alarm.Key.Y + 1) == Tile.DirtFloor || GetCellType((int)Alarm.Key.X + i, (int)Alarm.Key.Y + 1) == Tile.Corridor) || (GetCellType((int)Alarm.Key.X + i, (int)Alarm.Key.Y) == Tile.DirtFloor || GetCellType((int)Alarm.Key.X + i, (int)Alarm.Key.Y ) == Tile.Corridor)) { break; } } RedAlarmLamp tmp = new RedAlarmLamp(new Rectangle((int)Alarm.Key.X * 64 + 32, (int)Alarm.Key.Y * 64 + 60, 16,8), Chunk.map); tmp.Fixture.Body.Rotation = (float)Math.PI; break; case Direction.East: break; case Direction.West: break; } } }
/// <summary> /// Abstract class for Generating /// </summary> /// <param name="Chunk">Chunk to generate in</param> public abstract void Generate(Chunk Chunk);