-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathHUD.gd
176 lines (140 loc) · 4.75 KB
/
HUD.gd
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
extends Node2D
signal user_request
signal new_StaticServer
signal new_LoadBalancer
signal new_Database
signal new_DynamicServer
signal dns_change
signal clear
signal new_month
signal new_server(ServerType)
signal tutorial_complete(action)
export var dns_record = ""
var objects
var level
var money_old = 0
var max_logs = 20
var entity_buttons = [
"new_LoadBalancer", "new_Database", "new_Firewall",
"new_DynamicServer", "new_StaticServer"
]
func _ready():
level = get_parent()
money_old = level.money
objects = load("res://src/objects.gd")
objects = JSON.parse(objects.json).result
$MonthControl/MonthProgress.max_value = objects['month']['duration']
$Messages/List.add_item("")
func _process(delta):
if level.money <= 0:
$FinancesToggle.modulate = Color(1,0,0,1)
#$GameOver.popup_centered()
else:
$FinancesToggle.modulate = Color(1,1,1,1)
if money_old > level.money:
$FinancesToggle.modulate = Color(1,0,0,1)
yield(get_tree().create_timer(0.2),"timeout")
if money_old < level.money:
$FinancesToggle.modulate = Color(0,1,0,1)
yield(get_tree().create_timer(0.3),"timeout")
$FinancesToggle.text = str(floor(level.money))
$FinancesPanel/TotalBalance.text = str(floor(level.money))
$FinancesPanel/ProductCost.text = str(floor(level.product_cost))
$FinancesPanel/ServerCosts.text = str(floor(level.server_costs))
$FinancesPanel/MonthlyIncome.text = str(floor(level.month_income))
$FinancesPanel/Profit.text = str(floor(level.month_income - level.product_cost - level.server_costs))
money_old = level.money
$MonthControl/MonthProgress.value = level.month_timer.wait_time - level.month_timer.time_left
$MonthControl/MonthProgress/Month.text = str(level.month)
for msg in level.messages:
add_message(level.messages.pop_front())
func _on_Request_pressed(is_malicious=false):
emit_signal('user_request', is_malicious)
func _on_panel_button_pressed(ServerType):
emit_signal("new_"+ServerType)
emit_signal("new_server", ServerType)
emit_signal("tutorial_complete", "new_"+ServerType)
func _on_DNS_text_changed(text):
dns_record = text
emit_signal('dns_change')
emit_signal('tutorial_complete', "dns_change")
func _on_ClearUsers_pressed():
emit_signal('clear')
func _on_panel_button_mouse_entered(ServerType):
var Server = objects["entities"][ServerType]
$ToolTip/InfoBox/Label.text = Server["name"]
$ToolTip/InfoBox/Description.text = Server["description"]
$ToolTip/InfoBox/GridContainer/Cost.text = str(Server["monthly_cost"])
$ToolTip/InfoBox/GridContainer/Revenue.text = str(Server["revenue"])
$ToolTip.visible = true
func _on_panel_button_mouse_exited():
$ToolTip.visible = false
func _on_month_pressed():
level.month_timer.one_shot = true
level.money -= level.server_costs + level.product_cost #TODO: move to level
start_month()
func start_month():
if not dns_record in level.iptable:
add_message("DNS is not configured")
warning_animation($Panel/DNS)
return false
else:
level.month_timer.start()
add_message("Starting month.")
emit_signal("new_month")
emit_signal("tutorial_complete", "new_month")
return true
func warning_animation(container):
for _i in range(5):
container.modulate = Color(1,0,0,1)
yield(get_tree().create_timer(0.1), "timeout")
container.modulate = Color(1,1,1,1)
yield(get_tree().create_timer(0.1), "timeout")
func _on_Money1000_pressed():
level.money += 1000
func _on_GameOver_confirmed():
get_tree().change_scene("res://Level.tscn")
func add_message(msg):
$Messages/List.add_item(msg)
$Messages/List.select($Messages/List.get_item_count()-1)
$Messages/List.ensure_current_is_visible()
func add_log(msg, error=false):
if $Logs/List.get_item_count() > max_logs:
$Logs/List.remove_item(0)
$Logs/List.add_item(msg)
var current = $Logs/List.get_item_count()-1
if error:
$Logs/List.set_item_custom_fg_color(current, Color(1,0,0))
$Logs/List.select(current)
$Logs/List.ensure_current_is_visible()
func _on_AutoAdvance_pressed():
if level.month_timer.time_left == 0:
if start_month():
add_message("Auto advance on")
$MonthControl/AutoAdvance.pressed = true
level.month_timer.one_shot = false
else:
$MonthControl/AutoAdvance.pressed = false
else:
if $MonthControl/AutoAdvance.pressed:
level.month_timer.one_shot = false
level.month_timer.paused = false
$MonthControl/AutoAdvance.pressed = true
add_message("Auto advance on")
else:
level.month_timer.one_shot = true
$MonthControl/AutoAdvance.pressed = false
add_message("Auto advance off")
func _on_restart_pressed():
get_tree().change_scene("res://Level.tscn")
func _toggle_view(button_pressed, _view):
var view = get_node(_view)
if button_pressed:
view.show()
else:
view.hide()
func _on_FinancesButton_toggled(button_pressed):
if button_pressed:
$FinancesPanel.show()
else:
$FinancesPanel.hide()