32 lines
1.0 KiB
GDScript
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
|