State machine debug stats
This commit is contained in:
parent
c6db46fb8a
commit
036aac2977
|
@ -20,6 +20,12 @@ func stat_set(stat: Dictionary):
|
||||||
func set_text(node, stat):
|
func set_text(node, stat):
|
||||||
node.text = stat["key"] + ": " + stat["value"]
|
node.text = stat["key"] + ": " + stat["value"]
|
||||||
|
|
||||||
|
# Utility function for your leasure
|
||||||
|
func maybe_put_stat(stat_key, value: String):
|
||||||
|
if stat_key != null:
|
||||||
|
stat_key["value"] = value
|
||||||
|
stat_set(stat_key)
|
||||||
|
|
||||||
func _process(_delta):
|
func _process(_delta):
|
||||||
# Add fps stat
|
# Add fps stat
|
||||||
stat_set({ "key": "fps", "value": str(Engine.get_frames_per_second()) })
|
stat_set({ "key": "fps", "value": str(Engine.get_frames_per_second()) })
|
||||||
|
|
|
@ -1,18 +1,20 @@
|
||||||
|
# Place available states under this node.
|
||||||
|
# Provides the mechanism for switching states.
|
||||||
@icon("res://state_machine/think.png")
|
@icon("res://state_machine/think.png")
|
||||||
extends Node
|
extends Node
|
||||||
class_name StateMachine
|
class_name StateMachine
|
||||||
|
|
||||||
# Place available states under this node.
|
|
||||||
# Provides the mechanism for switching states.
|
|
||||||
|
|
||||||
@export var initial_state: NodePath
|
@export var initial_state: NodePath
|
||||||
var state: Node # Current state
|
var state: Node # Current state
|
||||||
|
|
||||||
|
# Set by owner
|
||||||
|
var state_debug_stat = null
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
state = get_node(initial_state)
|
state = get_node(initial_state)
|
||||||
|
|
||||||
func transition(new_state, args = {}):
|
func transition(new_state, args = {}):
|
||||||
print("Node: " + get_parent().name + " transitioning to state: " + new_state.name)
|
StatHub.maybe_put_stat(state_debug_stat, new_state.name)
|
||||||
state = new_state
|
state = new_state
|
||||||
new_state.enter(args)
|
new_state.enter(args)
|
||||||
|
|
||||||
|
|
|
@ -13,14 +13,9 @@ func _init(p_rise_curve = null, p_initial_velocity = 0.0, p_released_curve = nul
|
||||||
# Calculate new y-velocity
|
# Calculate new y-velocity
|
||||||
func jump(yvel: float, time: float, released_jump: bool, delta: float, stat_key = null):
|
func jump(yvel: float, time: float, released_jump: bool, delta: float, stat_key = null):
|
||||||
if released_jump:
|
if released_jump:
|
||||||
maybe_put_stat(stat_key, "released jump")
|
StatHub.maybe_put_stat(stat_key, "released jump")
|
||||||
return yvel - released_curve.sample(time) * delta
|
return yvel - released_curve.sample(time) * delta
|
||||||
else:
|
else:
|
||||||
# Rising when holding the button
|
# Rising when holding the button
|
||||||
maybe_put_stat(stat_key, "holding jump")
|
StatHub.maybe_put_stat(stat_key, "holding jump")
|
||||||
return yvel - rise_curve.sample(time) * delta
|
return yvel - rise_curve.sample(time) * delta
|
||||||
|
|
||||||
func maybe_put_stat(stat_key, value):
|
|
||||||
if stat_key != null:
|
|
||||||
stat_key["value"] = value
|
|
||||||
StatHub.stat_set(stat_key)
|
|
||||||
|
|
|
@ -16,18 +16,13 @@ func _init(p_accel_curve = null, p_turn_curve = null, p_stop_curve = null):
|
||||||
func run(xvel: float, dir: float, delta: float, stat_key = null) -> float:
|
func run(xvel: float, dir: float, delta: float, stat_key = null) -> float:
|
||||||
# Stopping speed
|
# Stopping speed
|
||||||
if sign(dir) == 0:
|
if sign(dir) == 0:
|
||||||
maybe_put_stat(stat_key, "stopping")
|
StatHub.maybe_put_stat(stat_key, "stopping")
|
||||||
return move_toward(xvel, 0, stop_curve.sample(abs(xvel)/time) * delta)
|
return move_toward(xvel, 0, stop_curve.sample(abs(xvel)/time) * delta)
|
||||||
# Forward speed
|
# Forward speed
|
||||||
elif sign(dir) == sign(xvel) or sign(xvel) == 0:
|
elif sign(dir) == sign(xvel) or sign(xvel) == 0:
|
||||||
maybe_put_stat(stat_key, "forward")
|
StatHub.maybe_put_stat(stat_key, "forward")
|
||||||
return xvel + sign(dir) * accel_curve.sample(abs(xvel)/time) * delta
|
return xvel + sign(dir) * accel_curve.sample(abs(xvel)/time) * delta
|
||||||
# Turning speed
|
# Turning speed
|
||||||
else:
|
else:
|
||||||
maybe_put_stat(stat_key, "turning")
|
StatHub.maybe_put_stat(stat_key, "turning")
|
||||||
return xvel + sign(dir) * turn_curve.sample(abs(xvel)/time) * delta
|
return xvel + sign(dir) * turn_curve.sample(abs(xvel)/time) * delta
|
||||||
|
|
||||||
func maybe_put_stat(stat_key, value):
|
|
||||||
if stat_key != null:
|
|
||||||
stat_key["value"] = value
|
|
||||||
StatHub.stat_set(stat_key)
|
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
extends CharacterBody2D
|
|
||||||
|
|
||||||
# An example of a script that could be on an enemy/player (in this case enemy).
|
# An example of a script that could be on an enemy/player (in this case enemy).
|
||||||
# Controls state changes and state input such as direction, could use
|
# Controls state changes and state input such as direction, could use
|
||||||
# area detectors then change the state for example.
|
# area detectors then change the state for example.
|
||||||
|
extends CharacterBody2D
|
||||||
|
|
||||||
func current_state():
|
func current_state():
|
||||||
return $StateMachine.state
|
return stm.state
|
||||||
|
|
||||||
@onready var stm = $StateMachine
|
@onready var stm = $StateMachine
|
||||||
@onready var air = $StateMachine/Air
|
@onready var air = $StateMachine/Air
|
||||||
|
@ -14,6 +13,7 @@ func current_state():
|
||||||
func _ready():
|
func _ready():
|
||||||
air.jump_debug_stat = { "key": "player jump curve" }
|
air.jump_debug_stat = { "key": "player jump curve" }
|
||||||
run.run_debug_stat = { "key": "player run curve" }
|
run.run_debug_stat = { "key": "player run curve" }
|
||||||
|
stm.state_debug_stat = { "key": "player state" }
|
||||||
|
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
# Start falling
|
# Start falling
|
||||||
|
|
Loading…
Reference in a new issue