38 lines
1.0 KiB
GDScript
38 lines
1.0 KiB
GDScript
extends Resource
|
|
|
|
static var IdleState = preload("res://player/states/idle.gd")
|
|
static var FallState = preload("res://player/states/fall.gd")
|
|
|
|
static func build_states() -> Array[State]:
|
|
var list: Array[State] = []
|
|
list.append(_named(IdleState.new(), &"idle"))
|
|
list.append(_named(FallState.new(), &"fall"))
|
|
return list
|
|
|
|
static func build_transitions() -> Array[StateTransition]:
|
|
var list: Array[StateTransition] = []
|
|
|
|
var t_is_on_floor = TransitionCondition.new(func(data):
|
|
return data.is_on_floor()
|
|
)
|
|
var t_n_is_on_floor = TransitionCondition.new(func(data):
|
|
return !data.is_on_floor()
|
|
)
|
|
|
|
list.append(_edge(&"idle", &"fall", t_n_is_on_floor, 10))
|
|
list.append(_edge(&"fall", &"idle", t_is_on_floor, 10))
|
|
|
|
return list
|
|
|
|
static func _named(state: State, id: StringName) -> State:
|
|
state.id = id
|
|
return state
|
|
|
|
static func _edge(from: StringName, to: StringName, condition: TransitionCondition, priority: int) -> StateTransition:
|
|
var t:= StateTransition.new()
|
|
t.from = from
|
|
t.to = to
|
|
t.condition = condition
|
|
t.priority = priority
|
|
return t
|