ld58-collector/numpad.gd

94 lines
2.6 KiB
GDScript

class_name Numpad extends Node2D
var numpad_buffer: String = "":
set(value):
if value.is_empty():
%NumpadDisplay.text = "Enter a value"
else:
%NumpadDisplay.text = "%sk" % [value]
numpad_buffer = value
var proposed_ask: int
signal ask_proposed(amount)
var audience_manager: AudienceManager
var game_manager: GameManager
var turn_manager: TurnManager
@export var progress_bar: ProgressBar
@export var reminder_timer: Timer
@export var error_audio_player: AudioStreamPlayer2D
@export var success_audio_player: AudioStreamPlayer2D
@export var base_timer_duration = 7.0
var timer_duration = base_timer_duration
@export var timer_reduction_step = 0.3
func _ready() -> void:
progress_bar.max_value = reminder_timer.wait_time
func _process(_delta: float) -> void:
progress_bar.value = reminder_timer.time_left
# number entry function called by numbered button children
func keypad_entry(entry: int):
numpad_buffer += str(entry)
func keypad_backspace():
if not numpad_buffer.is_empty():
numpad_buffer = numpad_buffer.erase(numpad_buffer.length() - 1)
func keypad_submit():
var keypad_output: String = numpad_buffer
proposed_ask = int(keypad_output) * 1000
if proposed_ask == 0: return
match game_manager.state:
game_manager.bidding_state.READY:
if proposed_ask == game_manager.starting_price:
game_manager.state = game_manager.bidding_state.ASKING
success_audio_player.play()
ask_proposed.emit(proposed_ask)
print("starting the bidding at $" + str(proposed_ask))
reset_timer()
start_timer()
else:
error_audio_player.play()
game_manager.bidding_state.ASKING:
if proposed_ask == game_manager.starting_price or proposed_ask == game_manager.current_bid or proposed_ask == audience_manager.current_ask and proposed_ask != 0:
success_audio_player.play()
ask_proposed.emit(proposed_ask)
print("asking for $" + str(proposed_ask))
start_timer()
else:
error_audio_player.play()
game_manager.bidding_state.BID:
if proposed_ask > game_manager.current_bid:
game_manager.state = game_manager.bidding_state.ASKING
success_audio_player.play()
ask_proposed.emit(proposed_ask)
print("asking for $" + str(proposed_ask))
start_timer()
else:
error_audio_player.play()
_:
error_audio_player.play()
# need to avoid starting the reminder timer before
# the auction starts
numpad_buffer = ""
func reset_timer():
timer_duration = base_timer_duration
func start_timer():
reminder_timer.stop()
progress_bar.max_value = timer_duration
reminder_timer.start(timer_duration)
timer_duration -= timer_reduction_step