Skip to content

Commit

Permalink
WIP new features
Browse files Browse the repository at this point in the history
  • Loading branch information
lcb01a committed Sep 30, 2024
1 parent 9f823d3 commit f654109
Show file tree
Hide file tree
Showing 3 changed files with 133 additions and 67 deletions.
71 changes: 34 additions & 37 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,79 +31,76 @@ def __init__(self):
],
"phonemenu": {
"init_screen": "main",
"transition_popup": 3,
"transition_popup": 1,
"dialogs": {
"call_incoming":{
"dialog": 1,
"popup": 4,
"window": 2,
"popup": 0,
"choices": {
"ok_button": ["call_accept", None],
"cancel_button": ["call_accept", None],
"yes_button": ["call_hangup", None],
"yes_button": ["call_accept", None],
"no_button": ["call_hangup", None]
}
},
"call_outgoing":{
"dialog": 2,
"popup": 1,
"window": 2,
"popup": 0,
"choices": {
"yes_button": ["call_hangup", None],
"no_button": ["call_hangup", None]
}
},
"call_end":{
"call_confirm":{
"dialog": 3,
"window": 2,
"popup": 0,
"choices": {
"yes_button": ["phonebook_call_active_entry", None],
"no_button": ["exit_dialogs", None]
}
},
"call_end":{
"dialog": 5,
"window": 2,
"popup": 0,
"choices": {}
},
"call_start":{
"dialog": 4,
"popup": 1,
"window": 2,
"popup": 0,
"choices": {
"yes_button": ["call_hangup", None],
"no_button": ["call_hangup", None]
}
}
},
"screens": {
"main": {
"screenid": 1,
"selectors": {
"selector1": False,
"selector2": False,
"selector3": False,
"selector4": False
},
"window": 0,
"popup": 0,
"selectors": {},
"choices": {
"yes_button": ["screen", "credits"],
"no_button": ["screen", "secretmenu"],
"ok_button": ["screen", "phonebook"],
"cancel_button": ["screen", "conference"]
"yes_button": ["screen", "phonebook"]
}
},
"phonebook": {
"screenid": 2,
"selectors": {
"selector1": False,
"selector2": False,
"selector3": False,
"selector4": False
},
"window": 0,
"popup": 0,
"selectors": {},
"choices": {
"yes_button": ["call_phonebook", 0],
"no_button": ["call_phonebook", 1],
"ok_button": ["call_phonebook", 2],
"cancel_button": ["screen", "main"]
"yes_button": ["phonebook_call_confirm_dialog", None],
"no_button": ["screen", "main"],
"ok_button": ["phonebook_next", None],
"cancel_button": ["phonebook_prev", None]
}
},
"credits": {
"screenid": 4,
"selectors": {
"selector1": False,
"selector2": False,
"selector3": False,
"selector4": False
},
"screenid": 1,
"window": 1,
"popup": 0,
"selectors": {},
"choices": {
"cancel_button": ["screen", "main"]
}
Expand Down
108 changes: 81 additions & 27 deletions menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,21 @@ def __init__(self, config: Config, gui: Gui, osc: Osc, microsip: MicroSIP, osc_
self.active_screen: str = ""
self.active_dialog: str = ""
self.active_mode: int = 0
self.active_phonebook_entry: int = 0
self.call_start_time: float = float()
self.osc_integer_parameters: dict[str, str] = {
"screen": params.show_screen,
"dialog": params.show_dialog,
"popup": params.show_popup
"screen": params.active_screen,
"window": params.active_window,
"dialog": params.active_dialog,
"popup": params.active_popup,
"numberRow1Slot1": params.show_numberRow1Slot1,
"numberRow1Slot2": params.show_numberRow1Slot2,
"numberRow1Slot3": params.show_numberRow1Slot3,
"numberRow1Slot4": params.show_numberRow1Slot4,
"numberRow2Slot1": params.show_numberRow2Slot1,
"numberRow2Slot2": params.show_numberRow2Slot2,
"numberRow2Slot3": params.show_numberRow2Slot3,
"numberRow2Slot4": params.show_numberRow2Slot4
}
self.osc_bool_parameters: dict[str, str] = {
"selector1": params.show_selection1,
Expand Down Expand Up @@ -51,12 +61,13 @@ def _initmenu(self):
screen = self.config.get_by_key("phonemenu")["init_screen"]
self._switch_screen(screen)
self._reset_dialogs()
self.gui.print_terminal("log_verbose: Ingame menu initialized") if self.config.get_by_key("log_verbose") else None
self.gui.print_terminal("Menu: Avatar screen menu initialized")

def _reset_dialogs(self):
self.active_mode = 0
self.osc.client.send_message(self.osc_integer_parameters.get("dialog"), 0)
self.osc.client.send_message(self.osc_integer_parameters.get("popup"), 0)
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["screens"][self.active_screen]["window"])
for selector in self.config.get_by_key("phonemenu")["screens"][self.active_screen]["selectors"]:
self.osc.client.send_message(
self.osc_bool_parameters.get(selector),
Expand All @@ -72,6 +83,7 @@ def _switch_screen(self, screen):
self.active_screen = screen
self.active_mode = 0
self.osc.client.send_message(self.osc_integer_parameters.get("screen"), self.config.get_by_key("phonemenu")["screens"][screen]["screenid"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["screens"][screen]["window"])
for selector in self.config.get_by_key("phonemenu")["screens"][screen]["selectors"]:
self.osc.client.send_message(
self.osc_bool_parameters.get(selector),
Expand All @@ -84,6 +96,7 @@ def _show_dialog(self, dialog):
self.active_mode = 1
self.osc.client.send_message(self.osc_integer_parameters.get("dialog"), self.config.get_by_key("phonemenu")["dialogs"][dialog]["dialog"])
self.osc.client.send_message(self.osc_integer_parameters.get("popup"), self.config.get_by_key("phonemenu")["dialogs"][dialog]["popup"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["dialogs"][dialog]["window"])
for selector in self.config.get_by_key("phonemenu")["screens"][self.active_screen]["selectors"]:
self.osc.client.send_message(
self.osc_bool_parameters.get(selector),
Expand All @@ -93,6 +106,7 @@ def _show_dialog(self, dialog):
def _redraw(self):
self.gui.print_terminal("log_verbose: Redrawing screen") if self.config.get_by_key("log_verbose") else None
self.osc.client.send_message(self.osc_integer_parameters.get("screen"), self.config.get_by_key("phonemenu")["screens"][self.active_screen]["screenid"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["screens"][self.active_screen]["window"]) if self.active_mode == 0 else None
for selector in self.config.get_by_key("phonemenu")["screens"][self.active_screen]["selectors"]:
self.osc.client.send_message(
self.osc_bool_parameters.get(selector),
Expand All @@ -101,9 +115,11 @@ def _redraw(self):
if self.active_mode == 1:
self.osc.client.send_message(self.osc_integer_parameters.get("dialog"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["dialog"])
self.osc.client.send_message(self.osc_integer_parameters.get("popup"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["popup"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["window"])
if self.active_mode == 2:
self.osc.client.send_message(self.osc_integer_parameters.get("dialog"), 0)
self.osc.client.send_message(self.osc_integer_parameters.get("dialog"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["dialog"])
self.osc.client.send_message(self.osc_integer_parameters.get("popup"), self.config.get_by_key("phonemenu")["transition_popup"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["window"])

def _handle_choices(self, choice):
match choice[0]:
Expand All @@ -115,32 +131,24 @@ def _handle_choices(self, choice):
self.microsip.run_phone_command("hangup")
case "call_phonebook":
self.microsip.run_phone_command("phonebook", choice[1])
case "phonebook_next":
self._phonebook_switch_entry("next")
case "phonebook_prev":
self._phonebook_switch_entry("prev")
case "phonebook_call_confirm_dialog":
self._phonebook_call_confirm_dialog()
case "phonebook_call_active_entry":
self.microsip.run_phone_command("phonebook", self.active_phonebook_entry)
case "exit_dialogs":
self._reset_dialogs()
case _:
pass

def _input_worker(self):
while True:
try:
#Handle VRC queue
for address in self.osc_vrc_queue:
if address == self.osc.avatar_change_input:
self.handle_avatar_change()
else:
self.handle_button_input(self.vrc_button_mapping.get(address))
self.osc_vrc_queue.discard(address)
#Handle Microsip queue
for address, caller in self.osc_microsip_queue:
self.handle_callback_input(self.microsip_dialog_mapping.get(address), caller)
self.osc_microsip_queue.discard((address, caller))
except RuntimeError:
pass
time.sleep(.025)

def handle_avatar_change(self):
self.gui.print_terminal("Avatar change detected")
def _handle_avatar_change(self):
self.gui.print_terminal("Menu: Avatar change detected, redrawing screen")
self._redraw()

def handle_button_input(self, button):
def _handle_button_input(self, button):
self.gui.print_terminal("log_verbose: Handle button input: {} active_mode: {}".format(button, self.active_mode)) if self.config.get_by_key("log_verbose") else None
if self.active_mode == 0:
if button in self.config.get_by_key("phonemenu")["screens"][self.active_screen]["choices"]:
Expand All @@ -158,7 +166,7 @@ def handle_button_input(self, button):
#Loading transition mode, we don't accept input here
return

def handle_callback_input(self, command, caller):
def _handle_callback_input(self, command, caller):
self.gui.print_terminal("log_verbose: Handle callback command: {}, caller: {} active_mode: {}".format(command, caller, self.active_mode)) if self.config.get_by_key("log_verbose") else None
match command:
case "call_end" | "call_busy":
Expand All @@ -181,6 +189,52 @@ def handle_callback_input(self, command, caller):
self.gui.print_terminal("log_verbose: Unhandled callback command: {}".format(command)) if self.config.get_by_key("log_verbose") else None
return

def _phonebook_switch_entry(self, direction):
active_entry = self.active_phonebook_entry
len_entries = len(self.config.get_by_key("phonebook"))
match direction:
case "next":
if len_entries > 1:
if active_entry == len_entries - 1:
self.active_phonebook_entry = 0
else:
self.active_phonebook_entry += 1
else:
pass
case "prev":
if len_entries > 1:
if active_entry == 0:
self.active_phonebook_entry = len_entries - 1
else:
self.active_phonebook_entry -= 1
else:
pass

def _phonebook_call_confirm_dialog(self):
self._show_dialog("call_confirm")
#phonebook_call_confirm_menu
pass

def _input_worker(self):
while True:
try:
#Handle VRC queue
for address in self.osc_vrc_queue:
if address == self.osc.avatar_change_input:
self._handle_avatar_change()
else:
self._handle_button_input(self.vrc_button_mapping.get(address))
self.osc_vrc_queue.discard(address)
#Handle Microsip queue
for address, caller in self.osc_microsip_queue:
self._handle_callback_input(self.microsip_dialog_mapping.get(address), caller)
self.osc_microsip_queue.discard((address, caller))
#Handle call timer
#self._handle_calltimer()
except RuntimeError:
pass
time.sleep(.025)

def run(self):
self._initmenu()
threading.Thread(target=self._input_worker, daemon=True).start()
21 changes: 18 additions & 3 deletions params.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,25 @@

### Outputs ###
#Shape Key Menu Control
show_screen = "/avatar/parameters/ActiveScreen"
show_dialog = "/avatar/parameters/ActiveDialog"
show_popup = "/avatar/parameters/ActivePopup"
active_screen = "/avatar/parameters/ActiveScreen"
active_window = "/avatar/parameters/ActiveWindow"
active_dialog = "/avatar/parameters/ActiveDialog"
active_popup = "/avatar/parameters/ActivePopup"

#Selectors (Not used in public avatar)
show_selection1 = "/avatar/parameters/Selection1"
show_selection2 = "/avatar/parameters/Selection2"
show_selection3 = "/avatar/parameters/Selection3"
show_selection4 = "/avatar/parameters/Selection4"

#Number Row 1
show_numberRow1Slot1 = "/avatar/parameters/NumberRow1Slot1"
show_numberRow1Slot2 = "/avatar/parameters/NumberRow1Slot2"
show_numberRow1Slot3 = "/avatar/parameters/NumberRow1Slot3"
show_numberRow1Slot4 = "/avatar/parameters/NumberRow1Slot4"

#Number Row2
show_numberRow2Slot1 = "/avatar/parameters/NumberRow2Slot1"
show_numberRow2Slot2 = "/avatar/parameters/NumberRow2Slot2"
show_numberRow2Slot3 = "/avatar/parameters/NumberRow2Slot3"
show_numberRow2Slot4 = "/avatar/parameters/NumberRow2Slot4"

0 comments on commit f654109

Please sign in to comment.