Address review feedback: Implement chunk streaming system in GDScript #20
@@ -107,27 +107,6 @@ class TileLayerData:
|
||||
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.
|
||||
class WorldObjectData:
|
||||
var id: String = ""
|
||||
@@ -159,9 +138,9 @@ class ChunkPayload:
|
||||
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 SECTION_META: int = 0x01
|
||||
const SECTION_TILE: int = 0x02
|
||||
@@ -274,7 +253,7 @@ static func encode_binary(payload: ChunkPayload) -> PackedByteArray:
|
||||
return header + payload_bytes
|
||||
|
||||
|
||||
# ─── Section Parsers ────────────────────────────────────────────────────────
|
||||
# ───────────────── Section Parsers ─────────────────
|
||||
|
||||
static func _parse_metadata_section(data: PackedByteArray, result: ChunkPayload) -> void:
|
||||
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()
|
||||
|
||||
|
||||
# ─── Section Builders ───────────────────────────────────────────────────────
|
||||
# ───────────────── Section Builders ─────────────────
|
||||
|
||||
static func _build_metadata_section(payload: ChunkPayload) -> PackedByteArray:
|
||||
var data := PackedByteArray()
|
||||
@@ -607,7 +586,7 @@ static func _wrap_section(data: PackedByteArray, section_id: int) -> PackedByteA
|
||||
return wrapped
|
||||
|
||||
|
||||
# ─── Binary Helpers ─────────────────────────────────────────────────────────
|
||||
# ───────────────── Binary Helpers ─────────────────
|
||||
|
||||
static func _read_uint16(data: PackedByteArray, offset: int) -> int:
|
||||
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:
|
||||
var result := PackedByteArray()
|
||||
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)
|
||||
return result
|
||||
|
||||
|
||||
# ─── SHA-256 ────────────────────────────────────────────────────────────────
|
||||
# ───────────────── SHA-256 ─────────────────
|
||||
|
||||
static func _sha256_hex(data: PackedByteArray) -> String:
|
||||
var sha256 := SHA256Hash.new()
|
||||
sha256.start()
|
||||
sha256.update(data)
|
||||
var hash := sha256.finish()
|
||||
var ctx := HashingContext.new()
|
||||
ctx.start(HashingContext.HASH_SHA256)
|
||||
ctx.update(data)
|
||||
var hash := ctx.finish()
|
||||
var hex_chars := "0123456789abcdef"
|
||||
var result := ""
|
||||
for byte_val in hash:
|
||||
|
||||
Reference in New Issue
Block a user