Files
wave/wfc/chunk.gd
2026-01-07 17:40:58 +11:00

32 lines
1.0 KiB
GDScript

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