gd,refacto: added state chart addon and namespace cleanup
This commit is contained in:
59
godot_state_charts_examples/stepping/stepping.gd
Normal file
59
godot_state_charts_examples/stepping/stepping.gd
Normal file
@ -0,0 +1,59 @@
|
||||
extends Node2D
|
||||
|
||||
|
||||
@onready var _add_coal_to_drill_button:Button = %AddCoalToDrillButton
|
||||
@onready var _coal_available_label:Label = %CoalAvailableLabel
|
||||
@onready var _coal_in_drill_label:Label = %CoalInDrillLabel
|
||||
@onready var _state_chart:StateChart = %StateChart
|
||||
|
||||
|
||||
var _coal_available:int = 0:
|
||||
set(value):
|
||||
_coal_available = value
|
||||
# update the UI when this changes
|
||||
_coal_available_label.text = str(_coal_available)
|
||||
_add_coal_to_drill_button.disabled = _coal_available == 0
|
||||
|
||||
var _coal_in_drill:int = 0:
|
||||
set(value):
|
||||
_coal_in_drill = value
|
||||
# update the UI when this changes
|
||||
_coal_in_drill_label.text = str(_coal_in_drill)
|
||||
if _coal_in_drill == 0:
|
||||
# if there is no more coal in the drill send the
|
||||
# coal_depleted event
|
||||
_state_chart.send_event("coal_depleted")
|
||||
else:
|
||||
# otherwise send the coal_available event
|
||||
_state_chart.send_event("coal_available")
|
||||
|
||||
|
||||
func _ready():
|
||||
_coal_available = 1 # we start with 1 coal
|
||||
|
||||
|
||||
func _on_add_coal_to_drill_button_pressed():
|
||||
# take one coal from the pile and put it into the generator
|
||||
_coal_available -= 1
|
||||
_coal_in_drill += 1
|
||||
|
||||
|
||||
func _on_drill_has_coal_state_stepped():
|
||||
# when we are in this state, we produce 2 coal and consume one of the coal in
|
||||
# the drill
|
||||
_coal_available += 2
|
||||
_coal_in_drill -= 1
|
||||
|
||||
|
||||
func _on_drill_has_no_coal_state_stepped():
|
||||
# when we are in this state, the drill has no coal so we just flash
|
||||
# the label red.
|
||||
_coal_in_drill_label.modulate = Color.RED
|
||||
create_tween().tween_property(_coal_in_drill_label, "modulate", Color.WHITE, 0.5)
|
||||
|
||||
|
||||
func _on_next_round_button_pressed():
|
||||
# when the next round button is pressed we handle all currently active states
|
||||
_state_chart.step()
|
||||
|
||||
|
Reference in New Issue
Block a user