render: extract M2 build dispatch planner
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
class_name M2BuildDispatchPlanner
|
||||
extends RefCounted
|
||||
|
||||
## Selects the next M2 build action from already observed resource state.
|
||||
## The planner retains no state or engine-object references.
|
||||
|
||||
const ACTION_WAIT_FOR_ANIMATION := &"wait_for_animation"
|
||||
const ACTION_MATERIALIZE_ANIMATED := &"materialize_animated"
|
||||
const ACTION_WAIT_FOR_STATIC_MESH := &"wait_for_static_mesh"
|
||||
const ACTION_MATERIALIZE_STATIC := &"materialize_static"
|
||||
const ACTION_ADVANCE_WITHOUT_MATERIALIZATION := &"advance_without_materialization"
|
||||
|
||||
|
||||
## Returns a detached action/transition plan for one M2 build operation.
|
||||
func plan_step(
|
||||
batch_count: int,
|
||||
animation_request_pending: bool,
|
||||
has_animated_prototype: bool,
|
||||
has_static_mesh: bool,
|
||||
static_model_missing: bool
|
||||
) -> Dictionary:
|
||||
if animation_request_pending:
|
||||
return _wait_plan(ACTION_WAIT_FOR_ANIMATION)
|
||||
if batch_count <= 0:
|
||||
return _advance_plan(ACTION_ADVANCE_WITHOUT_MATERIALIZATION, false)
|
||||
if has_animated_prototype:
|
||||
return _advance_plan(ACTION_MATERIALIZE_ANIMATED, true)
|
||||
if has_static_mesh:
|
||||
return _advance_plan(ACTION_MATERIALIZE_STATIC, true)
|
||||
if static_model_missing:
|
||||
return _advance_plan(ACTION_ADVANCE_WITHOUT_MATERIALIZATION, true)
|
||||
return _wait_plan(ACTION_WAIT_FOR_STATIC_MESH)
|
||||
|
||||
|
||||
func _wait_plan(action: StringName) -> Dictionary:
|
||||
return {
|
||||
"action": action,
|
||||
"rotate_queue": true,
|
||||
"increment_batch_serial": false,
|
||||
}
|
||||
|
||||
|
||||
func _advance_plan(action: StringName, increment_batch_serial: bool) -> Dictionary:
|
||||
return {
|
||||
"action": action,
|
||||
"rotate_queue": false,
|
||||
"increment_batch_serial": increment_batch_serial,
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://df0bv1x2x4j2x
|
||||
Reference in New Issue
Block a user