import numpy as np import random from settings import WorldSettings class ArtisticClimateGenerator: def __init__(self, height_map: np.ndarray, settings: WorldSettings): self.height_map = height_map self.settings = settings random.seed(settings.get_valid_seed()) # Оригинальные цвета из ClimateGenerator self.biome_colors = { 'water': (0.2, 0.4, 0.8, 1.0), 'ice': (0.95, 0.95, 0.98, 0.8), 'tundra': (0.4, 0.6, 0.9, 0.9), 'taiga': (0.1, 0.3, 0.15, 1.0), 'forest': (0.3, 0.6, 0.3, 1.0), 'desert': (0.9, 0.6, 0.2, 1.0), 'steppe': (0.8, 0.75, 0.5, 1.0), 'swamp': (0.4, 0.35, 0.2, 0.9), 'jungle': (0.1, 0.5, 0.1, 1.0), 'savanna': (0.8, 0.7, 0.3, 1.0) } def generate_biome_map(self, enabled_biomes=None) -> np.ndarray: """Полностью случайное распределение биомов""" if enabled_biomes is None: enabled_biomes = list(self.biome_colors.keys()) height, width = self.height_map.shape biome_map = np.zeros((height, width, 4), dtype=np.float32) # Включаем воду, если она есть в списке water_included = 'water' in enabled_biomes water_level = 0.05 for y in range(height): for x in range(width): # Если это вода - рисуем воду и переходим к следующей точке if water_included and self.height_map[y,x] < water_level: biome_map[y,x] = self.biome_colors['water'] continue # Случайный выбор любого биома available_biomes = [b for b in enabled_biomes if b != 'water'] or ['forest'] random_biome = random.choice(available_biomes) biome_map[y,x] = self.biome_colors[random_biome] return biome_map