fix(M03): make WMO build queue cold-load safe
This commit is contained in:
@@ -35,9 +35,60 @@ func front_key() -> String:
|
||||
return _queued_placement_keys.front()
|
||||
|
||||
|
||||
## Returns the current typed job for a placement key, or null for a stale key.
|
||||
func job_for(placement_key: String) -> WmoRenderBuildJob:
|
||||
return _jobs_by_placement_key.get(placement_key, null) as WmoRenderBuildJob
|
||||
## Returns whether a FIFO placement key still has a current job record.
|
||||
func has_job(placement_key: String) -> bool:
|
||||
return _jobs_by_placement_key.has(placement_key)
|
||||
|
||||
|
||||
## Returns the current job record as its engine base type, or null for a stale
|
||||
## key. Runtime consumers should prefer the typed accessors below.
|
||||
func job_for(placement_key: String) -> RefCounted:
|
||||
return _jobs_by_placement_key.get(placement_key, null) as RefCounted
|
||||
|
||||
|
||||
## Returns the borrowed root for a current job, or null for a stale key.
|
||||
func root_for(placement_key: String) -> Node3D:
|
||||
var job := job_for(placement_key)
|
||||
if job == null:
|
||||
return null
|
||||
return job.call("root") as Node3D
|
||||
|
||||
|
||||
## Returns the borrowed render resource for a current job, or null when stale.
|
||||
func render_resource_for(placement_key: String) -> Resource:
|
||||
var job := job_for(placement_key)
|
||||
if job == null:
|
||||
return null
|
||||
return job.call("render_resource") as Resource
|
||||
|
||||
|
||||
## Returns the current mesh cursor, or zero for a stale key.
|
||||
func mesh_index_for(placement_key: String) -> int:
|
||||
var job := job_for(placement_key)
|
||||
if job == null:
|
||||
return 0
|
||||
return int(job.call("mesh_index"))
|
||||
|
||||
|
||||
## Returns the current MultiMesh cursor, or zero for a stale key.
|
||||
func multimesh_index_for(placement_key: String) -> int:
|
||||
var job := job_for(placement_key)
|
||||
if job == null:
|
||||
return 0
|
||||
return int(job.call("multimesh_index"))
|
||||
|
||||
|
||||
## Adopts both cursors for a current job and returns whether it existed.
|
||||
func adopt_cursors(
|
||||
placement_key: String,
|
||||
next_mesh_index: int,
|
||||
next_multimesh_index: int
|
||||
) -> bool:
|
||||
var job := job_for(placement_key)
|
||||
if job == null:
|
||||
return false
|
||||
job.call("adopt_cursors", next_mesh_index, next_multimesh_index)
|
||||
return true
|
||||
|
||||
|
||||
## Pops and returns the front FIFO key, or an empty String when already empty.
|
||||
@@ -79,9 +130,9 @@ func diagnostic_snapshot() -> Dictionary:
|
||||
var jobs: Array[Dictionary] = []
|
||||
for placement_key_variant in placement_keys:
|
||||
var placement_key := String(placement_key_variant)
|
||||
var job := job_for(placement_key)
|
||||
var job: RefCounted = job_for(placement_key)
|
||||
if job != null:
|
||||
jobs.append(job.diagnostic_snapshot())
|
||||
jobs.append(job.call("diagnostic_snapshot") as Dictionary)
|
||||
return {
|
||||
"queued_placement_keys": _queued_placement_keys.duplicate(),
|
||||
"jobs": jobs,
|
||||
|
||||
Reference in New Issue
Block a user