class_name Chunk extends Object ## A Chunk of map data and bundled metadata, always aligned to CHUNK_WIDTH and CHUNK_HEIGHT ## The default data values are 0, which means "NOT SET" ## Chunks can be partially unset, to allow for prefabs ## Any values of -1 are "NOT VALID" const CHUNK_WIDTH: int = 16 const CHUNK_HEIGHT: int = 16 var data: PackedInt32Array var x: int var y: int func _init(_x: int, _y: int): assert(_x % CHUNK_WIDTH == 0) assert(_y % CHUNK_HEIGHT == 0) x = _x y = _y data = PackedInt32Array() data.resize(CHUNK_WIDTH * CHUNK_HEIGHT) data.fill(0) func get_tile(tile_x: int, tile_y: int) -> int: if tile_x < 0 or tile_y < 0 or tile_x >= CHUNK_WIDTH or tile_y >= CHUNK_HEIGHT: return -1 return data[tile_y * CHUNK_WIDTH + tile_x] func set_tile(tile_x: int, tile_y: int, value: int) -> int: assert(value > 0) #do NOT clear a tile with this function if tile_x < 0 or tile_y < 0 or tile_x >= CHUNK_WIDTH or tile_y >= CHUNK_HEIGHT: return -1 data[tile_y * CHUNK_WIDTH + tile_x] = value return value