about summary refs log tree commit diff stats
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/Archipelago/minimap.gd106
-rw-r--r--client/Archipelago/player.gd3
-rw-r--r--client/Archipelago/settings_screen.gd2
3 files changed, 70 insertions, 41 deletions
diff --git a/client/Archipelago/minimap.gd b/client/Archipelago/minimap.gd index 15993fb..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
@@ -18,7 +20,7 @@ var center_y_max
18func _ready(): 20func _ready():
19 player = get_tree().get_root().get_node("scene/player") 21 player = get_tree().get_root().get_node("scene/player")
20 22
21 var svc = SubViewportContainer.new() 23 var svc = PanelContainer.new()
22 svc.anchor_left = 1.0 24 svc.anchor_left = 1.0
23 svc.anchor_top = 1.0 25 svc.anchor_top = 1.0
24 svc.anchor_right = 1.0 26 svc.anchor_right = 1.0
@@ -27,13 +29,9 @@ func _ready():
27 svc.offset_top = -320.0 29 svc.offset_top = -320.0
28 svc.offset_right = -64.0 30 svc.offset_right = -64.0
29 svc.offset_bottom = -64.0 31 svc.offset_bottom = -64.0
32 svc.clip_contents = true
30 add_child(svc) 33 add_child(svc)
31 34
32 var sv = SubViewport.new()
33 sv.size = Vector2i(256, 256)
34 sv.disable_3d = true
35 svc.add_child(sv)
36
37 var background_color = Color.WHITE 35 var background_color = Color.WHITE
38 36
39 var world_env = get_tree().get_root().get_node("scene/WorldEnvironment") 37 var world_env = get_tree().get_root().get_node("scene/WorldEnvironment")
@@ -51,18 +49,12 @@ func _ready():
51 elif sky is ProceduralSkyMaterial: 49 elif sky is ProceduralSkyMaterial:
52 background_color = sky.sky_top_color 50 background_color = sky.sky_top_color
53 51
54 var background_image = Image.create_empty(256, 256, false, Image.FORMAT_RGBA8) 52 var stylebox = StyleBoxFlat.new()
55 background_image.fill(background_color) 53 stylebox.bg_color = Color(background_color, 0.6)
56 54 svc.add_theme_stylebox_override("panel", stylebox)
57 var background_texture = ImageTexture.create_from_image(background_image)
58 var background = Sprite2D.new()
59 background.texture = background_texture
60 background.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
61 background.centered = false
62 sv.add_child(background)
63 55
64 drawer = Node2D.new() 56 drawer = Node2D.new()
65 sv.add_child(drawer) 57 svc.add_child(drawer)
66 58
67 var gridmap = get_tree().get_root().get_node("scene/GridMap") 59 var gridmap = get_tree().get_root().get_node("scene/GridMap")
68 if gridmap == null: 60 if gridmap == null:
@@ -84,28 +76,10 @@ func _ready():
84 if pos.z > cell_bottom: 76 if pos.z > cell_bottom:
85 cell_bottom = pos.z 77 cell_bottom = pos.z
86 78
87 var cell_width = cell_right - cell_left + 1 79 cell_width = cell_right - cell_left + 1
88 var cell_height = cell_bottom - cell_top + 1 80 cell_height = cell_bottom - cell_top + 1
89
90 var heights = {}
91
92 var rendered = Image.create_empty(cell_width, cell_height, false, Image.FORMAT_RGBA8)
93 rendered.fill(Color.TRANSPARENT)
94
95 for pos in gridmap.get_used_cells():
96 var in_plane = Vector2i(pos.x, pos.z)
97
98 if in_plane in heights and heights[in_plane] > pos.y:
99 continue
100 81
101 heights[in_plane] = pos.y 82 var rendered = _renderMap(gridmap)
102
103 var cell_item = gridmap.get_cell_item(pos)
104 var mesh = gridmap.mesh_library.get_item_mesh(cell_item)
105 var material = mesh.surface_get_material(0)
106 var color = material.albedo_color
107
108 rendered.set_pixel(pos.x - cell_left, pos.z - cell_top, color)
109 83
110 var image_texture = ImageTexture.create_from_image(rendered) 84 var image_texture = ImageTexture.create_from_image(rendered)
111 sprite = Sprite2D.new() 85 sprite = Sprite2D.new()
@@ -121,10 +95,10 @@ func _ready():
121 label.text = "@" 95 label.text = "@"
122 drawer.add_child(label) 96 drawer.add_child(label)
123 97
124 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))
125 var local_br = gridmap.map_to_local(Vector3i(cell_right, 0, cell_bottom)) 99 #var global_tl = gridmap.to_global(local_tl)
126 var global_tl = gridmap.to_global(local_tl) 100 #var local_br = gridmap.map_to_local(Vector3i(cell_right, 0, cell_bottom))
127 var global_br = gridmap.to_global(local_br) 101 #var global_br = gridmap.to_global(local_br)
128 102
129 center_x_min = 0 103 center_x_min = 0
130 center_x_max = cell_width - 128 104 center_x_max = cell_width - 128
@@ -149,3 +123,53 @@ func _process(_delta):
149 123
150 label.position.x = (player.position.x - cell_left) * 2 - 16 124 label.position.x = (player.position.x - cell_left) * 2 - 16
151 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")