Make broken state for oven

This commit is contained in:
snider committed 2022-08-16 00:30:37 -07:00
1 parent df641d6c3d
commit 921ebc01f2
6 files changed
+109 -5

No files matched your search

+12 -2
View File
@@ -3,14 +3,18 @@ extends Spatial
const StateIdle = preload("res://scripts/oven/state/idle.gd")
const StateCooking = preload("res://scripts/oven/state/cooking.gd")
const StateHoldingItem = preload("res://scripts/oven/state/holding_item.gd")
const StateBroken = preload("res://scripts/oven/state/broken.gd")
export var cook_time: float = 2.0
export var start_broken: bool = false
export var max_hp: int = 1
var hp: int = max_hp
var state = null
func _ready():
$cook_timer.wait_time = cook_time
state = StateIdle.new()
state = StateBroken.new() if start_broken else StateIdle.new()
state.ctx = self
state.enter_from(null)
print("oven: NULL -> ", state.NAME)
@@ -30,3 +34,9 @@ func _on_cook_timer_timeout():
func _on_item_holder_item_changed(item):
state.on_item_holder_item_changed(item)
func _on_item_dump_completed():
state.on_item_dump_completed()
func take_damage():
state.take_damage()
+36
View File
@@ -0,0 +1,36 @@
extends Reference
const NAME = "broken"
var ctx = null
func _init():
pass
func enter_from(state):
ctx.remove_from_group("damageable")
ctx.get_node("item_dump").enabled = true
ctx.get_node("item_dump").reset()
ctx.get_node("coin_machine").enabled = false
ctx.get_node("%item_holder").add_enabled = false
ctx.get_node("%item_holder").remove_enabled = false
ctx.get_node("status_light").fail()
func exit_to(state):
assert(state.NAME != "broken")
ctx.add_to_group("damageable")
func on_coin_machine_coin_requirement_met(player):
assert(false, "should be impossible while broken")
func on_cook_timer_timeout():
assert(false, "should be impossible while broken")
func on_item_holder_item_changed(item):
assert(false, "should be impossible while broken")
func on_item_dump_completed():
ctx.change_state(ctx.StateIdle.new())
func take_damage():
pass # already broken
+13
View File
@@ -10,12 +10,15 @@ func _init():
mat.albedo_color = Color.red
func enter_from(state):
ctx.get_node("item_dump").enabled = false
ctx.get_node("coin_machine").enabled = false
ctx.get_node("%item_holder").add_enabled = false
ctx.get_node("%item_holder").remove_enabled = false
ctx.get_node("cook_timer").start()
ctx.get_node("%coil").set_surface_material(0, mat)
ctx.get_node("status_light").light_color = Color.green
ctx.get_node("status_light").activate()
func exit_to(state):
ctx.get_node("%coil").set_surface_material(0, null)
@@ -31,3 +34,13 @@ func on_cook_timer_timeout():
func on_item_holder_item_changed(item):
assert(item == null || item.item_type == cooked_yam)
func on_item_dump_completed():
assert(false, "item dump should be disabled")
func take_damage():
ctx.hp -= 1
if ctx.hp <= 0:
assert(ctx.get_node("%item_holder").has_item())
ctx.get_node("%item_holder").destroy_item()
ctx.change_state(ctx.StateBroken.new())
+13
View File
@@ -9,14 +9,17 @@ func _init():
pass
func enter_from(state):
ctx.get_node("item_dump").enabled = false
if ctx.get_node("%item_holder").item_in_hold.item_type == raw_yam:
ctx.get_node("coin_machine").enabled = true
ctx.get_node("%item_holder").add_enabled = false
ctx.get_node("%item_holder").remove_enabled = false
ctx.get_node("status_light").prime()
else:
ctx.get_node("coin_machine").enabled = false
ctx.get_node("%item_holder").add_enabled = true
ctx.get_node("%item_holder").remove_enabled = true
ctx.get_node("status_light").warn()
func exit_to(state):
pass
@@ -33,3 +36,13 @@ func on_item_holder_item_changed(item):
ctx.change_state(ctx.StateIdle.new())
else:
ctx.change_state(ctx.StateHoldingItem.new())
func on_item_dump_completed():
assert(false, "item dump should be disabled")
func take_damage():
ctx.hp -= 1
if ctx.hp <= 0:
if ctx.get_node("%item_holder").has_item():
ctx.get_node("%item_holder").destroy_item()
ctx.change_state(ctx.StateBroken.new())
+10
View File
@@ -8,9 +8,11 @@ func _init():
pass
func enter_from(state):
ctx.get_node("item_dump").enabled = false
ctx.get_node("coin_machine").enabled = false
ctx.get_node("%item_holder").add_enabled = true
ctx.get_node("%item_holder").remove_enabled = false # not possible
ctx.get_node("status_light").light_color = Color.white
func exit_to(state):
pass
@@ -24,3 +26,11 @@ func on_cook_timer_timeout():
func on_item_holder_item_changed(item):
assert(item != null, "there should be no item to remove while idle")
ctx.change_state(ctx.StateHoldingItem.new())
func on_item_dump_completed():
assert(false, "item dump should be disabled")
func take_damage():
ctx.hp -= 1
if ctx.hp <= 0:
ctx.change_state(ctx.StateBroken.new())