WIP checkpoint: Address review feedback: Implement chunk streaming system in GDScript

This commit is contained in:
2026-08-18 02:40:34 +00:00
parent 1c5c0f8c8e
commit 929c69e5da
+11 -32
View File
@@ -107,27 +107,6 @@ class TileLayerData:
return null return null
## A single tile definition (palette entry).
class TileDef:
var id: int = 0
var asset_id: String = ""
var solid: bool = false
var flags: int = 0
var variants: int = 1
func is_solid() -> bool:
return solid
func is_walkable() -> bool:
return (flags & 0x01) != 0
func is_climbable() -> bool:
return (flags & 0x02) != 0
func is_liquid() -> bool:
return (flags & 0x04) != 0
## A world object parsed from chunk data. ## A world object parsed from chunk data.
class WorldObjectData: class WorldObjectData:
var id: String = "" var id: String = ""
@@ -159,9 +138,9 @@ class ChunkPayload:
var checksum: String = "" var checksum: String = ""
# ─── Binary Decoding ──────────────────────────────────────────────────────── # ───────────────── Binary Decoding ─────────────────
const MAGIC: PackedByteArray = PackedByteArray([0x41, 0x47, 0x50, 0x43]) # "AGPC" static var MAGIC := PackedByteArray([0x41, 0x47, 0x50, 0x43]) # "AGPC"
const HEADER_SIZE: int = 48 const HEADER_SIZE: int = 48
const SECTION_META: int = 0x01 const SECTION_META: int = 0x01
const SECTION_TILE: int = 0x02 const SECTION_TILE: int = 0x02
@@ -274,7 +253,7 @@ static func encode_binary(payload: ChunkPayload) -> PackedByteArray:
return header + payload_bytes return header + payload_bytes
# ─── Section Parsers ──────────────────────────────────────────────────────── # ───────────────── Section Parsers ─────────────────
static func _parse_metadata_section(data: PackedByteArray, result: ChunkPayload) -> void: static func _parse_metadata_section(data: PackedByteArray, result: ChunkPayload) -> void:
var offset := 0 var offset := 0
@@ -496,7 +475,7 @@ static func _parse_revision_meta_section(data: PackedByteArray, result: ChunkPay
result.author = data.slice(offset, offset + author_len).get_string_from_utf8() result.author = data.slice(offset, offset + author_len).get_string_from_utf8()
# ─── Section Builders ─────────────────────────────────────────────────────── # ───────────────── Section Builders ─────────────────
static func _build_metadata_section(payload: ChunkPayload) -> PackedByteArray: static func _build_metadata_section(payload: ChunkPayload) -> PackedByteArray:
var data := PackedByteArray() var data := PackedByteArray()
@@ -607,7 +586,7 @@ static func _wrap_section(data: PackedByteArray, section_id: int) -> PackedByteA
return wrapped return wrapped
# ─── Binary Helpers ───────────────────────────────────────────────────────── # ───────────────── Binary Helpers ─────────────────
static func _read_uint16(data: PackedByteArray, offset: int) -> int: static func _read_uint16(data: PackedByteArray, offset: int) -> int:
return data[offset] | (data[offset + 1] << 8) return data[offset] | (data[offset + 1] << 8)
@@ -668,18 +647,18 @@ static func _write_string(s: String) -> PackedByteArray:
static func _hex_to_bytes(hex_str: String) -> PackedByteArray: static func _hex_to_bytes(hex_str: String) -> PackedByteArray:
var result := PackedByteArray() var result := PackedByteArray()
for i in range(0, hex_str.length(), 2): for i in range(0, hex_str.length(), 2):
var byte_val := int("0x" + hex_str.substr(i, 2), 16) var byte_val := ("0x" + hex_str.substr(i, 2)).hex_to_int()
result.append(byte_val) result.append(byte_val)
return result return result
# ─── SHA-256 ──────────────────────────────────────────────────────────────── # ───────────────── SHA-256 ─────────────────
static func _sha256_hex(data: PackedByteArray) -> String: static func _sha256_hex(data: PackedByteArray) -> String:
var sha256 := SHA256Hash.new() var ctx := HashingContext.new()
sha256.start() ctx.start(HashingContext.HASH_SHA256)
sha256.update(data) ctx.update(data)
var hash := sha256.finish() var hash := ctx.finish()
var hex_chars := "0123456789abcdef" var hex_chars := "0123456789abcdef"
var result := "" var result := ""
for byte_val in hash: for byte_val in hash: