OverviewFilesCommitsIssuesDocsReleasesPeers

godot-marble_madness_demo commits / f7c7bdc

added main_menu
f7c7bdc0cbb363cfb52e06649160a765ae1ecb2f
by Dresk Spidflisk <dreskspidflisk@gmail.com> · 2022-04-27T16:19:04.000Z

Changed files (12) +419 -9

hypergodot/hyper_gateway/hyper_gateway.gd +16 -2
……@@ -16,7 +16,7 @@ signal finished_download(version)
1616export var writable: bool = true
1717export var persist: bool = true
1818
19export var autoStart: bool = true
19export var autoStart: bool = false
2020export var autoDownload: bool = true
2121export var autoUpdate: bool = false
2222
……@@ -87,6 +87,8 @@ func setupGateway():
8787 if !persist: args.append('--no-persist')
8888 if writable: args.append('--writable')
8989
90 args.append("--silent")
91
9092 if port != DEFAULT_PORT:
9193 args.append('--port')
9294 args.append(String(port))
……@@ -116,10 +118,22 @@ func getIsGatewayRunning() -> bool:
116118 return true;
117119 else:
118120 return false;
121
122func getGatewayPort() -> int:
123 if( getIsGatewayRunning() ):
124 return port
125 else:
126 return -1;
127
128func getGatewayPID() -> int:
129 if( getIsGatewayRunning() ):
130 return processPID;
131 else:
132 return 0
119133
120134func getExecutibleName():
121135 var name = OS.get_name()
122 if name == 'X11': return "hyper-gateway-linux"
136 if name == 'X11' or name == 'Linux': return "hyper-gateway-linux"
123137 if name == 'OSX': return "hyper-gateway-macos"
124138 if name == 'Windows': return "hyper-gateway-windows.exe"
125139 push_error("Can not start gateway, invalid operating system " + name)
hypergodot/hyper_gossip/hyper_gossip.gd +14 -4
……@@ -13,6 +13,8 @@ export var extension_name = "hyper-gossip-v1"
1313export var pool_size = 8
1414export var queue_warning_size = 8
1515
16var hyperGateway : HyperGateway
17
1618var peerListRequest = HyperRequest.new()
1719var eventSource = HyperEventSource.new()
1820
……@@ -31,7 +33,7 @@ func _ready():
3133 peerListRequest.connect("request_completed", self, "_on_peer_list")
3234 peerListRequest.use_threads = true
3335
34 for i in range(pool_size):
36 for _i in range(pool_size):
3537 var broadcastRequest = HyperRequest.new()
3638 broadcastRequest.use_threads = true
3739 add_child(broadcastRequest)
……@@ -79,9 +81,14 @@ func rebroadcast(event):
7981 _enqueue_broadcast_request(reqURL, body)
8082
8183func broadcast_event(type: String, data):
82 var reqURL = _get_extension_url()
83 var body = JSON.print(_generateEvent(type, data))
84 _enqueue_broadcast_request(reqURL, body)
84 if(hyperGateway == null):
85 # TODO : Make the link to HyperGateway static
86 hyperGateway = get_tree().get_current_scene().get_node("HyperGodot").get_node("HyperGateway")
87 if(hyperGateway != null):
88 if( hyperGateway.getIsGatewayRunning() ):
89 var reqURL = _get_extension_url()
90 var body = JSON.print(_generateEvent(type, data))
91 _enqueue_broadcast_request(reqURL, body)
8592
8693func send_to_peer(peer, type, data):
8794 var reqURL = _get_extension_url_to_peer(peer)
……@@ -156,6 +163,9 @@ func _get_extension_url():
156163
157164func _get_extension_listen_url():
158165 return url + '$/extensions/'
166
167func _get_url() -> String:
168 return url
159169
160170func _make_id():
161171 return str(randi()) + str(randi())
levels/scenes/level_0.tscn +9 -2
……@@ -1,4 +1,4 @@
1[gd_scene load_steps=15 format=2]
1[gd_scene load_steps=16 format=2]
22
33[ext_resource path="res://assets/levels/level0/assets_level_0.tscn" type="PackedScene" id=1]
44[ext_resource path="res://levels/spawn_point/spawn_point.tscn" type="PackedScene" id=2]
……@@ -13,11 +13,16 @@
1313[ext_resource path="res://hypergodot/hyper_gossip/hyper_gossip.gd" type="Script" id=11]
1414[ext_resource path="res://ui/debug/hypercore/ui_debug_hypercore.tscn" type="PackedScene" id=12]
1515[ext_resource path="res://ui/PlayerConfig.tscn" type="PackedScene" id=13]
16[ext_resource path="res://menu/main/menu_main.scn" type="PackedScene" id=14]
1617[ext_resource path="res://player/ball/player_ball_controller.gd" type="Script" id=15]
1718
1819[node name="Spatial" type="Node"]
1920script = ExtResource( 3 )
2021
22[node name="UI" type="Node" parent="."]
23
24[node name="Menu_Main" parent="UI" instance=ExtResource( 14 )]
25
2126[node name="level_0" parent="." instance=ExtResource( 1 )]
2227transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.178, 1.877, -3.673 )
2328
……@@ -50,10 +55,13 @@ pause_mode = 2
5055script = ExtResource( 5 )
5156
5257[node name="PlayerConfigUI" parent="." instance=ExtResource( 13 )]
58visible = false
5359
5460[node name="BallDebugUI" parent="." instance=ExtResource( 6 )]
61visible = false
5562
5663[node name="HyperGodotDebugUI" parent="." instance=ExtResource( 12 )]
64visible = false
5765
5866[node name="CameraTween" type="Tween" parent="."]
5967pause_mode = 2
……@@ -62,7 +70,6 @@ pause_mode = 2
6270
6371[node name="HyperGateway" type="Node" parent="HyperGodot"]
6472script = ExtResource( 10 )
65autoStart = false
6673
6774[node name="HyperGossip" type="Node" parent="HyperGodot"]
6875script = ExtResource( 11 )
menu/main/buttongroup_1.tres +3 -0
……@@ -0,0 +1,3 @@
1[gd_resource type="ButtonGroup" format=2]
2
3[resource]
menu/main/buttongroup_2.tres +3 -0
……@@ -0,0 +1,3 @@
1[gd_resource type="ButtonGroup" format=2]
2
3[resource]
menu/main/buttongroup_3.tres +3 -0
……@@ -0,0 +1,3 @@
1[gd_resource type="ButtonGroup" format=2]
2
3[resource]
menu/main/menu_main.gd +268 -0
……@@ -0,0 +1,268 @@
1extends Node
2
3var res_loader: ResourceInteractiveLoader = null
4var loading_thread: Thread = null
5
6signal replace_main_scene
7#warning-ignore:unused_signal
8signal quit # Useless, but needed as there is no clean way to check if a node exposes a signal
9
10onready var ui = $Menu_Main
11onready var main = ui.get_node(@"Main")
12onready var play_button = main.get_node(@"Resume")
13onready var settings_button = main.get_node(@"Settings")
14onready var quit_button = main.get_node(@"Quit")
15
16onready var settings_menu = ui.get_node(@"Settings")
17onready var settings_actions = settings_menu.get_node(@"Actions")
18onready var settings_action_apply = settings_actions.get_node(@"Apply")
19onready var settings_action_cancel = settings_actions.get_node(@"Cancel")
20
21onready var multiplayer_menu = ui.get_node(@"Multiplayer")
22onready var multiplayer_LabelGWStatus = multiplayer_menu.get_node(@"HyperGatewayStatus").get_node(@"LabelGWStatus")
23onready var multiplayer_StartGW = multiplayer_menu.get_node(@"Gateway").get_node(@"Start")
24onready var multiplayer_StopGW = multiplayer_menu.get_node(@"Gateway").get_node(@"Stop")
25onready var multiplayer_LabelGossipStatus = multiplayer_menu.get_node(@"HyperGossipStatus").get_node(@"LabelGossipStatus")
26onready var multiplayer_PortInput = multiplayer_menu.get_node(@"HyperGatewayPort").get_node(@"LineEdit")
27onready var multiplayer_GossipURLInput = multiplayer_menu.get_node(@"GossipURL").get_node(@"LineEdit")
28
29onready var shadows_menu = settings_menu.get_node(@"Shadows")
30onready var shadows_4096 = shadows_menu.get_node(@"4096")
31onready var shadows_2048 = shadows_menu.get_node(@"2048")
32onready var shadows_1024 = shadows_menu.get_node(@"1024")
33onready var shadows_disabled = shadows_menu.get_node(@"Disabled")
34
35onready var gi_menu = settings_menu.get_node(@"GI")
36onready var gi_high = gi_menu.get_node(@"High")
37onready var gi_low = gi_menu.get_node(@"Low")
38onready var gi_disabled = gi_menu.get_node(@"Disabled")
39
40onready var aa_menu = settings_menu.get_node(@"AA")
41onready var aa_8x = aa_menu.get_node(@"8x")
42onready var aa_4x = aa_menu.get_node(@"4x")
43onready var aa_2x = aa_menu.get_node(@"2x")
44onready var aa_disabled = aa_menu.get_node(@"Disabled")
45
46onready var bloom_menu = settings_menu.get_node(@"Bloom")
47onready var bloom_high = bloom_menu.get_node(@"High")
48onready var bloom_low = bloom_menu.get_node(@"Low")
49onready var bloom_disabled = bloom_menu.get_node(@"Disabled")
50
51var hyperGatewayNode : HyperGateway = null
52var hyperGatewayPID : int = 0
53var hyperGatewayPort : int = 0
54
55var hyperGossipNode : HyperGossip = null
56var hyperGossipURL : String = ""
57
58var hyperGWPortInputBackup : String = ""
59
60var world_environment : WorldEnvironment = null
61
62func _ready():
63 get_tree().set_screen_stretch(SceneTree.STRETCH_MODE_2D, SceneTree.STRETCH_ASPECT_KEEP, Vector2(1440, 810))
64 Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
65
66func _getIsMenuShowing() -> bool:
67 return ui.visible
68
69func _on_quit_pressed():
70 get_tree().quit()
71
72func hideUI():
73 Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
74 ui.hide()
75
76func showUI():
77 # resetUI()
78 ui.show()
79 Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
80
81func resetUI():
82 settings_menu.hide()
83 multiplayer_menu.hide()
84 main.show()
85
86func _on_Resume_pressed():
87 # Hide UI (for now)
88 hideUI()
89
90func _on_Quit_pressed():
91 get_tree().quit()
92
93
94func _on_Settings_pressed():
95 main.hide()
96 settings_menu.show()
97 settings_action_cancel.grab_focus()
98
99 # Find Environment Node
100 if(world_environment == null):
101 world_environment = get_tree().get_current_scene().find_node("WorldEnvironment", true, false)
102
103 if Settings.gi_quality == Settings.GIQuality.HIGH:
104 gi_high.pressed = true
105 elif Settings.gi_quality == Settings.GIQuality.LOW:
106 gi_low.pressed = true
107 elif Settings.gi_quality == Settings.GIQuality.DISABLED:
108 gi_disabled.pressed = true
109
110 if Settings.aa_quality == Settings.AAQuality.AA_8X:
111 aa_8x.pressed = true
112 elif Settings.aa_quality == Settings.AAQuality.AA_4X:
113 aa_4x.pressed = true
114 elif Settings.aa_quality == Settings.AAQuality.AA_2X:
115 aa_2x.pressed = true
116 elif Settings.aa_quality == Settings.AAQuality.DISABLED:
117 aa_disabled.pressed = true
118
119 if Settings.bloom_quality == Settings.BloomQuality.HIGH:
120 bloom_high.pressed = true
121 elif Settings.bloom_quality == Settings.BloomQuality.LOW:
122 bloom_low.pressed = true
123 elif Settings.bloom_quality == Settings.BloomQuality.DISABLED:
124 bloom_disabled.pressed = true
125
126func _UpdateHyperGatewayInfo():
127 multiplayer_StartGW.disabled = false
128 multiplayer_StopGW.disabled = true
129 multiplayer_LabelGWStatus.text = "Not Running"
130
131 if(hyperGatewayNode != null):
132 if(hyperGatewayNode is HyperGateway):
133 hyperGatewayPID = hyperGatewayNode.getGatewayPID()
134 hyperGatewayPort = hyperGatewayNode.getGatewayPort()
135
136 if( hyperGatewayNode.getIsGatewayRunning() ):
137 multiplayer_StopGW.disabled = false
138 multiplayer_StartGW.disabled = true
139 multiplayer_LabelGWStatus.text = "Running (PID " + str(hyperGatewayPID) + ") on Port " + str(hyperGatewayPort)
140
141func _UpdateHyperGossipInfo():
142 multiplayer_LabelGossipStatus.text = "N/A"
143 if(hyperGossipNode != null):
144 if(hyperGossipNode is HyperGossip):
145 if( hyperGatewayNode.getIsGatewayRunning() ):
146 hyperGossipURL = hyperGossipNode._get_url()
147 multiplayer_LabelGossipStatus.text = hyperGossipURL
148
149
150func _on_Multiplayer_pressed():
151 main.hide()
152 # Check for HyperGateway Node
153 if(hyperGatewayNode == null):
154 hyperGatewayNode = get_tree().get_current_scene().find_node("HyperGateway")
155 _UpdateHyperGatewayInfo()
156 # Check for HyperGossip Node
157 if(hyperGossipNode == null):
158 hyperGossipNode = get_tree().get_current_scene().find_node("HyperGossip")
159 _UpdateHyperGossipInfo()
160
161
162 multiplayer_menu.show()
163
164func _on_Apply_pressed():
165 main.show()
166 # play_button.grab_focus()
167 settings_menu.hide()
168
169 if shadows_4096.pressed:
170 Settings.shadows_quality = Settings.ShadowsQuality.SHADOWS_4096
171 ProjectSettings["rendering/quality/directional_shadow/size"] = 4096
172 ProjectSettings["rendering/quality/shadow_atlas/size"] = 4096
173 ProjectSettings["rendering/quality/shadows/filter_mode"] = 2
174 elif shadows_2048.pressed:
175 Settings.shadows_quality = Settings.ShadowsQuality.SHADOWS_2048
176 ProjectSettings["rendering/quality/directional_shadow/size"] = 2048
177 ProjectSettings["rendering/quality/shadow_atlas/size"] = 2048
178 ProjectSettings["rendering/quality/shadows/filter_mode"] = 2
179 elif shadows_1024.pressed:
180 Settings.shadows_quality = Settings.ShadowsQuality.SHADOWS_1024
181 ProjectSettings["rendering/quality/directional_shadow/size"] = 1024
182 ProjectSettings["rendering/quality/shadow_atlas/size"] = 1024
183 ProjectSettings["rendering/quality/shadows/filter_mode"] = 1
184 elif shadows_disabled.pressed:
185 Settings.shadows_quality = Settings.ShadowsQuality.DISABLED
186 ProjectSettings["rendering/quality/directional_shadow/size"] = 0
187 ProjectSettings["rendering/quality/shadow_atlas/size"] = 0
188 ProjectSettings["rendering/quality/shadows/filter_mode"] = 0
189
190 if gi_high.pressed:
191 Settings.gi_quality = Settings.GIQuality.HIGH
192 ProjectSettings["rendering/quality/voxel_cone_tracing/high_quality"] = true
193 elif gi_low.pressed:
194 Settings.gi_quality = Settings.GIQuality.LOW
195 ProjectSettings["rendering/quality/voxel_cone_tracing/high_quality"] = false
196 elif gi_disabled.pressed:
197 Settings.gi_quality = Settings.GIQuality.DISABLED
198
199 if aa_8x.pressed:
200 Settings.aa_quality = Settings.AAQuality.AA_8X
201 get_viewport().msaa = Viewport.MSAA_8X
202 elif aa_4x.pressed:
203 Settings.aa_quality = Settings.AAQuality.AA_4X
204 get_viewport().msaa = Viewport.MSAA_4X
205 elif aa_2x.pressed:
206 Settings.aa_quality = Settings.AAQuality.AA_2X
207 get_viewport().msaa = Viewport.MSAA_2X
208 elif aa_disabled.pressed:
209 Settings.aa_quality = Settings.AAQuality.DISABLED
210 get_viewport().msaa = Viewport.MSAA_DISABLED
211
212 if bloom_high.pressed:
213 Settings.bloom_quality = Settings.BloomQuality.HIGH
214 if(world_environment != null):
215 world_environment.environment.glow_enabled = true
216 world_environment.environment.glow_bicubic_upscale = true
217 elif bloom_low.pressed:
218 Settings.bloom_quality = Settings.BloomQuality.LOW
219 if(world_environment != null):
220 world_environment.environment.glow_enabled = true
221 world_environment.environment.glow_bicubic_upscale = false
222 elif bloom_disabled.pressed:
223 Settings.bloom_quality = Settings.BloomQuality.DISABLED
224 if(world_environment != null):
225 world_environment.environment.glow_enabled = false
226 world_environment.environment.glow_bicubic_upscale = false
227
228 Settings.save_settings()
229
230
231func _on_Cancel_pressed():
232 main.show()
233 # play_button.grab_focus()
234 settings_menu.hide()
235
236
237func _on_Multiplayer_Cancel_pressed():
238 main.show()
239 # play_button.grab_focus()
240 multiplayer_menu.hide()
241
242
243func _on_Multiplayer_Apply_pressed():
244 main.show()
245 # play_button.grab_focus()
246 multiplayer_menu.hide()
247
248
249func _on_Start_pressed():
250 hyperGatewayNode.port = multiplayer_PortInput.text
251 hyperGossipNode.url = multiplayer_GossipURLInput.text
252 hyperGatewayNode.start()
253 _UpdateHyperGatewayInfo()
254 _UpdateHyperGossipInfo()
255
256
257func _on_Stop_pressed():
258 hyperGatewayNode.stop()
259 multiplayer_PortInput
260 _UpdateHyperGatewayInfo()
261 _UpdateHyperGossipInfo()
262
263
264func _on_HyperGWPort_LineEdit_text_changed(new_text : String):
265 if(new_text.length() < 1 or new_text.is_valid_integer() or new_text.to_int() > 65535):
266 hyperGWPortInputBackup = new_text
267 else:
268 multiplayer_PortInput.text = hyperGWPortInputBackup
menu/main/menu_main.scn +0 -0
(no content changes — binary or rename)
project.godot +4 -0
……@@ -60,6 +60,10 @@ config/name="Marbles of Violence"
6060run/main_scene="res://main.tscn"
6161config/icon="res://icon.png"
6262
63[autoload]
64
65Settings="*res://settings.gd"
66
6367[display]
6468
6569window/size/width=1600
settings.gd +79 -0
……@@ -0,0 +1,79 @@
1extends Node
2
3enum ShadowsQuality {
4 DISABLED = 0,
5 SHADOWS_1024 = 1,
6 SHADOWS_2048 = 2,
7 SHADOWS_4096 = 3,
8}
9
10enum GIQuality {
11 DISABLED = 0,
12 LOW = 1,
13 HIGH = 2,
14}
15
16enum AAQuality {
17 DISABLED = 0,
18 AA_2X = 1,
19 AA_4X = 2,
20 AA_8X = 3,
21}
22
23enum SSAOQuality {
24 DISABLED = 0,
25 LOW = 1,
26 HIGH = 2,
27}
28
29enum BloomQuality {
30 DISABLED = 0,
31 LOW = 1,
32 HIGH = 2,
33}
34
35enum Resolution {
36 RES_540 = 0,
37 RES_720 = 1,
38 RES_1080 = 2,
39 NATIVE = 3,
40}
41
42var shadows_quality = ShadowsQuality.SHADOWS_1024
43var gi_quality = GIQuality.LOW
44var aa_quality = AAQuality.AA_2X
45var bloom_quality = BloomQuality.HIGH
46
47func _ready():
48 load_settings()
49
50func load_settings():
51 var f = File.new()
52 var error = f.open("user://settings.json", File.READ)
53 if error:
54 print("There are no settings to load.")
55 return
56
57 var d = parse_json(f.get_as_text())
58 if typeof(d) != TYPE_DICTIONARY:
59 return
60
61 if "shadows" in d:
62 shadows_quality = int(d.shadows)
63
64 if "gi" in d:
65 gi_quality = int(d.gi)
66
67 if "aa" in d:
68 aa_quality = int(d.aa)
69
70 if "bloom" in d:
71 bloom_quality = int(d.bloom)
72
73func save_settings():
74 var f = File.new()
75 var error = f.open("user://settings.json", File.WRITE)
76 assert(not error)
77
78 var d = { "shadows":shadows_quality, "gi":gi_quality, "aa":aa_quality, "bloom":bloom_quality }
79 f.store_line(to_json(d))
special_input.gd +20 -1
……@@ -1,12 +1,25 @@
11extends Node
22
33var bDebugPaused : bool = false
4var mouseModeBackup
5var UINode = null
46
57signal reset_ball()
68
79func _ready():
810 bDebugPaused = false
911 get_tree().paused = false
12
13func HandleMouseToggle():
14 if Input.get_mouse_mode() != Input.MOUSE_MODE_VISIBLE:
15 mouseModeBackup = Input.get_mouse_mode()
16 Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
17 else:
18 Input.set_mouse_mode(mouseModeBackup)
19
20func CheckAndUpdateUINode():
21 if(UINode == null):
22 UINode = get_tree().get_current_scene().find_node("Menu_Main")
1023
1124func _process(_delta):
1225 if Input.is_action_just_pressed("debug_pause"):
……@@ -16,7 +29,13 @@ func _process(_delta):
1629 else:
1730 get_tree().paused = false
1831 if Input.is_action_just_pressed("ui_cancel"):
19 get_tree().quit()
32 # Toggle UI
33 CheckAndUpdateUINode()
34 if(UINode._getIsMenuShowing() ):
35 UINode.hideUI()
36 else:
37 UINode.resetUI()
38 UINode.showUI()
2039 if Input.is_action_just_pressed("restart_level"):
2140 # get_tree().reload_current_scene()
2241 emit_signal("reset_ball")
ui/marblesofviolencelogo.png +0 -0
(no content changes — binary or rename)