about summary refs log tree commit diff stats
path: root/client/Archipelago/settings_screen.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/Archipelago/settings_screen.gd')
-rw-r--r--client/Archipelago/settings_screen.gd204
1 files changed, 0 insertions, 204 deletions
diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd deleted file mode 100644 index ff6f9df..0000000 --- a/client/Archipelago/settings_screen.gd +++ /dev/null
@@ -1,204 +0,0 @@
1extends Node2D
2
3
4func _ready():
5 # Some helpful logging.
6 if Steam.isSubscribed():
7 global._print("Provisioning successful! Build ID: %d" % Steam.getAppBuildId())
8 else:
9 global._print("Provisioning failed.")
10
11 # Undo the load screen removing our cursor
12 get_tree().get_root().set_disable_input(false)
13 Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
14
15 # Increase the WebSocket input buffer size so that we can download large
16 # data packages.
17 ProjectSettings.set_setting("network/limits/websocket_client/max_in_buffer_kb", 8192)
18
19 # Create the global AP manager, if it doesn't already exist.
20 if not global.has_node("Archipelago"):
21 var ap_script = ResourceLoader.load("user://maps/Archipelago/manager.gd")
22 var ap_instance = ap_script.new()
23 ap_instance.name = "Archipelago"
24
25 ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd")
26 ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd")
27 ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd")
28 ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd")
29 ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd")
30
31 global.add_child(ap_instance)
32
33 # Let's also inject any scripts we need to inject now.
34 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/animationListener.gd"))
35 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/collectable.gd"))
36 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/door.gd"))
37 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/keyHolder.gd"))
38 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/keyHolderChecker.gd"))
39 installScriptExtension(
40 ResourceLoader.load("user://maps/Archipelago/keyHolderResetterListener.gd")
41 )
42 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting.gd"))
43 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/panel.gd"))
44 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pauseMenu.gd"))
45 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd"))
46 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/saver.gd"))
47 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleportListener.gd"))
48 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/visibilityListener.gd"))
49 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldportListener.gd"))
50
51 var proto_script = load("user://maps/Archipelago/generated/proto.gd")
52 var gamedata_script = load("user://maps/Archipelago/gamedata.gd")
53 var gamedata_instance = gamedata_script.new(proto_script)
54 gamedata_instance.load(
55 FileAccess.get_file_as_bytes("user://maps/Archipelago/generated/data.binpb")
56 )
57 gamedata_instance.name = "Gamedata"
58 global.add_child(gamedata_instance)
59
60 var messages_script = load("user://maps/Archipelago/messages.gd")
61 var messages_instance = messages_script.new()
62 messages_instance.name = "Messages"
63 global.add_child(messages_instance)
64
65 var textclient_script = load("user://maps/Archipelago/textclient.gd")
66 var textclient_instance = textclient_script.new()
67 textclient_instance.name = "Textclient"
68 global.add_child(textclient_instance)
69
70 var ap = global.get_node("Archipelago")
71 var gamedata = global.get_node("Gamedata")
72 ap.connect("ap_connected", connectionSuccessful)
73 ap.connect("could_not_connect", connectionUnsuccessful)
74 ap.connect("connect_status", connectionStatus)
75
76 # Populate textboxes with AP settings.
77 $Panel/server_box.text = ap.ap_server
78 $Panel/player_box.text = ap.ap_user
79 $Panel/password_box.text = ap.ap_pass
80
81 var history_box = $Panel/connection_history
82 if ap.connection_history.is_empty():
83 history_box.disabled = true
84 else:
85 history_box.disabled = false
86
87 var i = 0
88 for details in ap.connection_history:
89 history_box.get_popup().add_item("%s (%s)" % [details[1], details[0]], i)
90 i += 1
91
92 history_box.get_popup().connect("id_pressed", historySelected)
93
94 # Show client version.
95 $Panel/title.text = "ARCHIPELAGO (%d.%d)" % [gamedata.objects.get_version(), ap.MOD_VERSION]
96
97 # Increase font size in text boxes.
98 $Panel/server_box.add_theme_font_size_override("font_size", 36)
99 $Panel/player_box.add_theme_font_size_override("font_size", 36)
100 $Panel/password_box.add_theme_font_size_override("font_size", 36)
101
102
103# Adapted from https://gitlab.com/Delta-V-Modding/Mods/-/blob/main/game/ModLoader.gd
104func installScriptExtension(childScript: Resource):
105 # Force Godot to compile the script now.
106 # We need to do this here to ensure that the inheritance chain is
107 # properly set up, and multiple mods can chain-extend the same
108 # class multiple times.
109 # This is also needed to make Godot instantiate the extended class
110 # when creating singletons.
111 # The actual instance is thrown away.
112 childScript.new()
113
114 var parentScript = childScript.get_base_script()
115 var parentScriptPath = parentScript.resource_path
116 global._print("ModLoader: Installing script extension over %s" % parentScriptPath)
117 childScript.take_over_path(parentScriptPath)
118
119
120func connectionStatus(message):
121 var popup = self.get_node("Panel/AcceptDialog")
122 popup.title = "Connecting to Archipelago"
123 popup.dialog_text = message
124 popup.exclusive = true
125 popup.get_ok_button().visible = false
126 popup.popup_centered()
127
128
129func connectionSuccessful():
130 var ap = global.get_node("Archipelago")
131
132 # Save connection details
133 var connection_details = [ap.ap_server, ap.ap_user, ap.ap_pass]
134 if ap.connection_history.has(connection_details):
135 ap.connection_history.erase(connection_details)
136 ap.connection_history.push_front(connection_details)
137 if ap.connection_history.size() > 10:
138 ap.connection_history.resize(10)
139 ap.saveSettings()
140
141 # Switch to the_entry
142 Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
143 global.user = ap.getSaveFileName()
144 global.universe = "lingo"
145 global.map = "the_entry"
146
147 unlocks.resetCollectables()
148 unlocks.resetData()
149
150 ap.setup_keys()
151
152 unlocks.loadCollectables()
153 unlocks.loadData()
154 unlocks.unlockKey("capslock", 1)
155
156 clearResourceCache("res://objects/meshes/gridDoor.tscn")
157 clearResourceCache("res://objects/nodes/collectable.tscn")
158 clearResourceCache("res://objects/nodes/door.tscn")
159 clearResourceCache("res://objects/nodes/keyHolder.tscn")
160 clearResourceCache("res://objects/nodes/listeners/animationListener.tscn")
161 clearResourceCache("res://objects/nodes/listeners/keyHolderChecker.tscn")
162 clearResourceCache("res://objects/nodes/listeners/keyHolderResetterListener.tscn")
163 clearResourceCache("res://objects/nodes/listeners/teleportListener.tscn")
164 clearResourceCache("res://objects/nodes/listeners/visibilityListener.tscn")
165 clearResourceCache("res://objects/nodes/listeners/worldportListener.tscn")
166 clearResourceCache("res://objects/nodes/panel.tscn")
167 clearResourceCache("res://objects/nodes/player.tscn")
168 clearResourceCache("res://objects/nodes/saver.tscn")
169 clearResourceCache("res://objects/scenes/menus/pause_menu.tscn")
170
171 var paintings_dir = DirAccess.open("res://objects/meshes/paintings")
172 if paintings_dir:
173 paintings_dir.list_dir_begin()
174 var file_name = paintings_dir.get_next()
175 while file_name != "":
176 if not paintings_dir.current_is_dir() and file_name.ends_with(".tscn"):
177 clearResourceCache("res://objects/meshes/paintings/" + file_name)
178 file_name = paintings_dir.get_next()
179
180 switcher.switch_map.call_deferred("res://objects/scenes/the_entry.tscn")
181
182
183func connectionUnsuccessful(error_message):
184 $Panel/connect_button.disabled = false
185
186 var popup = $Panel/AcceptDialog
187 popup.title = "Could not connect to Archipelago"
188 popup.dialog_text = error_message
189 popup.exclusive = true
190 popup.get_ok_button().visible = true
191 popup.popup_centered()
192
193
194func historySelected(index):
195 var ap = global.get_node("Archipelago")
196 var details = ap.connection_history[index]
197
198 $Panel/server_box.text = details[0]
199 $Panel/player_box.text = details[1]
200 $Panel/password_box.text = details[2]
201
202
203func clearResourceCache(path):
204 ResourceLoader.load(path, "", ResourceLoader.CACHE_MODE_REPLACE)