This repository has been archived on 2025-09-12. You can view files and clone it, but cannot push or open issues or pull requests.
ld49/level/Fridge.gd
Ryan eebd742d7f Balancing pass
Increased game time limit to 600 seconds
Adjusted spawn curve to start decreasing a set time before max game time. This time is an export var set from the customer spawner node
Taking orders now slightly angers player
Placing orders gives smaller boost than before
Customers waiting to order will now grumble once they have been waiting for at least half of their max wait time
2021-10-30 13:57:12 -04:00

105 lines
3.5 KiB
GDScript

class_name Fridge
extends Area
export var activity_cold_beverage: Resource
export var cold_beverage_scene: PackedScene
enum States {IDLE, WORKING}
var should_ignore_clicks: bool = false
var state: int = States.IDLE
var timeout: float = 0.0
onready var outline = find_node("Outline", true, false)
onready var tooltip: SpatialLabel = $Togglables/SpatialLabel
onready var cold_beverage = cold_beverage_scene.instance()
onready var game_node = $"/root/Game"
func _ready() -> void:
connect("mouse_entered", self, "hover")
connect("mouse_exited", self, "unhover")
func hover() -> void:
var activity_intent = get_current_activity_intent()
if !activity_intent:
return
var current_activity_title = activity_intent["activity"].displayed_name
tooltip.show_text(current_activity_title)
if outline:
outline.show()
pass
func unhover() -> void:
tooltip.hide()
if outline:
outline.hide()
func get_current_activity_intent():
if !$"/root/Game".player_visual.is_emptyhanded():
return false
if should_ignore_clicks:
eprint("was clicked already")
return false
return {"activity": activity_cold_beverage, "handler": "set_using"}
func _input_event(camera, event, click_position, click_normal, shape_idx):
if !(event is InputEventMouseButton) or event.button_index != BUTTON_LEFT or !event.pressed:
return
var activity_intent = get_current_activity_intent()
if activity_intent:
should_ignore_clicks = true
var location = $ActivityLocations/Position3D
# TODO: have multiple locations to choose from, randomize it
get_node(@"/root/Game").set_activity(activity_intent["activity"], self, activity_intent["handler"], location)
match state:
States.IDLE:
return
States.WORKING:
eprint("chilling already")
# make some unhappy machine noises as machine is buy
return
func _process(delta: float) -> void:
var is_timeout = get_node(@"/root/Game").time_elapsed > timeout
if state == States.WORKING and is_timeout:
var barista = $"/root/Game".player_visual
if barista:
barista.cooling_off_sfx.play()
eprint("finished chilling at the fridge")
state = States.IDLE
return
pass
func set_using():
should_ignore_clicks = false
eprint("using the fridge...")
state = States.WORKING
var beverage_duration: float = activity_cold_beverage.duration
timeout = get_node(@"/root/Game").time_elapsed + beverage_duration
var animation_player: AnimationPlayer = $"/root/Game".player_visual.anim
$under_counter_fridge_exportPrep/AnimationPlayer.play("ArmatureAction")
animation_player.play("crouch")
if !HintPopup.firstfridgeuse:
HintPopup.firstfridgeuse = true
HintPopup.display("Consuming a cold refreshing beverage will help you keep your cool, and make the customers slightly more tolerable", 3.0)
yield(animation_player, "animation_finished")
var barista = $"/root/Game".player_visual
barista.carry_attachment.add_child(cold_beverage)
yield(get_tree().create_timer(0.25), "timeout")
$under_counter_fridge_exportPrep/AnimationPlayer.play_backwards("ArmatureAction")
animation_player.play("uncrouch")
yield(animation_player, "animation_finished")
var tween = barista.get_node("Tween")
tween.interpolate_property(barista, "rotation:y", barista.rotation.y, barista.rotation.y + (0.5 * TAU), 0.25)
tween.start()
yield(tween, "tween_completed")
animation_player.play("drinkBeverage")
yield(animation_player, "animation_finished")
barista.carry_attachment.remove_child(cold_beverage)
# TODO: convert this into speech baloons
func eprint(text: String):
print("FRIDGE: %s" % text)