WIP checkpoint: Address review feedback: Implement chunk streaming system in GDScript
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user