immersive-home/content/ui/menu/menu.gd
2023-11-19 23:58:26 +01:00

106 lines
2.5 KiB
GDScript

extends Node3D
@onready var _controller := XRHelpers.get_xr_controller(self)
@onready var nav_view = $AnimationContainer/Navigation/View
@onready var nav_edit: Button3D = $AnimationContainer/Navigation/Edit
@onready var menu_edit: Node3D = $AnimationContainer/Content/EditMenu
@onready var nav_room = $AnimationContainer/Navigation/Room
@onready var menu_room: Node3D = $AnimationContainer/Content/RoomMenu
@onready var nav_automate = $AnimationContainer/Navigation/Automate
@onready var nav_settings = $AnimationContainer/Navigation/Settings
@onready var menu_settings: Node3D = $AnimationContainer/Content/SettingsMenu
@onready var menu_root = $AnimationContainer
@onready var content = $AnimationContainer/Content
@onready var nav = $AnimationContainer/Navigation
@onready var animation_player = $AnimationPlayer
enum Menu {
VIEW,
EDIT,
ROOM,
AUTOMATE,
SETTINGS
}
var selected_menu := Menu.EDIT
var show_menu := true:
get:
return show_menu
set(value):
show_menu = value
if value:
animation_player.play_backwards("hide_menu")
AudioPlayer.play_effect("open_menu")
else:
animation_player.play("hide_menu")
AudioPlayer.play_effect("close_menu")
func _ready():
_controller.button_pressed.connect(func(button):
print(button)
if button == "by_button":
show_menu = !show_menu
)
select_menu(selected_menu)
func _on_click(event):
if event.target == nav_view:
select_menu(Menu.VIEW)
elif event.target == nav_edit:
select_menu(Menu.EDIT)
elif event.target == nav_room:
select_menu(Menu.ROOM)
elif event.target == nav_automate:
select_menu(Menu.AUTOMATE)
elif event.target == nav_settings:
select_menu(Menu.SETTINGS)
func select_menu(menu: Menu):
selected_menu = menu
for child in content.get_children():
content.remove_child(child)
var menu_node = enum_to_menu(menu)
var nav_node = enum_to_nav(menu)
if nav_node != null:
nav_node.disabled = true
if menu_node != null:
menu_node.visible = true
content.add_child(menu_node)
for child in nav.get_children():
if child.active && child != nav_node:
child.active = false
child.disabled = false
func enum_to_nav(menu: Menu):
match menu:
Menu.VIEW:
return nav_view
Menu.EDIT:
return nav_edit
Menu.ROOM:
return nav_room
Menu.AUTOMATE:
return nav_automate
Menu.SETTINGS:
return nav_settings
func enum_to_menu(menu: Menu):
match menu:
Menu.VIEW:
return null
Menu.EDIT:
return menu_edit
Menu.ROOM:
return menu_room
Menu.AUTOMATE:
return null
Menu.SETTINGS:
return menu_settings