about summary refs log tree commit diff stats
path: root/client/Archipelago
diff options
context:
space:
mode:
Diffstat (limited to 'client/Archipelago')
-rw-r--r--client/Archipelago/minimap.gd84
-rw-r--r--client/Archipelago/player.gd3
-rw-r--r--client/Archipelago/settings_screen.gd2
3 files changed, 64 insertions, 25 deletions
diff --git a/client/Archipelago/minimap.gd b/client/Archipelago/minimap.gd index 4fb1214..5640716 100644 --- a/client/Archipelago/minimap.gd +++ b/client/Archipelago/minimap.gd
@@ -9,6 +9,8 @@ var cell_left
9var cell_top 9var cell_top
10var cell_right 10var cell_right
11var cell_bottom 11var cell_bottom
12var cell_width
13var cell_height
12var center_x_min 14var center_x_min
13var center_x_max 15var center_x_max
14var center_y_min 16var center_y_min
@@ -74,28 +76,10 @@ func _ready():
74 if pos.z > cell_bottom: 76 if pos.z > cell_bottom:
75 cell_bottom = pos.z 77 cell_bottom = pos.z
76 78
77 var cell_width = cell_right - cell_left + 1 79 cell_width = cell_right - cell_left + 1
78 var cell_height = cell_bottom - cell_top + 1 80 cell_height = cell_bottom - cell_top + 1
79 81
80 var heights = {} 82 var rendered = _renderMap(gridmap)
81
82 var rendered = Image.create_empty(cell_width, cell_height, false, Image.FORMAT_RGBA8)
83 rendered.fill(Color.TRANSPARENT)
84
85 for pos in gridmap.get_used_cells():
86 var in_plane = Vector2i(pos.x, pos.z)
87
88 if in_plane in heights and heights[in_plane] > pos.y:
89 continue
90
91 heights[in_plane] = pos.y
92
93 var cell_item = gridmap.get_cell_item(pos)
94 var mesh = gridmap.mesh_library.get_item_mesh(cell_item)
95 var material = mesh.surface_get_material(0)
96 var color = material.albedo_color
97
98 rendered.set_pixel(pos.x - cell_left, pos.z - cell_top, color)
99 83
100 var image_texture = ImageTexture.create_from_image(rendered) 84 var image_texture = ImageTexture.create_from_image(rendered)
101 sprite = Sprite2D.new() 85 sprite = Sprite2D.new()
@@ -111,10 +95,10 @@ func _ready():
111 label.text = "@" 95 label.text = "@"
112 drawer.add_child(label) 96 drawer.add_child(label)
113 97
114 var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top)) 98 #var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top))
115 var local_br = gridmap.map_to_local(Vector3i(cell_right, 0, cell_bottom)) 99 #var global_tl = gridmap.to_global(local_tl)
116 var global_tl = gridmap.to_global(local_tl) 100 #var local_br = gridmap.map_to_local(Vector3i(cell_right, 0, cell_bottom))
117 var global_br = gridmap.to_global(local_br) 101 #var global_br = gridmap.to_global(local_br)
118 102
119 center_x_min = 0 103 center_x_min = 0
120 center_x_max = cell_width - 128 104 center_x_max = cell_width - 128
@@ -139,3 +123,53 @@ func _process(_delta):
139 123
140 label.position.x = (player.position.x - cell_left) * 2 - 16 124 label.position.x = (player.position.x - cell_left) * 2 - 16
141 label.position.y = (player.position.z - cell_top) * 2 - 16 125 label.position.y = (player.position.z - cell_top) * 2 - 16
126
127
128func _renderMap(gridmap):
129 var heights = {}
130
131 var rendered = Image.create_empty(cell_width, cell_height, false, Image.FORMAT_RGBA8)
132 rendered.fill(Color.TRANSPARENT)
133
134 var meshes_node = get_tree().get_root().get_node("scene/Meshes")
135 if meshes_node != null:
136 _renderMeshNode(gridmap, meshes_node, rendered)
137
138 for pos in gridmap.get_used_cells():
139 var in_plane = Vector2i(pos.x, pos.z)
140
141 if in_plane in heights and heights[in_plane] > pos.y:
142 continue
143
144 heights[in_plane] = pos.y
145
146 var cell_item = gridmap.get_cell_item(pos)
147 var mesh = gridmap.mesh_library.get_item_mesh(cell_item)
148 var material = mesh.surface_get_material(0)
149 var color = material.albedo_color
150
151 rendered.set_pixel(pos.x - cell_left, pos.z - cell_top, color)
152
153 return rendered
154
155
156func _renderMeshNode(gridmap, mesh, rendered):
157 if mesh is MeshInstance3D:
158 var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top))
159 var global_tl = gridmap.to_global(local_tl)
160 var mesh_material = mesh.get_surface_override_material(0)
161 if mesh_material != null:
162 var mesh_color = mesh_material.albedo_color
163
164 for y in range(
165 max(mesh.position.z - mesh.scale.z / 2 - global_tl.z, 0),
166 min(mesh.position.z + mesh.scale.z / 2 - global_tl.z, cell_height)
167 ):
168 for x in range(
169 max(mesh.position.x - mesh.scale.x / 2 - global_tl.x, 0),
170 min(mesh.position.x + mesh.scale.x / 2 - global_tl.x, cell_width)
171 ):
172 rendered.set_pixel(x, y, mesh_color)
173
174 for child in mesh.get_children():
175 _renderMeshNode(gridmap, child, rendered)
diff --git a/client/Archipelago/player.gd b/client/Archipelago/player.gd index 2d310c1..e58f1bc 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd
@@ -24,6 +24,9 @@ var compass
24func _ready(): 24func _ready():
25 var khl_script = load("res://scripts/nodes/keyHolderListener.gd") 25 var khl_script = load("res://scripts/nodes/keyHolderListener.gd")
26 26
27 var pause_menu = get_node("pause_menu")
28 pause_menu.layer = 3
29
27 var ap = global.get_node("Archipelago") 30 var ap = global.get_node("Archipelago")
28 var gamedata = global.get_node("Gamedata") 31 var gamedata = global.get_node("Gamedata")
29 32
diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index 15ffe16..d5aa747 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd
@@ -16,6 +16,8 @@ func _ready():
16 # data packages. 16 # data packages.
17 ProjectSettings.set_setting("network/limits/websocket_client/max_in_buffer_kb", 8192) 17 ProjectSettings.set_setting("network/limits/websocket_client/max_in_buffer_kb", 8192)
18 18
19 switcher.layer = 4
20
19 # Create the global AP manager, if it doesn't already exist. 21 # Create the global AP manager, if it doesn't already exist.
20 if not global.has_node("Archipelago"): 22 if not global.has_node("Archipelago"):
21 var ap_script = ResourceLoader.load("user://maps/Archipelago/manager.gd") 23 var ap_script = ResourceLoader.load("user://maps/Archipelago/manager.gd")