Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
                }
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
		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;
		}
Beispiel #6
0
        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);
                }
            }
        }
Beispiel #9
0
        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 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);
				}
			}
		}
Beispiel #11
0
		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);
		}