diff options
-rw-r--r-- | client/Archipelago/manager.gd | 1 | ||||
-rw-r--r-- | client/Archipelago/minimap.gd | 141 | ||||
-rw-r--r-- | client/Archipelago/player.gd | 4 | ||||
-rw-r--r-- | client/Archipelago/settings_screen.gd | 1 | ||||
-rw-r--r-- | client/Archipelago/textclient.gd | 1 |
5 files changed, 148 insertions, 0 deletions
diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 608a106..b170c77 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd | |||
@@ -5,6 +5,7 @@ const MOD_VERSION = 7 | |||
5 | var SCRIPT_client | 5 | var SCRIPT_client |
6 | var SCRIPT_keyboard | 6 | var SCRIPT_keyboard |
7 | var SCRIPT_locationListener | 7 | var SCRIPT_locationListener |
8 | var SCRIPT_minimap | ||
8 | var SCRIPT_uuid | 9 | var SCRIPT_uuid |
9 | var SCRIPT_victoryListener | 10 | var SCRIPT_victoryListener |
10 | 11 | ||
diff --git a/client/Archipelago/minimap.gd b/client/Archipelago/minimap.gd new file mode 100644 index 0000000..4fb1214 --- /dev/null +++ b/client/Archipelago/minimap.gd | |||
@@ -0,0 +1,141 @@ | |||
1 | extends CanvasLayer | ||
2 | |||
3 | var player | ||
4 | var drawer | ||
5 | var sprite | ||
6 | var label | ||
7 | |||
8 | var cell_left | ||
9 | var cell_top | ||
10 | var cell_right | ||
11 | var cell_bottom | ||
12 | var center_x_min | ||
13 | var center_x_max | ||
14 | var center_y_min | ||
15 | var center_y_max | ||
16 | |||
17 | |||
18 | func _ready(): | ||
19 | player = get_tree().get_root().get_node("scene/player") | ||
20 | |||
21 | var svc = PanelContainer.new() | ||
22 | svc.anchor_left = 1.0 | ||
23 | svc.anchor_top = 1.0 | ||
24 | svc.anchor_right = 1.0 | ||
25 | svc.anchor_bottom = 1.0 | ||
26 | svc.offset_left = -320.0 | ||
27 | svc.offset_top = -320.0 | ||
28 | svc.offset_right = -64.0 | ||
29 | svc.offset_bottom = -64.0 | ||
30 | svc.clip_contents = true | ||
31 | add_child(svc) | ||
32 | |||
33 | var background_color = Color.WHITE | ||
34 | |||
35 | var world_env = get_tree().get_root().get_node("scene/WorldEnvironment") | ||
36 | if world_env != null and world_env.environment != null: | ||
37 | if world_env.environment.background_mode == Environment.BG_COLOR: | ||
38 | background_color = world_env.environment.background_color | ||
39 | elif ( | ||
40 | world_env.environment.background_mode == Environment.BG_SKY | ||
41 | and world_env.environment.sky != null | ||
42 | and world_env.environment.sky.sky_material != null | ||
43 | ): | ||
44 | var sky = world_env.environment.sky.sky_material | ||
45 | if sky is PhysicalSkyMaterial: | ||
46 | background_color = sky.ground_color | ||
47 | elif sky is ProceduralSkyMaterial: | ||
48 | background_color = sky.sky_top_color | ||
49 | |||
50 | var stylebox = StyleBoxFlat.new() | ||
51 | stylebox.bg_color = Color(background_color, 0.6) | ||
52 | svc.add_theme_stylebox_override("panel", stylebox) | ||
53 | |||
54 | drawer = Node2D.new() | ||
55 | svc.add_child(drawer) | ||
56 | |||
57 | var gridmap = get_tree().get_root().get_node("scene/GridMap") | ||
58 | if gridmap == null: | ||
59 | visible = false | ||
60 | return | ||
61 | |||
62 | cell_left = 0 | ||
63 | cell_top = 0 | ||
64 | cell_right = 0 | ||
65 | cell_bottom = 0 | ||
66 | |||
67 | for pos in gridmap.get_used_cells(): | ||
68 | if pos.x < cell_left: | ||
69 | cell_left = pos.x | ||
70 | if pos.x > cell_right: | ||
71 | cell_right = pos.x | ||
72 | if pos.z < cell_top: | ||
73 | cell_top = pos.z | ||
74 | if pos.z > cell_bottom: | ||
75 | cell_bottom = pos.z | ||
76 | |||
77 | var cell_width = cell_right - cell_left + 1 | ||
78 | var cell_height = cell_bottom - cell_top + 1 | ||
79 | |||
80 | var heights = {} | ||
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 | |||
100 | var image_texture = ImageTexture.create_from_image(rendered) | ||
101 | sprite = Sprite2D.new() | ||
102 | sprite.texture = image_texture | ||
103 | sprite.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST | ||
104 | sprite.scale = Vector2(2, 2) | ||
105 | sprite.centered = false | ||
106 | drawer.add_child(sprite) | ||
107 | |||
108 | label = Label.new() | ||
109 | label.theme = preload("res://assets/themes/baseUI.tres") | ||
110 | label.add_theme_font_size_override("font_size", 32) | ||
111 | label.text = "@" | ||
112 | drawer.add_child(label) | ||
113 | |||
114 | 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)) | ||
116 | var global_tl = gridmap.to_global(local_tl) | ||
117 | var global_br = gridmap.to_global(local_br) | ||
118 | |||
119 | center_x_min = 0 | ||
120 | center_x_max = cell_width - 128 | ||
121 | center_y_min = 0 | ||
122 | center_y_max = cell_height - 128 | ||
123 | |||
124 | if center_x_max < center_x_min: | ||
125 | center_x_min = (center_x_min + center_x_max) / 2 | ||
126 | center_x_max = center_x_min | ||
127 | |||
128 | if center_y_max < center_y_min: | ||
129 | center_y_min = (center_y_min + center_y_max) / 2 | ||
130 | center_y_max = center_y_min | ||
131 | |||
132 | |||
133 | func _process(_delta): | ||
134 | if visible == false: | ||
135 | return | ||
136 | |||
137 | drawer.position.x = clamp(player.position.x - cell_left - 64, center_x_min, center_x_max) * -2 | ||
138 | drawer.position.y = clamp(player.position.z - cell_top - 64, center_y_min, center_y_max) * -2 | ||
139 | |||
140 | label.position.x = (player.position.x - cell_left) * 2 - 16 | ||
141 | label.position.y = (player.position.z - cell_top) * 2 - 16 | ||
diff --git a/client/Archipelago/player.gd b/client/Archipelago/player.gd index 538830f..2d310c1 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd | |||
@@ -333,6 +333,10 @@ func _ready(): | |||
333 | entry1.get_parent().add_child.call_deferred(entry12) | 333 | entry1.get_parent().add_child.call_deferred(entry12) |
334 | entry1.queue_free() | 334 | entry1.queue_free() |
335 | 335 | ||
336 | var minimap = ap.SCRIPT_minimap.new() | ||
337 | minimap.name = "Minimap" | ||
338 | get_parent().add_child.call_deferred(minimap) | ||
339 | |||
336 | super._ready() | 340 | super._ready() |
337 | 341 | ||
338 | await get_tree().process_frame | 342 | await get_tree().process_frame |
diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index b29fb19..15ffe16 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd | |||
@@ -25,6 +25,7 @@ func _ready(): | |||
25 | ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") | 25 | ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") |
26 | ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd") | 26 | ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd") |
27 | ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") | 27 | ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") |
28 | ap_instance.SCRIPT_minimap = load("user://maps/Archipelago/minimap.gd") | ||
28 | ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") | 29 | ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") |
29 | ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd") | 30 | ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd") |
30 | 31 | ||
diff --git a/client/Archipelago/textclient.gd b/client/Archipelago/textclient.gd index 5e648f2..26831b4 100644 --- a/client/Archipelago/textclient.gd +++ b/client/Archipelago/textclient.gd | |||
@@ -8,6 +8,7 @@ var is_open = false | |||
8 | 8 | ||
9 | func _ready(): | 9 | func _ready(): |
10 | process_mode = ProcessMode.PROCESS_MODE_ALWAYS | 10 | process_mode = ProcessMode.PROCESS_MODE_ALWAYS |
11 | layer = 2 | ||
11 | 12 | ||
12 | panel = Panel.new() | 13 | panel = Panel.new() |
13 | panel.set_name("Panel") | 14 | panel.set_name("Panel") |