diff options
Diffstat (limited to 'apworld/client/rteMenu.gd')
| -rw-r--r-- | apworld/client/rteMenu.gd | 55 |
1 files changed, 55 insertions, 0 deletions
| diff --git a/apworld/client/rteMenu.gd b/apworld/client/rteMenu.gd index 5882d77..519f09f 100644 --- a/apworld/client/rteMenu.gd +++ b/apworld/client/rteMenu.gd | |||
| @@ -1,5 +1,7 @@ | |||
| 1 | extends "res://scripts/ui/rteMenu.gd" | 1 | extends "res://scripts/ui/rteMenu.gd" |
| 2 | 2 | ||
| 3 | var buttons = [] | ||
| 4 | |||
| 3 | 5 | ||
| 4 | func _readier(): | 6 | func _readier(): |
| 5 | var ap = global.get_node("Archipelago") | 7 | var ap = global.get_node("Archipelago") |
| @@ -8,5 +10,58 @@ func _readier(): | |||
| 8 | get_node("rte_daedalus").show() | 10 | get_node("rte_daedalus").show() |
| 9 | 11 | ||
| 10 | switcher.preload_map("res://objects/scenes/daedalus.tscn") | 12 | switcher.preload_map("res://objects/scenes/daedalus.tscn") |
| 13 | elif !ap.rte_mapping.is_empty(): | ||
| 14 | buttons = [$rte_the_plaza, $rte_the_gallery, $rte_daedalus, $rte_control_center] | ||
| 15 | for i in range(4): | ||
| 16 | buttons[i].name = "button_%d" % i | ||
| 17 | for i in range(4): | ||
| 18 | _setupButton(buttons[i], ap.rte_mapping[i]) | ||
| 19 | |||
| 20 | refreshButtons() | ||
| 11 | else: | 21 | else: |
| 12 | super()._readier() | 22 | super()._readier() |
| 23 | |||
| 24 | |||
| 25 | func _setupButton(button, map_name): | ||
| 26 | switcher.preload_map("res://objects/scenes/%s.tscn" % map_name) | ||
| 27 | |||
| 28 | button.hide() | ||
| 29 | button.text = map_name.replace("_", " ") | ||
| 30 | button.name = "rte_%s" % map_name | ||
| 31 | button.autowrap_mode = TextServer.AUTOWRAP_WORD | ||
| 32 | |||
| 33 | var ap = global.get_node("Archipelago") | ||
| 34 | if ( | ||
| 35 | ap.fast_travel_access == ap.kFAST_TRAVEL_ACCESS_VANILLA | ||
| 36 | and !unlocks.data.has("rte_%s" % map_name) | ||
| 37 | ): | ||
| 38 | unlocks.data["rte_%s" % map_name] = "" | ||
| 39 | |||
| 40 | |||
| 41 | func refreshButtons(): | ||
| 42 | var ap = global.get_node("Archipelago") | ||
| 43 | if ap.rte_mapping.is_empty(): | ||
| 44 | return | ||
| 45 | |||
| 46 | for i in range(4): | ||
| 47 | if _shouldShowButton(ap.rte_mapping[i]): | ||
| 48 | buttons[i].show() | ||
| 49 | else: | ||
| 50 | buttons[i].hide() | ||
| 51 | |||
| 52 | |||
| 53 | func _shouldShowButton(map_name): | ||
| 54 | var ap = global.get_node("Archipelago") | ||
| 55 | |||
| 56 | if ap.fast_travel_access == ap.kFAST_TRAVEL_ACCESS_VANILLA: | ||
| 57 | return unlocks.data["rte_%s" % map_name] == "unlocked" | ||
| 58 | elif ap.fast_travel_access == ap.kFAST_TRAVEL_ACCESS_UNLOCKED: | ||
| 59 | return true | ||
| 60 | elif ap.fast_travel_access == ap.kFAST_TRAVEL_ACCESS_ITEMS: | ||
| 61 | var gamedata = global.get_node("Gamedata") | ||
| 62 | var map_id = gamedata.map_id_by_name[map_name] | ||
| 63 | var rte_ap_id = gamedata.objects.get_maps()[map_id].get_rte_ap_id() | ||
| 64 | |||
| 65 | return ap.client.hasItem(rte_ap_id) | ||
| 66 | |||
| 67 | return false | ||
