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