extends Node enum BlockType { AIR = 0, WATER = 1, SAND = 2, ROCK = 3, CORAL_RED = 4, CORAL_BLUE = 5, KELP = 6, WRECK_WOOD = 7, ICE = 8, BEDROCK = 9, GLOW_CORAL_CYAN = 10, GLOW_CORAL_VIOLET = 11, LAVA_VENT = 12 } # Atlas is 4x4 tiles, each tile = 0.25 of atlas width/height const ATLAS_TILE_SIZE: Vector2 = Vector2(0.25, 0.25) const _BLOCKS: Dictionary = { BlockType.AIR: { "name": "Air", "color": Color(0.0, 0.0, 0.0, 0.0), "hardness": 0.0, "drops": [], "atlas_uv": Vector2(0.0, 0.0) # unused, AIR not rendered }, BlockType.WATER: { "name": "Eau", "color": Color(0.1, 0.4, 0.8, 0.6), "hardness": 0.0, "drops": [], "atlas_uv": Vector2(0.0, 0.0) # unused, WATER not solid }, BlockType.SAND: { "name": "Sable", "color": Color(0.76, 0.70, 0.50, 1.0), "hardness": 0.5, "drops": [BlockType.SAND], "atlas_uv": Vector2(0.0, 0.0) # row 0, col 0 }, BlockType.ROCK: { "name": "Roche", "color": Color(0.45, 0.45, 0.45, 1.0), "hardness": 2.0, "drops": [BlockType.ROCK], "atlas_uv": Vector2(0.25, 0.0) # row 0, col 1 }, BlockType.CORAL_RED: { "name": "Corail Rouge", "color": Color(0.90, 0.25, 0.20, 1.0), "hardness": 0.3, "drops": [BlockType.CORAL_RED], "atlas_uv": Vector2(0.5, 0.0) # row 0, col 2 }, BlockType.CORAL_BLUE: { "name": "Corail Bleu", "color": Color(0.20, 0.50, 0.95, 1.0), "hardness": 0.3, "drops": [BlockType.CORAL_BLUE], "atlas_uv": Vector2(0.75, 0.0) # row 0, col 3 }, BlockType.KELP: { "name": "Algue", "color": Color(0.15, 0.60, 0.20, 1.0), "hardness": 0.1, "drops": [BlockType.KELP], "atlas_uv": Vector2(0.0, 0.25) # row 1, col 0 }, BlockType.WRECK_WOOD: { "name": "Bois d'Épave", "color": Color(0.35, 0.22, 0.12, 1.0), "hardness": 1.0, "drops": [BlockType.WRECK_WOOD], "atlas_uv": Vector2(0.25, 0.25) # row 1, col 1 }, BlockType.ICE: { "name": "Glace", "color": Color(0.75, 0.90, 1.0, 0.85), "hardness": 0.8, "drops": [], "atlas_uv": Vector2(0.5, 0.25) # row 1, col 2 }, BlockType.BEDROCK: { "name": "Bedrock", "color": Color(0.15, 0.15, 0.15, 1.0), "hardness": -1.0, "drops": [], "atlas_uv": Vector2(0.75, 0.25) # row 1, col 3 }, BlockType.GLOW_CORAL_CYAN: { "name": "Corail Bio Cyan", "color": Color(0.2, 0.8, 1.0, 1.0), "hardness": 0.3, "drops": [BlockType.GLOW_CORAL_CYAN], "atlas_uv": Vector2(0.0, 0.5), # row 2, col 0 "emission": Color(0.2, 0.8, 1.0), "emission_energy": 3.0 }, BlockType.GLOW_CORAL_VIOLET: { "name": "Corail Bio Violet", "color": Color(0.7, 0.3, 0.9, 1.0), "hardness": 0.3, "drops": [BlockType.GLOW_CORAL_VIOLET], "atlas_uv": Vector2(0.25, 0.5), # row 2, col 1 "emission": Color(0.7, 0.3, 0.9), "emission_energy": 3.0 }, BlockType.LAVA_VENT: { "name": "Cheminée Hydrothermale", "color": Color(1.0, 0.5, 0.1, 1.0), "hardness": 3.0, "drops": [BlockType.LAVA_VENT], "atlas_uv": Vector2(0.5, 0.5), # row 2, col 2 "emission": Color(1.0, 0.5, 0.1), "emission_energy": 3.0 } } func get_atlas_uv(id: int) -> Vector2: if _BLOCKS.has(id): return _BLOCKS[id]["atlas_uv"] return Vector2(0.0, 0.0) func is_solid(id: int) -> bool: if id == BlockType.AIR or id == BlockType.WATER or id == BlockType.KELP: return false return true func get_color(id: int) -> Color: if _BLOCKS.has(id): return _BLOCKS[id]["color"] return Color(1.0, 0.0, 1.0, 1.0) func get_block_name(id: int) -> String: if _BLOCKS.has(id): return _BLOCKS[id]["name"] return "Unknown" func get_hardness(id: int) -> float: if _BLOCKS.has(id): return _BLOCKS[id]["hardness"] return 1.0 func get_drops(id: int) -> Array: if _BLOCKS.has(id): return _BLOCKS[id]["drops"] return [] func is_emissive(id: int) -> bool: if _BLOCKS.has(id): return _BLOCKS[id].has("emission") return false func get_emission_color(id: int) -> Color: if _BLOCKS.has(id) and _BLOCKS[id].has("emission"): return _BLOCKS[id]["emission"] return Color(0.0, 0.0, 0.0) func get_emission_energy(id: int) -> float: if _BLOCKS.has(id) and _BLOCKS[id].has("emission_energy"): return _BLOCKS[id]["emission_energy"] return 1.0