Files
TheTree_mock/scripts/core/command.gd
T

91 lines
2.1 KiB
GDScript

class_name SimulationCommand
extends RefCounted
var command_id := 0
var issued_tick := 0
var execute_tick := 0
var priority := 0
var command_type: StringName = &""
var actor_id: StringName = &""
var target_id: StringName = &""
var payload: Dictionary = {}
var idempotency_key: StringName = &""
func _init(
p_command_id: int = 0,
p_issued_tick: int = 0,
p_execute_tick: int = 0,
p_priority: int = 0,
p_command_type: StringName = &"",
p_actor_id: StringName = &"",
p_target_id: StringName = &"",
p_payload: Dictionary = {},
p_idempotency_key: StringName = &""
) -> void:
command_id = p_command_id
issued_tick = p_issued_tick
execute_tick = p_execute_tick
priority = p_priority
command_type = p_command_type
actor_id = p_actor_id
target_id = p_target_id
payload = p_payload.duplicate(true)
idempotency_key = p_idempotency_key
func validation_error() -> String:
if command_id <= 0:
return "command_id must be greater than zero."
if issued_tick < 0:
return "issued_tick cannot be negative."
if execute_tick < issued_tick:
return "execute_tick cannot be earlier than issued_tick."
return ""
func is_valid() -> bool:
return validation_error().is_empty()
func copy() -> SimulationCommand:
return SimulationCommand.new(
command_id,
issued_tick,
execute_tick,
priority,
command_type,
actor_id,
target_id,
payload,
idempotency_key
)
func to_dictionary() -> Dictionary:
return {
"command_id": command_id,
"issued_tick": issued_tick,
"execute_tick": execute_tick,
"priority": priority,
"command_type": String(command_type),
"actor_id": String(actor_id),
"target_id": String(target_id),
"payload": payload.duplicate(true),
"idempotency_key": String(idempotency_key),
}
static func from_dictionary(data: Dictionary) -> SimulationCommand:
return SimulationCommand.new(
int(data.get("command_id", 0)),
int(data.get("issued_tick", 0)),
int(data.get("execute_tick", 0)),
int(data.get("priority", 0)),
StringName(data.get("command_type", "")),
StringName(data.get("actor_id", "")),
StringName(data.get("target_id", "")),
data.get("payload", {}) as Dictionary,
StringName(data.get("idempotency_key", ""))
)