private static ObjectsPattern CreateGoldenChest() { var pattern = new ObjectsPattern(3, 3, 0.001); pattern.Add(1, 1, (level) => new ContainerObject(new ContainerObjectConfiguration { Name = "Chest", BlocksMovement = true, MaxHealth = 30, Size = ObjectSize.Big, ZIndex = ZIndex.BigDecoration, MinWoodCount = 1, MaxWoodCount = 4, ContainerType = "chest", LootLevelIncrement = 2, WorldImage = "Furniture_Chest_Golden" }, level)); pattern.AddRequirement(1, 1, RequirementIsEmpty); pattern.AddRequirement(0, 0, RequirementNotBlocking); pattern.AddRequirement(1, 0, RequirementNotBlocking); pattern.AddRequirement(2, 0, RequirementNotBlocking); pattern.AddRequirement(0, 1, RequirementNotBlocking); pattern.AddRequirement(2, 1, RequirementNotBlocking); pattern.AddRequirement(0, 2, RequirementNotBlocking); pattern.AddRequirement(1, 2, RequirementNotBlocking); pattern.AddRequirement(2, 2, RequirementNotBlocking); return(pattern); }
private static ObjectsPattern CreateStone() { var pattern = new ObjectsPattern(1, 1, 0.03); pattern.Add(0, 0, level => new Stone()); pattern.AddRequirement(0, 0, RequirementIsEmpty); return(pattern); }
private static ObjectsPattern CreateWaterPool() { var pattern = new ObjectsPattern(1, 1, 0.02); var volume = RandomHelper.GetRandomValue(20, 100); pattern.Add(0, 0, level => new WaterLiquid(volume)); return(pattern); }
private bool TryAddPattern(IAreaMap map, Point playerPosition, ObjectsPattern pattern) { var x = RandomHelper.GetRandomValue(0, map.Width); var y = RandomHelper.GetRandomValue(0, map.Height); if (!map.ContainsCell(x, y)) { return(false); } for (int cursorX = 0; cursorX < pattern.Width; cursorX++) { for (int cursorY = 0; cursorY < pattern.Height; cursorY++) { var posX = cursorX + x; var posY = cursorY + y; if (posX == playerPosition.X && posY == playerPosition.Y) { return(false); } var cell = map.TryGetCell(posX, posY); if (cell == null) { return(false); } if (!pattern.CheckRequirements(cursorX, cursorY, cell)) { return(false); } } } for (int cursorX = 0; cursorX < pattern.Width; cursorX++) { for (int cursorY = 0; cursorY < pattern.Height; cursorY++) { var posX = cursorX + x; var posY = cursorY + y; foreach (var factory in pattern.Get(cursorX, cursorY)) { map.AddObject(new Point(posX, posY), factory(map.Level)); } } } return(true); }
private static ObjectsPattern CreateTableWithChairs() { var pattern = new ObjectsPattern(5, 3, 0.0007); pattern.Add(1, 1, (level) => new FurnitureObject(new FurnitureObjectConfiguration { Name = "Chair", MaxHealth = 10, MaxWoodCount = 2, MinWoodCount = 0, Size = ObjectSize.Medium, ZIndex = ZIndex.BigDecoration, WorldImage = "Furniture_Chair_Right" })); pattern.Add(2, 1, (level) => new FurnitureObject(new FurnitureObjectConfiguration { Name = "Table", MaxHealth = 20, MaxWoodCount = 4, MinWoodCount = 1, Size = ObjectSize.Big, ZIndex = ZIndex.BigDecoration, BlocksMovement = true, WorldImage = "Furniture_Table" })); pattern.Add(3, 1, (level) => new FurnitureObject(new FurnitureObjectConfiguration { Name = "Chair", MaxHealth = 10, MaxWoodCount = 2, MinWoodCount = 0, Size = ObjectSize.Medium, ZIndex = ZIndex.BigDecoration, WorldImage = "Furniture_Chair_Left" })); pattern.AddRequirement(0, 0, RequirementIsEmpty); pattern.AddRequirement(1, 0, RequirementIsEmpty); pattern.AddRequirement(2, 0, RequirementIsEmpty); pattern.AddRequirement(3, 0, RequirementIsEmpty); pattern.AddRequirement(4, 0, RequirementIsEmpty); pattern.AddRequirement(0, 2, RequirementIsEmpty); pattern.AddRequirement(1, 2, RequirementIsEmpty); pattern.AddRequirement(2, 2, RequirementIsEmpty); pattern.AddRequirement(3, 2, RequirementIsEmpty); pattern.AddRequirement(4, 2, RequirementIsEmpty); return(pattern); }
private void AddPattern(IAreaMap map, Point playerPosition, ObjectsPattern pattern) { const int maxAttempts = 100; var attempt = 0; while (attempt < maxAttempts) { attempt++; if (TryAddPattern(map, playerPosition, pattern)) { return; } } }
private static ObjectsPattern CreateShelfUp() { var pattern = new ObjectsPattern(3, 3, 0.003); pattern.Add(1, 1, (level) => CreateShelf(level, "Furniture_Shelf_Up")); pattern.AddRequirement(1, 1, RequirementIsEmpty); pattern.AddRequirement(0, 0, RequirementIsEmpty); pattern.AddRequirement(1, 0, RequirementIsEmpty); pattern.AddRequirement(2, 0, RequirementIsEmpty); pattern.AddRequirement(0, 2, RequirementIsWall); pattern.AddRequirement(1, 2, RequirementIsWall); pattern.AddRequirement(2, 2, RequirementIsWall); pattern.AddRequirement(0, 1, RequirementIsAny); pattern.AddRequirement(2, 1, RequirementIsAny); return(pattern); }
private static ObjectsPattern CreateSpikedFloor() { var pattern = new ObjectsPattern(3, 3, 0.01); pattern.Add(1, 1, level => new SpikedFloorObject()); pattern.AddRequirement(1, 1, RequirementIsEmpty); pattern.AddRequirement(0, 0, RequirementNotBlocking); pattern.AddRequirement(1, 0, RequirementNotBlocking); pattern.AddRequirement(2, 0, RequirementNotBlocking); pattern.AddRequirement(0, 1, RequirementNotBlocking); pattern.AddRequirement(2, 1, RequirementNotBlocking); pattern.AddRequirement(0, 2, RequirementNotBlocking); pattern.AddRequirement(1, 2, RequirementNotBlocking); pattern.AddRequirement(2, 2, RequirementNotBlocking); return(pattern); }