public static void Fill(MapBlock _block, int _worldSeed, EMapBlockTypes _baseType) { if (_baseType == EMapBlockTypes.NONE) { return; } switch (Constants.WORLD_SEED) { case 0: World.TheWorld.Avatar.GeoInfo.Layer.Ambient = FColor.Empty; _block.Map[16, 16] = ETerrains.GRAY_BRICK_WALL; _block.AddEssence(new IndoorLight(new LightSource(18, new FColor(1f, 1f, 0f, 0f)), EssenceHelper.GetFirstFoundedMaterial <MetalMaterial>()), new Point(10, 17)); _block.AddEssence(new IndoorLight(new LightSource(18, new FColor(1f, 0f, 1f, 0f)), EssenceHelper.GetFirstFoundedMaterial <MetalMaterial>()), new Point(22, 22)); _block.AddEssence(new IndoorLight(new LightSource(18, new FColor(1f, 0f, 0f, 1f)), EssenceHelper.GetFirstFoundedMaterial <MetalMaterial>()), new Point(22, 10)); break; case 1: _block.AddEssence(EssenceHelper.GetFirstFoundedThing <ClosedDoor>(), new Point(2, 1)); _block.AddEssence(EssenceHelper.GetFirstFoundedThing <ClosedDoor>(), new Point(1, 2)); _block.AddEssence(EssenceHelper.GetRandomFakedItem <AbstractWeapon>(World.Rnd), new Point(4, 1)); _block.AddEssence(EssenceHelper.GetRandomFakedItem <AbstractWeapon>(World.Rnd), new Point(3, 2)); break; case 2: _block.AddEssence(new MagicPlate(EssenceHelper.GetFirstFoundedMaterial <MetalMaterial>(), 0, EMagicPlateEffect.RANDOM_MONSTER_APPEAR), new Point(10, 10)); _block.AddEssence(new Button(EssenceHelper.GetFirstFoundedMaterial <MetalMaterial>(), 0), new Point(1, 1)); break; } }
private void CreateDoor(MapBlock _mapBlock, ETerrains _floor, IEnumerable <Point> _borderPoints) { var doorCoords = Room.RoomRectangle.Center; var prevPoint = doorCoords; var direction = World.Rnd.GetRandomDirection(); var delta = direction.GetDelta(); while (!_borderPoints.Contains(doorCoords)) { prevPoint = doorCoords; doorCoords += delta; } var nextPoint = doorCoords + delta; var borders = direction.GetBorders().ToArray(); DoorWorldCoords = _mapBlock.ToWorldCoords(doorCoords); OutDoorWorldCoords = new[] { nextPoint + borders[0].Key, nextPoint, nextPoint + borders[1].Key }.Select(_mapBlock.ToWorldCoords).ToArray(); InDoorWorldCoords = new[] { prevPoint + borders[0].Key, prevPoint, prevPoint + borders[1].Key }.Select(_mapBlock.ToWorldCoords).ToArray(); _mapBlock.Map[doorCoords.X, doorCoords.Y] = _floor; var doors = EssenceHelper.GetAllThings <ClosedDoor>().ToArray(); _mapBlock.AddEssence(doors[0], doorCoords); }
private static void AddItems(MapBlock _block, Random _rnd) { var itmcnt = 20 + _rnd.Next(_rnd.Next(20)); for (var i = 0; i < itmcnt; ++i) { var x = _rnd.Next(Constants.MAP_BLOCK_SIZE); var y = _rnd.Next(Constants.MAP_BLOCK_SIZE); var attr = TerrainAttribute.GetAttribute(_block.Map[x, y]); if (attr.IsPassable) { var point = new Point(x, y); var any = _block.Objects.Where(_tuple => _tuple.Item2 == point).Select(_tuple => _tuple.Item1); var thing = EssenceHelper.GetRandomFakedItem(_rnd); if (any.Any(_thing => !(_thing is Item))) { continue; } _block.AddEssence(thing, point); } } }
protected override MapBlock GenerateBlock(Point _blockId) { var block = new MapBlock(_blockId); var rnd = new Random(block.RandomSeed); MapBlockHelper.Clear(block, rnd, this, DefaultEmptySpaces); const int v = Constants.MAP_BLOCK_SIZE / 2 - 2; for (var i = 0; i < v; ++i) { block.Map[i, 0] = ETerrains.STONE_WALL; block.Map[0, i] = ETerrains.STONE_WALL; block.Map[Constants.MAP_BLOCK_SIZE - 1 - i, 0] = ETerrains.STONE_WALL; block.Map[0, Constants.MAP_BLOCK_SIZE - 1 - i] = ETerrains.STONE_WALL; } block.AddEssence(new OnWallTorch(new LightSource(8, new FColor(5f, 1f, 0, 0)), EDirections.DOWN, EssenceHelper.GetFirstFoundedMaterial <WoodMaterial>()), new Point(1, 1)); block.AddEssence(new OnWallTorch(new LightSource(8, new FColor(1f, 0f, 1f, 0f)), EDirections.UP, EssenceHelper.GetFirstFoundedMaterial <WoodMaterial>()), new Point(Constants.MAP_BLOCK_SIZE - 1, Constants.MAP_BLOCK_SIZE - 1)); block.AddEssence(new OnWallTorch(new LightSource(8, new FColor(1f, 0f, 0f, 1f)), EDirections.RIGHT, EssenceHelper.GetFirstFoundedMaterial <WoodMaterial>()), new Point(Constants.MAP_BLOCK_SIZE - 1, 1)); block.AddEssence(new OnWallTorch(new LightSource(8, new FColor(1f, 1f, 0f, 1f)), EDirections.LEFT, EssenceHelper.GetFirstFoundedMaterial <WoodMaterial>()), new Point(1, Constants.MAP_BLOCK_SIZE - 1)); { var x = rnd.Next(Constants.MAP_BLOCK_SIZE); var y = rnd.Next(Constants.MAP_BLOCK_SIZE); block.CreaturesAdd(EssenceHelper.GetFirstFoundedCreature <AbstractMonster>(), new Point(x, y)); } block.Map[9, 9] = ETerrains.RED_BRICK_WALL; block.Map[10, 9] = ETerrains.RED_BRICK_WINDOW; block.Map[11, 9] = ETerrains.RED_BRICK_WALL; block.Map[11, 10] = ETerrains.RED_BRICK_WINDOW; block.Map[9, 10] = ETerrains.RED_BRICK_WINDOW; block.Map[9, 11] = ETerrains.RED_BRICK_WALL; block.AddEssence(new ClosedDoor(null), new Point(10, 11)); block.Map[11, 11] = ETerrains.RED_BRICK_WALL; //block.AddLightSource(new Point(10, 10), new LightSource(18, new FColor(53f, 0f, 1f, 1f))); return(block); }
protected override MapBlock GenerateBlock(Point _blockId) { var block = new MapBlock(_blockId); var rnd = new Random(block.RandomSeed); MapBlockHelper.Clear(block, rnd, this, DefaultEmptySpaces); const int v = Constants.MAP_BLOCK_SIZE/2 - 2; for (var i = 0; i < v; ++i) { block.Map[i, 0] = ETerrains.STONE_WALL; block.Map[0, i] = ETerrains.STONE_WALL; block.Map[Constants.MAP_BLOCK_SIZE - 1 - i, 0] = ETerrains.STONE_WALL; block.Map[0, Constants.MAP_BLOCK_SIZE - 1 - i] = ETerrains.STONE_WALL; } block.AddEssence(new OnWallTorch(new LightSource(8, new FColor(5f, 1f, 0, 0)), EDirections.DOWN, EssenceHelper.GetFirstFoundedMaterial<WoodMaterial>()), new Point(1, 1)); block.AddEssence(new OnWallTorch(new LightSource(8, new FColor(1f, 0f, 1f, 0f)), EDirections.UP, EssenceHelper.GetFirstFoundedMaterial<WoodMaterial>()), new Point(Constants.MAP_BLOCK_SIZE - 1, Constants.MAP_BLOCK_SIZE - 1)); block.AddEssence(new OnWallTorch(new LightSource(8, new FColor(1f, 0f, 0f, 1f)), EDirections.RIGHT, EssenceHelper.GetFirstFoundedMaterial<WoodMaterial>()), new Point(Constants.MAP_BLOCK_SIZE - 1, 1)); block.AddEssence(new OnWallTorch(new LightSource(8, new FColor(1f, 1f, 0f, 1f)), EDirections.LEFT, EssenceHelper.GetFirstFoundedMaterial<WoodMaterial>()), new Point(1, Constants.MAP_BLOCK_SIZE - 1)); { var x = rnd.Next(Constants.MAP_BLOCK_SIZE); var y = rnd.Next(Constants.MAP_BLOCK_SIZE); block.CreaturesAdd(EssenceHelper.GetFirstFoundedCreature<AbstractMonster>(), new Point(x, y)); } block.Map[9, 9] = ETerrains.RED_BRICK_WALL; block.Map[10, 9] = ETerrains.RED_BRICK_WINDOW; block.Map[11, 9] = ETerrains.RED_BRICK_WALL; block.Map[11, 10] = ETerrains.RED_BRICK_WINDOW; block.Map[9, 10] = ETerrains.RED_BRICK_WINDOW; block.Map[9, 11] = ETerrains.RED_BRICK_WALL; block.AddEssence(new ClosedDoor(null), new Point(10, 11)); block.Map[11, 11] = ETerrains.RED_BRICK_WALL; //block.AddLightSource(new Point(10, 10), new LightSource(18, new FColor(53f, 0f, 1f, 1f))); return block; }
private static void GenerateRandomItems(Random _rnd, MapBlock _block) { var itmcnt = 20 + _rnd.Next(_rnd.Next(20)); for (var i = 0; i < itmcnt; ++i) { var x = _rnd.Next(Constants.MAP_BLOCK_SIZE); var y = _rnd.Next(Constants.MAP_BLOCK_SIZE); var attr = TerrainAttribute.GetAttribute(_block.Map[x, y]); if (attr.IsNotPassable) { continue; } var point = new Point(x, y); var thing = World.Rnd.Next(2) == 0 ? EssenceHelper.GetFakedThing(_rnd) : EssenceHelper.GetRandomFakedItem(_rnd); if (thing.Is <Stair>()) { if (x == Constants.MAP_BLOCK_SIZE - 1 || y == Constants.MAP_BLOCK_SIZE - 1) { continue; } } var any = _block.Objects.Where(_tuple => _tuple.Item2 == point).Select(_tuple => _tuple.Item1); if (thing is Item) { if (any.Any(_thing => !(_thing is Item))) { continue; } } else if (any.Any()) { continue; } _block.AddEssence(thing, point); } }
public override void Fill(MapBlock _block, WorldLayer _layer) { var rnd = new Random(_block.RandomSeed); InDoorWorldCoords = Room.RoomRectangle.Inflate(-1, -1).BorderPoints.ToArray(); OutDoorWorldCoords = Room.RoomRectangle.BorderPoints.ToArray(); MapBlockHelper.Fill(_block, rnd, _layer, _layer.DefaultEmptySpaces, Room.AreaRectangle); var graves = EssenceHelper.GetAllThings<Grave>().ToArray(); foreach (var point in Room.RoomRectangle.AllPoints) { if (rnd.Next(4) == 0 && !InDoorWorldCoords.Contains(point)) { _block.AddEssence(graves.RandomItem(rnd), point); } } }
public override void Fill(MapBlock _block, WorldLayer _layer) { var rnd = new Random(_block.RandomSeed); InDoorWorldCoords = Room.RoomRectangle.Inflate(-1, -1).BorderPoints.ToArray(); OutDoorWorldCoords = Room.RoomRectangle.BorderPoints.ToArray(); MapBlockHelper.Fill(_block, rnd, _layer, _layer.DefaultEmptySpaces, Room.AreaRectangle); var graves = EssenceHelper.GetAllThings <Grave>().ToArray(); foreach (var point in Room.RoomRectangle.AllPoints) { if (rnd.Next(4) == 0 && !InDoorWorldCoords.Contains(point)) { _block.AddEssence(graves.RandomItem(rnd), point); } } }
protected override MapBlock GenerateBlock(Point _blockId) { var block = new MapBlock(_blockId); block.Clear(World.Rnd, this, DefaultEmptySpaces); if (_blockId.Y == 0 && _blockId.X == 0) { //block.Fill(World.Rnd, this, DefaultEmptySpaces, new Rct(0, 0, Constants.MAP_BLOCK_SIZE, 13)); block.AddEssence(new IndoorLight(new LightSource(38, new FColor(1f, 1f, 1f, 1f)), EssenceHelper.GetFirstFoundedMaterial <MetalMaterial>()), new Point(2, 4)); block.Map[1, 0] = ETerrains.STONE_WALL; block.Map[1, 1] = ETerrains.STONE_WALL; block.Map[1, 2] = ETerrains.STONE_WALL; block.Map[1, 3] = ETerrains.STONE_WALL; block.Map[1, 4] = ETerrains.STONE_WALL; block.Map[1, 5] = ETerrains.STONE_WALL; block.Map[1, 6] = ETerrains.STONE_WALL; //block.Map[3, 1] = ETerrains.STONE_WALL; //block.Map[3, 2] = ETerrains.YELLOW_BRICK_WINDOW; //block.AddEssence(new IndoorLight(new LightSource(18, new FColor(1f, 1f, 1f, 0f)), EssenceHelper.GetFirstFoundedMaterial<MetalMaterial>()), new Point(10, 10)); //block.AddEssence(new IndoorLight(new LightSource(18, new FColor(1f, 0f, 1f, 0f)), EssenceHelper.GetFirstFoundedMaterial<MetalMaterial>()), new Point(15, 0)); //block.Map[1, 2] = ETerrains.STONE_WALL; //block.Map[2, 2] = ETerrains.STONE_WALL; //block.Map[3, 2] = ETerrains.STONE_WALL; //block.Map[0, 3] = ETerrains.STONE_WALL; //block.Map[0, 4] = ETerrains.STONE_WALL; //block.Map[0, 5] = ETerrains.STONE_WALL; } else { //block.Clear(World.Rnd, this, DefaultWalls); } return(block); }
private void CreateDoor(MapBlock _mapBlock, ETerrains _floor, IEnumerable<Point> _borderPoints) { var doorCoords = Room.RoomRectangle.Center; var prevPoint = doorCoords; var direction = World.Rnd.GetRandomDirection(); var delta = direction.GetDelta(); while (!_borderPoints.Contains(doorCoords)) { prevPoint = doorCoords; doorCoords += delta; } var nextPoint = doorCoords + delta; var borders = direction.GetBorders().ToArray(); DoorWorldCoords = _mapBlock.ToWorldCoords(doorCoords); OutDoorWorldCoords = new[] {nextPoint + borders[0].Key, nextPoint, nextPoint + borders[1].Key}.Select(_mapBlock.ToWorldCoords).ToArray(); InDoorWorldCoords = new[] {prevPoint + borders[0].Key, prevPoint, prevPoint + borders[1].Key}.Select(_mapBlock.ToWorldCoords).ToArray(); _mapBlock.Map[doorCoords.X, doorCoords.Y] = _floor; var doors = EssenceHelper.GetAllThings<ClosedDoor>().ToArray(); _mapBlock.AddEssence(doors[0], doorCoords); }