aboutsummaryrefslogtreecommitdiff
path: root/client/menu/popup_message.gd
blob: 1748f59a8290d9a6867febb5ba9fb99fdd640a4b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# Hurry Curry! - a game about cooking
# Copyright 2024 tpart
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, version 3 of the License only.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
extends MarginContainer
class_name PopupMessage

var is_ingame := false
var is_joined := false

@onready var server_msg = $VBox/ServerMessage
@onready var hint_msg = $VBox/HintMessage

@onready var server_msg_timer: Timer = $ServerTimer
@onready var hint_msg_timer: Timer = $HintTimer

@onready var server_msg_label: Label = $VBox/ServerMessage/CenterContainer/Label
@onready var hint_msg_label: Label = $VBox/HintMessage/CenterContainer/Label

@onready var auto_hint_timers: Node = $AutoHintTimers

@onready var reset_timer = $Reset

@onready var game: Game = get_parent()

func _ready():
	game.joined.connect(
		func player_joined():
			is_joined = true
			update_state()
	)
	game.left.connect(
		func player_joined():
			is_joined = false
			update_state()
	)

func ingame():
	is_ingame = true
	update_state()

func lobby():
	is_ingame = false
	update_state()

func update_state():
	if is_ingame and is_joined:
		start_game_hints()
	else:
		stop_game_hints()

func display_server_msg(msg: String):
	server_msg.show()
	server_msg_label.text = msg
	server_msg_timer.start()

func _on_server_timer_timeout():
	server_msg.hide()

func display_hint_msg(msg: String):
	hint_msg.show()
	hint_msg_label.text = tr("Hint") + ": %s" % msg
	hint_msg_timer.start()

func _on_hint_timer_timeout():
	hint_msg.hide()

func start_game_hints():
	for c: Timer in auto_hint_timers.get_children():
		c.start()

func stop_game_hints():
	_on_hint_timer_timeout()
	for c: Timer in auto_hint_timers.get_children():
		c.stop()
	reset_timer.stop()

func _input(_event):
	if Input.is_action_just_pressed("boost"):
		Global.set_hint("has_boosted", true)
	if any_action_just_pressed(["forward", "backwards", "left", "right"]):
		Global.set_hint("has_moved", true)
	if any_action_just_pressed(["rotate_left", "rotate_right", "rotate_up", "rotate_down"]):
		if not Global.get_hint("has_reset"):
			reset_timer.start()
		Global.set_hint("has_rotated", true)
	if any_action_just_pressed(["zoom_in", "zoom_out"]):
		Global.set_hint("has_zoomed", true)
	if Input.is_action_just_pressed("interact"):
		Global.set_hint("has_interacted", true)
	if Input.is_action_just_pressed("reset"):
		Global.set_hint("has_reset", true)

func _on_boost_timeout():
	if not Global.get_hint("has_boosted") and not Global.get_setting("touch_controls"):
		display_hint_msg(tr("Press %s to boost") % display_keybind(tr("SHIFT"), "B"))

func _on_move_timeout():
	if not Global.get_hint("has_moved") and not Global.get_setting("touch_controls"):
		display_hint_msg(tr("Use %s to move") % display_keybind("WASD", tr("left stick")))

func _on_interact_timeout():
	if not Global.get_hint("has_interacted") and not Global.get_setting("touch_controls"):
		display_hint_msg(tr("Press %s to pick up items and interact with tools") % display_keybind(tr("SPACE"), "A"))

func _on_reset_timeout():
	if not Global.get_hint("has_reset") and not Global.get_setting("touch_controls"):
		display_hint_msg(tr("Press %s to reset the camera view") % display_keybind("R", "Y"))

func _on_zoom_timeout():
	if not Global.get_hint("has_zoomed") and not Global.get_setting("touch_controls"):
		display_hint_msg(tr("Use %s to zoom in/out") % display_keybind(tr("PageUp/PageDown"), "LT/RT"))

func display_keybind(keyboard: String, joypad: String, touch = null) -> String:
	if Global.using_joypad:
		return joypad + " (Joypad)"
	if touch != null:
		return touch
	return keyboard

func any_action_just_pressed(actions: Array) -> bool:
	for a: String in actions:
		if Input.is_action_just_pressed(a):
			return true
	return false

func _on_rotate_camera_timeout():
	if not Global.get_hint("has_rotated") and not Global.get_setting("touch_controls"):
		display_hint_msg(tr("Use %s to reset the camera view") % display_keybind(tr("arrow keys"), tr("right stick")))

func _on_nametags_timeout():
	if not Global.get_hint("has_seen_nametags") and not Global.get_setting("usernames"):
		Global.set_hint("has_seen_nametags", true)
		display_hint_msg(tr("Username tags can be enabled/disabled in the settings"))