60 lines
1.6 KiB
GDScript
60 lines
1.6 KiB
GDScript
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()
|
|
|
|
|