Naive WFC kind of working
This commit is contained in:
31
wfc/chunk.gd
Normal file
31
wfc/chunk.gd
Normal file
@@ -0,0 +1,31 @@
|
||||
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
|
||||
Reference in New Issue
Block a user