diff options
| -rw-r--r-- | Archipelago/client.gd | 31 | ||||
| -rw-r--r-- | Archipelago/mypainting.gd | 113 |
2 files changed, 85 insertions, 59 deletions
| diff --git a/Archipelago/client.gd b/Archipelago/client.gd index 5840550..19fcee1 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd | |||
| @@ -116,6 +116,7 @@ var _cached_slowness = 0 | |||
| 116 | var _cached_iceland = 0 | 116 | var _cached_iceland = 0 |
| 117 | var _cached_atbash = 0 | 117 | var _cached_atbash = 0 |
| 118 | var _geronimo_skip = false | 118 | var _geronimo_skip = false |
| 119 | var _checked_paintings = [] | ||
| 119 | 120 | ||
| 120 | signal could_not_connect | 121 | signal could_not_connect |
| 121 | signal connect_status | 122 | signal connect_status |
| @@ -366,6 +367,18 @@ func _on_data(): | |||
| 366 | 367 | ||
| 367 | requestSync() | 368 | requestSync() |
| 368 | 369 | ||
| 370 | sendMessage( | ||
| 371 | [ | ||
| 372 | { | ||
| 373 | "cmd": "Set", | ||
| 374 | "key": "Lingo_%d_Paintings" % [_slot], | ||
| 375 | "default": [], | ||
| 376 | "want_reply": true, | ||
| 377 | "operations": [{"operation": "default", "value": []}] | ||
| 378 | } | ||
| 379 | ] | ||
| 380 | ) | ||
| 381 | |||
| 369 | emit_signal("client_connected") | 382 | emit_signal("client_connected") |
| 370 | 383 | ||
| 371 | elif cmd == "ConnectionRefused": | 384 | elif cmd == "ConnectionRefused": |
| @@ -483,6 +496,10 @@ func _on_data(): | |||
| 483 | # Return the player home. | 496 | # Return the player home. |
| 484 | get_tree().get_root().get_node("Spatial/player/pause_menu")._reload() | 497 | get_tree().get_root().get_node("Spatial/player/pause_menu")._reload() |
| 485 | 498 | ||
| 499 | elif cmd == "SetReply": | ||
| 500 | if message.has("key") and message["key"] == ("Lingo_%d_Paintings" % _slot): | ||
| 501 | _checked_paintings = message["value"] | ||
| 502 | |||
| 486 | 503 | ||
| 487 | func _process(_delta): | 504 | func _process(_delta): |
| 488 | if _should_process: | 505 | if _should_process: |
| @@ -641,13 +658,14 @@ func sendLocation(loc_id): | |||
| 641 | _held_locations.append(loc_id) | 658 | _held_locations.append(loc_id) |
| 642 | 659 | ||
| 643 | 660 | ||
| 644 | func setValue(key, value): | 661 | func setValue(key, value, operation = "replace"): |
| 645 | sendMessage( | 662 | sendMessage( |
| 646 | [ | 663 | [ |
| 647 | { | 664 | { |
| 648 | "cmd": "Set", | 665 | "cmd": "Set", |
| 649 | "key": "Lingo_%d_%s" % [_slot, key], | 666 | "key": "Lingo_%d_%s" % [_slot, key], |
| 650 | "operations": [{"operation": "replace", "value": value}] | 667 | "want_reply": false, |
| 668 | "operations": [{"operation": operation, "value": value}] | ||
| 651 | } | 669 | } |
| 652 | ] | 670 | ] |
| 653 | ) | 671 | ) |
| @@ -803,6 +821,15 @@ func geronimo(): | |||
| 803 | saveLocaldata() | 821 | saveLocaldata() |
| 804 | 822 | ||
| 805 | 823 | ||
| 824 | func checkPainting(painting_id): | ||
| 825 | if _checked_paintings.has(painting_id): | ||
| 826 | return | ||
| 827 | |||
| 828 | _checked_paintings.append(painting_id) | ||
| 829 | |||
| 830 | setValue("Paintings", [painting_id], "add") | ||
| 831 | |||
| 832 | |||
| 806 | func colorForItemType(flags): | 833 | func colorForItemType(flags): |
| 807 | var int_flags = int(flags) | 834 | var int_flags = int(flags) |
| 808 | if int_flags & 1: # progression | 835 | if int_flags & 1: # progression |
| diff --git a/Archipelago/mypainting.gd b/Archipelago/mypainting.gd index 999b122..7aee434 100644 --- a/Archipelago/mypainting.gd +++ b/Archipelago/mypainting.gd | |||
| @@ -30,66 +30,65 @@ func movePainting(): | |||
| 30 | 30 | ||
| 31 | 31 | ||
| 32 | func _looked_at(body, painting): | 32 | func _looked_at(body, painting): |
| 33 | if ( | 33 | if body.is_in_group("player") and (painting.get_name() == self.get_parent().get_name()): |
| 34 | target != null | 34 | var apclient = global.get_node("Archipelago") |
| 35 | and body.is_in_group("player") | 35 | apclient.checkPainting(painting.get_name()) |
| 36 | and (painting.get_name() == self.get_parent().get_name()) | ||
| 37 | ): | ||
| 38 | var target_dir = _dir_to_int(target.orientation) | ||
| 39 | var source_dir = _dir_to_int(orientation) | ||
| 40 | var rotate = target_dir - source_dir | ||
| 41 | if rotate < 0: | ||
| 42 | rotate += 4 | ||
| 43 | rotate *= 90 | ||
| 44 | 36 | ||
| 45 | var target_painting = target.get_parent() | 37 | if target != null: |
| 38 | var target_dir = _dir_to_int(target.orientation) | ||
| 39 | var source_dir = _dir_to_int(orientation) | ||
| 40 | var rotate = target_dir - source_dir | ||
| 41 | if rotate < 0: | ||
| 42 | rotate += 4 | ||
| 43 | rotate *= 90 | ||
| 46 | 44 | ||
| 47 | # this is ACW | 45 | var target_painting = target.get_parent() |
| 48 | if rotate == 0: | ||
| 49 | body.translation.x = ( | ||
| 50 | target_painting.translation.x + (body.translation.x - painting.translation.x) | ||
| 51 | ) | ||
| 52 | body.translation.y = ( | ||
| 53 | target_painting.translation.y + (body.translation.y - painting.translation.y) | ||
| 54 | ) | ||
| 55 | body.translation.z = ( | ||
| 56 | target_painting.translation.z + (body.translation.z - painting.translation.z) | ||
| 57 | ) | ||
| 58 | elif rotate == 180: | ||
| 59 | body.translation.x = ( | ||
| 60 | target_painting.translation.x - (body.translation.x - painting.translation.x) | ||
| 61 | ) | ||
| 62 | body.translation.y = ( | ||
| 63 | target_painting.translation.y + (body.translation.y - painting.translation.y) | ||
| 64 | ) | ||
| 65 | body.translation.z = ( | ||
| 66 | target_painting.translation.z - (body.translation.z - painting.translation.z) | ||
| 67 | ) | ||
| 68 | body.rotate_y(PI) | ||
| 69 | body.velocity = body.velocity.rotated(Vector3(0, 1, 0), PI) | ||
| 70 | elif rotate == 90: | ||
| 71 | var diff_x = body.translation.x - painting.translation.x | ||
| 72 | var diff_y = body.translation.y - painting.translation.y | ||
| 73 | var diff_z = body.translation.z - painting.translation.z | ||
| 74 | body.translation.x = target_painting.translation.x + diff_z | ||
| 75 | body.translation.y = target_painting.translation.y + diff_y | ||
| 76 | body.translation.z = target_painting.translation.z - diff_x | ||
| 77 | body.rotate_y(PI / 2) | ||
| 78 | body.velocity = body.velocity.rotated(Vector3(0, 1, 0), PI / 2) | ||
| 79 | elif rotate == 270: | ||
| 80 | var diff_x = body.translation.x - painting.translation.x | ||
| 81 | var diff_y = body.translation.y - painting.translation.y | ||
| 82 | var diff_z = body.translation.z - painting.translation.z | ||
| 83 | body.translation.x = target_painting.translation.x - diff_z | ||
| 84 | body.translation.y = target_painting.translation.y + diff_y | ||
| 85 | body.translation.z = target_painting.translation.z + diff_x | ||
| 86 | body.rotate_y(3 * PI / 2) | ||
| 87 | body.velocity = body.velocity.rotated(Vector3(0, 1, 0), 3 * PI / 2) | ||
| 88 | 46 | ||
| 89 | var apclient = global.get_node("Archipelago") | 47 | # this is ACW |
| 90 | if !apclient._pilgrimage_allows_paintings: | 48 | if rotate == 0: |
| 91 | global.sunwarp = 1 | 49 | body.translation.x = ( |
| 92 | body.get_node("pivot/camera/sunwarp_background").visible = false | 50 | target_painting.translation.x + (body.translation.x - painting.translation.x) |
| 51 | ) | ||
| 52 | body.translation.y = ( | ||
| 53 | target_painting.translation.y + (body.translation.y - painting.translation.y) | ||
| 54 | ) | ||
| 55 | body.translation.z = ( | ||
| 56 | target_painting.translation.z + (body.translation.z - painting.translation.z) | ||
| 57 | ) | ||
| 58 | elif rotate == 180: | ||
| 59 | body.translation.x = ( | ||
| 60 | target_painting.translation.x - (body.translation.x - painting.translation.x) | ||
| 61 | ) | ||
| 62 | body.translation.y = ( | ||
| 63 | target_painting.translation.y + (body.translation.y - painting.translation.y) | ||
| 64 | ) | ||
| 65 | body.translation.z = ( | ||
| 66 | target_painting.translation.z - (body.translation.z - painting.translation.z) | ||
| 67 | ) | ||
| 68 | body.rotate_y(PI) | ||
| 69 | body.velocity = body.velocity.rotated(Vector3(0, 1, 0), PI) | ||
| 70 | elif rotate == 90: | ||
| 71 | var diff_x = body.translation.x - painting.translation.x | ||
| 72 | var diff_y = body.translation.y - painting.translation.y | ||
| 73 | var diff_z = body.translation.z - painting.translation.z | ||
| 74 | body.translation.x = target_painting.translation.x + diff_z | ||
| 75 | body.translation.y = target_painting.translation.y + diff_y | ||
| 76 | body.translation.z = target_painting.translation.z - diff_x | ||
| 77 | body.rotate_y(PI / 2) | ||
| 78 | body.velocity = body.velocity.rotated(Vector3(0, 1, 0), PI / 2) | ||
| 79 | elif rotate == 270: | ||
| 80 | var diff_x = body.translation.x - painting.translation.x | ||
| 81 | var diff_y = body.translation.y - painting.translation.y | ||
| 82 | var diff_z = body.translation.z - painting.translation.z | ||
| 83 | body.translation.x = target_painting.translation.x - diff_z | ||
| 84 | body.translation.y = target_painting.translation.y + diff_y | ||
| 85 | body.translation.z = target_painting.translation.z + diff_x | ||
| 86 | body.rotate_y(3 * PI / 2) | ||
| 87 | body.velocity = body.velocity.rotated(Vector3(0, 1, 0), 3 * PI / 2) | ||
| 88 | |||
| 89 | if !apclient._pilgrimage_allows_paintings: | ||
| 90 | global.sunwarp = 1 | ||
| 91 | body.get_node("pivot/camera/sunwarp_background").visible = false | ||
| 93 | 92 | ||
| 94 | 93 | ||
| 95 | func _dir_to_int(dir): | 94 | func _dir_to_int(dir): |
