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

64 lines
1.9 KiB
GDScript

extends Node
#Master list of chunks
var _chunks: Array[Chunk] = []
#Create some test samples - these samples must ALWAYS be 9-elements long, 5th element is the result
var _samples: Array[PackedInt32Array] = [
[1,1,1, 1,1,1, 1,1,1],
]
@onready
var wfc: Node = get_node("../Generator")
func _ready() -> void:
var ruleset: PackedInt32Array = read_sample_ruleset("sample1.png")
var samples: Array[PackedInt32Array] = parse_samples_from_ruleset(ruleset)
#print(ruleset)
#print(samples)
wfc.generate_chunk_at(0,0,_chunks,samples)
## Read the png file, and parse it to a useable ruleset
func read_sample_ruleset(filename: String) -> PackedInt32Array:
var img: Image = Image.load_from_file(filename)
var png: PackedByteArray = img.get_data()
var hex: PackedInt32Array = []
@warning_ignore("integer_division")
var size: int = (png.size() / 3)
hex.resize(size)
print(png)
for i in range(size): #the file is assumed to be in RGB format
hex[i] = (png[i * 3] << 16) | (png[i * 3 + 1] << 8) | (png[i * 3 + 2] << 0)
print(i, "(", hex[i], "): ", png[i * 3], ",", png[i * 3 + 1], ",", png[i * 3 + 2])
return hex
func parse_samples_from_ruleset(ruleset: PackedInt32Array) -> Array[PackedInt32Array]:
#for now, assume the ruleset is 8x8
const RULESET_WIDTH: int = 8
const RULESET_HEIGHT: int = 8
var samples: Array[PackedInt32Array] = []
for x in range(1, RULESET_WIDTH-1):
for y in range(1, RULESET_HEIGHT-1):
var sample: PackedInt32Array = [
ruleset[(y -1) * RULESET_WIDTH + (x -1)],
ruleset[(y -1) * RULESET_WIDTH + (x )],
ruleset[(y -1) * RULESET_WIDTH + (x +1)],
ruleset[(y ) * RULESET_WIDTH + (x -1)],
ruleset[(y ) * RULESET_WIDTH + (x )],
ruleset[(y ) * RULESET_WIDTH + (x +1)],
ruleset[(y +1) * RULESET_WIDTH + (x -1)],
ruleset[(y +1) * RULESET_WIDTH + (x )],
ruleset[(y +1) * RULESET_WIDTH + (x +1)],
]
samples.append(sample)
return samples