diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2023-04-28 00:09:55 -0400 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2023-04-28 00:09:55 -0400 |
| commit | 7446b4accb7b456d5ada064dab607b64e11c2895 (patch) | |
| tree | d6f59a21de7ca0bc837bbe95b4de7cb4e4e87667 | |
| parent | a33a7e1e60c48d61a42c540fd5083a3b0dc07b6e (diff) | |
| download | lingo-archipelago-7446b4accb7b456d5ada064dab607b64e11c2895.tar.gz lingo-archipelago-7446b4accb7b456d5ada064dab607b64e11c2895.tar.bz2 lingo-archipelago-7446b4accb7b456d5ada064dab607b64e11c2895.zip | |
Item names are colored by type in messages
The messages node is now a vertical box container with individual RichTextLabels for each line.
| -rw-r--r-- | Archipelago/client.gd | 42 | ||||
| -rw-r--r-- | Archipelago/messages.gd | 68 |
2 files changed, 70 insertions, 40 deletions
| diff --git a/Archipelago/client.gd b/Archipelago/client.gd index 0531fe6..46b9ff0 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd | |||
| @@ -293,13 +293,14 @@ func _on_data(): | |||
| 293 | var i = 0 | 293 | var i = 0 |
| 294 | for item in message["items"]: | 294 | for item in message["items"]: |
| 295 | if _map_loaded: | 295 | if _map_loaded: |
| 296 | processItem(item["item"], message["index"] + i, item["player"]) | 296 | processItem(item["item"], message["index"] + i, item["player"], item["flags"]) |
| 297 | else: | 297 | else: |
| 298 | _held_items.append( | 298 | _held_items.append( |
| 299 | { | 299 | { |
| 300 | "item": item["item"], | 300 | "item": item["item"], |
| 301 | "index": message["index"] + i, | 301 | "index": message["index"] + i, |
| 302 | "from": item["player"] | 302 | "from": item["player"], |
| 303 | "flags": item["flags"] | ||
| 303 | } | 304 | } |
| 304 | ) | 305 | ) |
| 305 | i += 1 | 306 | i += 1 |
| @@ -324,6 +325,8 @@ func _on_data(): | |||
| 324 | if _player_name_by_slot.has(message["receiving"]): | 325 | if _player_name_by_slot.has(message["receiving"]): |
| 325 | player_name = _player_name_by_slot[message["receiving"]] | 326 | player_name = _player_name_by_slot[message["receiving"]] |
| 326 | 327 | ||
| 328 | var item_color = colorForItemType(message["item"]["flags"]) | ||
| 329 | |||
| 327 | var messages_node = get_tree().get_root().get_node("Spatial/AP_Messages") | 330 | var messages_node = get_tree().get_root().get_node("Spatial/AP_Messages") |
| 328 | if message["type"] == "Hint": | 331 | if message["type"] == "Hint": |
| 329 | var is_for = "" | 332 | var is_for = "" |
| @@ -331,11 +334,16 @@ func _on_data(): | |||
| 331 | is_for = " for %s" % player_name | 334 | is_for = " for %s" % player_name |
| 332 | if !message.has("found") || !message["found"]: | 335 | if !message.has("found") || !message["found"]: |
| 333 | messages_node.showMessage( | 336 | messages_node.showMessage( |
| 334 | "Hint: %s%s is on %s" % [item_name, is_for, location_name] | 337 | ( |
| 338 | "Hint: [color=%s]%s[/color]%s is on %s" | ||
| 339 | % [item_color, item_name, is_for, location_name] | ||
| 340 | ) | ||
| 335 | ) | 341 | ) |
| 336 | else: | 342 | else: |
| 337 | if message["receiving"] != _slot: | 343 | if message["receiving"] != _slot: |
| 338 | messages_node.showMessage("Sent %s to %s" % [item_name, player_name]) | 344 | messages_node.showMessage( |
| 345 | "Sent [color=%s]%s[/color] to %s" % [item_color, item_name, player_name] | ||
| 346 | ) | ||
| 339 | 347 | ||
| 340 | elif cmd == "Bounced": | 348 | elif cmd == "Bounced": |
| 341 | if ( | 349 | if ( |
| @@ -486,7 +494,7 @@ func mapFinishedLoading(): | |||
| 486 | emit_signal("evaluate_solvability") | 494 | emit_signal("evaluate_solvability") |
| 487 | 495 | ||
| 488 | for item in _held_items: | 496 | for item in _held_items: |
| 489 | processItem(item["item"], item["index"], item["from"]) | 497 | processItem(item["item"], item["index"], item["from"], item["flags"]) |
| 490 | 498 | ||
| 491 | sendMessage([{"cmd": "LocationChecks", "locations": _held_locations}]) | 499 | sendMessage([{"cmd": "LocationChecks", "locations": _held_locations}]) |
| 492 | 500 | ||
| @@ -495,7 +503,7 @@ func mapFinishedLoading(): | |||
| 495 | _held_locations = [] | 503 | _held_locations = [] |
| 496 | 504 | ||
| 497 | 505 | ||
| 498 | func processItem(item, index, from): | 506 | func processItem(item, index, from, flags): |
| 499 | global._print(item) | 507 | global._print(item) |
| 500 | 508 | ||
| 501 | var stringified = String(item) | 509 | var stringified = String(item) |
| @@ -522,7 +530,7 @@ func processItem(item, index, from): | |||
| 522 | if _item_name_to_id["Progressive Orange Tower"] == item and _tower_floors < orange_tower.size(): | 530 | if _item_name_to_id["Progressive Orange Tower"] == item and _tower_floors < orange_tower.size(): |
| 523 | var subitem_name = "Orange Tower - %s Floor" % orange_tower[_tower_floors] | 531 | var subitem_name = "Orange Tower - %s Floor" % orange_tower[_tower_floors] |
| 524 | global._print(subitem_name) | 532 | global._print(subitem_name) |
| 525 | processItem(_item_name_to_id[subitem_name], null, null) | 533 | processItem(_item_name_to_id[subitem_name], null, null, null) |
| 526 | _tower_floors += 1 | 534 | _tower_floors += 1 |
| 527 | 535 | ||
| 528 | if _color_shuffle and color_items.has(_item_id_to_name[item]): | 536 | if _color_shuffle and color_items.has(_item_id_to_name[item]): |
| @@ -547,11 +555,15 @@ func processItem(item, index, from): | |||
| 547 | if _player_name_by_slot.has(from): | 555 | if _player_name_by_slot.has(from): |
| 548 | player_name = _player_name_by_slot[from] | 556 | player_name = _player_name_by_slot[from] |
| 549 | 557 | ||
| 558 | var item_color = colorForItemType(flags) | ||
| 559 | |||
| 550 | var messages_node = get_tree().get_root().get_node("Spatial/AP_Messages") | 560 | var messages_node = get_tree().get_root().get_node("Spatial/AP_Messages") |
| 551 | if from == _slot: | 561 | if from == _slot: |
| 552 | messages_node.showMessage("Found %s" % item_name) | 562 | messages_node.showMessage("Found [color=%s]%s[/color]" % [item_color, item_name]) |
| 553 | else: | 563 | else: |
| 554 | messages_node.showMessage("Received %s from %s" % [item_name, player_name]) | 564 | messages_node.showMessage( |
| 565 | "Received [color=%s]%s[/color] from %s" % [item_color, item_name, player_name] | ||
| 566 | ) | ||
| 555 | 567 | ||
| 556 | var effects_node = get_tree().get_root().get_node("Spatial/AP_Effects") | 568 | var effects_node = get_tree().get_root().get_node("Spatial/AP_Effects") |
| 557 | if item_name == "Slowness Trap": | 569 | if item_name == "Slowness Trap": |
| @@ -566,3 +578,15 @@ func doorIsVanilla(door): | |||
| 566 | 578 | ||
| 567 | func paintingIsVanilla(painting): | 579 | func paintingIsVanilla(painting): |
| 568 | return !_mentioned_paintings.has(painting) | 580 | return !_mentioned_paintings.has(painting) |
| 581 | |||
| 582 | |||
| 583 | func colorForItemType(flags): | ||
| 584 | var int_flags = int(flags) | ||
| 585 | if int_flags & 1: # progression | ||
| 586 | return "#bc51e0" | ||
| 587 | elif int_flags & 2: # useful | ||
| 588 | return "#2b67ff" | ||
| 589 | elif int_flags & 4: # trap | ||
| 590 | return "#d63a22" | ||
| 591 | else: # filler | ||
| 592 | return "#14de9e" | ||
| diff --git a/Archipelago/messages.gd b/Archipelago/messages.gd index 3a2b4b2..d5589ef 100644 --- a/Archipelago/messages.gd +++ b/Archipelago/messages.gd | |||
| @@ -1,54 +1,60 @@ | |||
| 1 | extends Node | 1 | extends Node |
| 2 | 2 | ||
| 3 | var _message_queue = [] | 3 | var _message_queue = [] |
| 4 | var _font | ||
| 5 | var _container | ||
| 6 | var _ordered_labels = [] | ||
| 4 | 7 | ||
| 5 | 8 | ||
| 6 | func _ready(): | 9 | func _ready(): |
| 7 | var label = Label.new() | 10 | _container = VBoxContainer.new() |
| 8 | label.set_name("label") | 11 | _container.set_name("Container") |
| 9 | label.margin_right = 1920.0 | 12 | _container.anchor_bottom = 1 |
| 10 | label.margin_bottom = 1080.0 - 20 | 13 | _container.margin_left = 20.0 |
| 11 | label.margin_left = 20.0 | 14 | _container.margin_right = 1920.0 |
| 12 | label.align = Label.ALIGN_LEFT | 15 | _container.margin_top = 0.0 |
| 13 | label.valign = Label.VALIGN_BOTTOM | 16 | _container.margin_bottom = -20.0 |
| 14 | 17 | _container.alignment = BoxContainer.ALIGN_END | |
| 15 | var dynamic_font = DynamicFont.new() | 18 | _container.mouse_filter = Control.MOUSE_FILTER_IGNORE |
| 16 | dynamic_font.font_data = load("res://fonts/Lingo.ttf") | 19 | self.add_child(_container) |
| 17 | dynamic_font.size = 36 | 20 | |
| 18 | dynamic_font.outline_color = Color(0, 0, 0, 1) | 21 | _font = DynamicFont.new() |
| 19 | dynamic_font.outline_size = 2 | 22 | _font.font_data = load("res://fonts/Lingo.ttf") |
| 20 | label.add_font_override("font", dynamic_font) | 23 | _font.size = 36 |
| 21 | 24 | _font.outline_color = Color(0, 0, 0, 1) | |
| 22 | add_child(label) | 25 | _font.outline_size = 2 |
| 26 | |||
| 27 | |||
| 28 | func _add_message(text): | ||
| 29 | var new_label = RichTextLabel.new() | ||
| 30 | new_label.push_font(_font) | ||
| 31 | new_label.append_bbcode(text) | ||
| 32 | new_label.fit_content_height = true | ||
| 33 | |||
| 34 | _container.add_child(new_label) | ||
| 35 | _ordered_labels.push_back(new_label) | ||
| 23 | 36 | ||
| 24 | 37 | ||
| 25 | func showMessage(text): | 38 | func showMessage(text): |
| 26 | var label = self.get_node("label") | 39 | if _ordered_labels.size() >= 9: |
| 27 | if label.text.count("\n") >= 9: | ||
| 28 | _message_queue.append(text) | 40 | _message_queue.append(text) |
| 29 | return | 41 | return |
| 30 | 42 | ||
| 31 | if !label.text == "": | 43 | _add_message(text) |
| 32 | label.text += "\n" | ||
| 33 | label.text += text | ||
| 34 | return | ||
| 35 | 44 | ||
| 36 | label.text = text | 45 | if _ordered_labels.size() > 1: |
| 46 | return | ||
| 37 | 47 | ||
| 38 | var timeout = 10.0 | 48 | var timeout = 10.0 |
| 39 | while label.text != "": | 49 | while !_ordered_labels.empty(): |
| 40 | yield(get_tree().create_timer(timeout), "timeout") | 50 | yield(get_tree().create_timer(timeout), "timeout") |
| 41 | 51 | ||
| 42 | var newline = label.text.find("\n") | 52 | var to_remove = _ordered_labels.pop_front() |
| 43 | if newline == -1: | 53 | to_remove.queue_free() |
| 44 | label.text = "" | ||
| 45 | else: | ||
| 46 | label.text = label.text.substr(newline + 1) | ||
| 47 | 54 | ||
| 48 | if !_message_queue.empty(): | 55 | if !_message_queue.empty(): |
| 49 | var next_msg = _message_queue.pop_front() | 56 | var next_msg = _message_queue.pop_front() |
| 50 | label.text += "\n" | 57 | _add_message(next_msg) |
| 51 | label.text += next_msg | ||
| 52 | 58 | ||
| 53 | if timeout > 4: | 59 | if timeout > 4: |
| 54 | timeout -= 3 | 60 | timeout -= 3 |
