def ShowConfiguration(self) -> None: mod_button = OptionBoxButton("Mod", f"Currently: '{self.ModName}'") input_button = OptionBoxButton("Input", f"Currently: '{self.Input}'") custom_button = OptionBoxButton("- Custom Mod Name -") mod_buttons = [ OptionBoxButton(mod.Name) for mod in GetOrderedModList() ] + [custom_button] main_box = OptionBox( Title="Configure SDK Mod Input", Caption="Select which part you want to configure.", Buttons=(mod_button, input_button)) mod_box = OptionBox(Title="Select SDK Mod", Caption="Select which mod to send inputs to.", Buttons=mod_buttons) custom_box = TextInputBox("Custom Mod Name", self.ModName) input_box = TrainingBox("Set Input", "Press any key to set the input.") def OnMainPress(button: OptionBoxButton) -> None: if button == mod_button: mod_box.Show() elif button == input_button: input_box.Show() def OnModPick(button: OptionBoxButton) -> None: if button == custom_button: custom_box.Show() else: self.ModName = button.Name mod_button.Tip = f"Currently: '{self.ModName}'" main_box.Show(mod_button) def OnCustomSubmit(msg: str) -> None: if len(msg) != 0: self.ModName = msg mod_button.Tip = f"Currently: '{self.ModName}'" main_box.Show(mod_button) else: mod_box.Show(custom_button) def OnInput(key: str, event: int) -> None: if event != 1: return self.Input = key input_button.Tip = f"Currently: '{self.Input}''" if input_box.IsShowing(): input_box.Hide() main_box.Show(input_button) main_box.OnPress = OnMainPress # type: ignore main_box.OnCancel = self.OnFinishConfiguration # type: ignore mod_box.OnPress = OnModPick # type:ignore mod_box.OnCancel = lambda: mod_button.Show() # type: ignore custom_box.OnSubmit = OnCustomSubmit # type: ignore input_box.OnInput = OnInput # type: ignore main_box.Show()
def GenerateToken(self) -> None: continue_button = OptionBoxButton("Continue") yes_button = OptionBoxButton("Yes") no_button = OptionBoxButton("No") intro_box = OptionBox( Title="Generate OAuth Token", Caption=( "If you're currently streaming, switch to an intermission screen.\n\n" "When you contine, a file and a website will open." " Login with Twitch, then copy the displayed token into the file." " You will be asked to confirm the token in game." ), Buttons=(continue_button,) ) continue_box = OptionBox( Title="Generate OAuth Token", Caption="Continue once you've pasted the token into the file.", Buttons=(continue_button,) ) confirm_box = OptionBox( Title="Generate OAuth Token", Caption="Is this the correct token:\n\n''", Buttons=(yes_button, no_button) ) def ReloadToken() -> None: self.Token = open(self.TOKEN_FILE).read().strip() def OnStart(button: OptionBoxButton) -> None: startfile(self.TOKEN_FILE) webbrowser.open(self.TOKEN_URL) continue_box.Show() def OnContinue(button: OptionBoxButton) -> None: ReloadToken() confirm_box.Caption = f"Is this the correct token:\n\n'{self.Token}'" confirm_box.Update() confirm_box.Show() def OnConfirm(button: OptionBoxButton) -> None: if button == no_button: continue_box.Show() intro_box.OnCancel = ReloadToken # type: ignore continue_box.OnCancel = ReloadToken # type: ignore confirm_box.OnCancel = ReloadToken # type: ignore intro_box.OnPress = OnStart # type: ignore continue_box.OnPress = OnContinue # type: ignore confirm_box.OnPress = OnConfirm # type: ignore intro_box.Show()
def ShowConfiguration(self) -> None: custom_button = OptionBoxButton("- Custom Mod Name -") mod_buttons = [OptionBoxButton(mod.Name) for mod in GetOrderedModList()] + [custom_button] mod_box = OptionBox( Title="Select SDK Mod", Caption="Select the mod to enable.", Buttons=mod_buttons ) custom_box = TextInputBox("Custom Mod Name", self.ModName) def OnModPick(button: OptionBoxButton) -> None: if button == custom_button: custom_box.Show() else: self.ModName = button.Name self.OnFinishConfiguration() def OnCustomSubmit(msg: str) -> None: if len(msg) != 0: self.ModName = msg self.OnFinishConfiguration() else: mod_box.Show(custom_button) mod_box.OnPress = OnModPick # type:ignore mod_box.OnCancel = self.OnFinishConfiguration # type: ignore custom_box.OnSubmit = OnCustomSubmit # type: ignore mod_box.Show()
def ShowConfiguration(self) -> None: plus_one = OptionBoxButton("+1") plus_tenth = OptionBoxButton("+0.1") minus_tenth = OptionBoxButton("-0.1") minus_one = OptionBoxButton("-1") direct_edit = OptionBoxButton("Direct Edit") main_box = OptionBox( Title="Configure Delay", Caption=f"Current Delay: {self.Delay:.02f}s", Tooltip=OptionBox.CreateTooltipString(EscMessage="Back"), Buttons=(plus_one, plus_tenth, minus_tenth, minus_one, direct_edit)) direct_box = TextInputBox("Configure Delay", f"{self.Delay:.02f}") def OnMainBoxPress(button: OptionBoxButton) -> None: if button == direct_edit: direct_box.Show() return if button == plus_one: self.Delay += 1 elif button == plus_tenth: self.Delay += 0.1 elif button == minus_tenth: self.Delay = max(self.Delay - 0.1, 0) elif button == minus_one: self.Delay = max(self.Delay - 1, 0) direct_box.DefaultMessage = f"{self.Delay:.02f}" main_box.Caption = f"Current Delay: {self.Delay:.02f}s" main_box.Update() main_box.Show(button) main_box.OnPress = OnMainBoxPress # type: ignore main_box.OnCancel = self.OnFinishConfiguration # type: ignore def WriteFloatFilter(char: str, message: str, pos: int) -> bool: if char in "0123456789": return True if char == ".": return "." not in message return False def OnDirectBoxSubmit(msg: str) -> None: if msg != "": self.Delay = round(float(msg), 2) main_box.Caption = f"Current Delay: {self.Delay:.02f}s" main_box.Update() main_box.Show() direct_box.IsAllowedToWrite = WriteFloatFilter # type: ignore direct_box.OnSubmit = OnDirectBoxSubmit # type: ignore main_box.Show()
def Configure(self) -> None: toggleEnabledButton = OptionBoxButton("Toggle Enabled") editTriggerButton = OptionBoxButton( "Edit Trigger", "Edits what redemption title triggers this effect. Not case sensitive, but must match exactly otherwise." ) extraConfigurationButton = OptionBoxButton( "Extra Options", "Adjust extra, effect specific options.") def GetCaptionStr(trig: CrowdControl._Trigger) -> str: caption = "" if trig.IsEnabled: caption = f"Enabled: '{trig.Trigger}'" else: caption = "Disabled" caption += "\n" + trig.Effect.Description return caption class _EffectButton(OptionBoxButton): TrigObj: CrowdControl._Trigger def __init__(self, trig: CrowdControl._Trigger) -> None: self.TrigObj = trig @property def Name(self) -> str: # type: ignore return f"{self.TrigObj.Effect.Name} - {GetCaptionStr(self.TrigObj)}" effectButtons = [_EffectButton(trig) for trig in self.Triggers] currentButton = effectButtons[0] selectBox = OptionBox(Title="Configure Effects", Caption="Select the effect to configure.", Buttons=effectButtons, Tooltip=OptionBox.CreateTooltipString() + " " + "[R] Reset All") editBox = OptionBox(Title="Configure <effect>", Caption="Enabled\n<description>", Buttons=(toggleEnabledButton, editTriggerButton, extraConfigurationButton)) renameBox = TextInputBox(Title="Configure <effect>") def UpdateEditBox() -> None: editBox.Title = f"Configure {currentButton.TrigObj.Effect.Name}" if currentButton.TrigObj.IsEnabled: editBox.Caption = f"Enabled: '{currentButton.TrigObj.Trigger}'" else: editBox.Caption = "Disabled" editBox.Caption += "\n" + currentButton.TrigObj.Effect.Description if currentButton.TrigObj.Effect.HasConfigMenu: editBox.Buttons = [ toggleEnabledButton, editTriggerButton, extraConfigurationButton ] else: editBox.Buttons = [toggleEnabledButton, editTriggerButton] editBox.Update() def OnSelect(button: _EffectButton) -> None: nonlocal currentButton currentButton = button UpdateEditBox() editBox.Show() def OnEdit(button: OptionBoxButton) -> None: if button == toggleEnabledButton: currentButton.TrigObj.IsEnabled = not currentButton.TrigObj.IsEnabled for option in currentButton.TrigObj.Effect.Options: option.IsHidden = not currentButton.TrigObj.IsEnabled UpdateEditBox() editBox.Show() elif button == editTriggerButton: renameBox.Title = editBox.Title renameBox.DefaultMessage = currentButton.TrigObj.Trigger renameBox.Show() elif button == extraConfigurationButton: currentButton.TrigObj.Effect.FinishConfiguration = editBox.Show # type: ignore currentButton.TrigObj.Effect.ShowConfiguration() def OnRename(msg: str) -> None: if len(msg) > 0: currentButton.TrigObj.Trigger = msg UpdateEditBox() editBox.Show() oldSelectInput = selectBox.OnInput def OnSelectInput(key: str, event: int) -> None: if key == "R" and event == 1: for trig in self.Triggers: trig.IsEnabled = True trig.Trigger = trig.Effect.Name for option in trig.Effect.Options: option.IsHidden = False UpdateEditBox() selectBox.Hide() selectBox.Show() else: oldSelectInput(key, event) selectBox.OnPress = OnSelect # type: ignore selectBox.OnCancel = self.SaveTriggers # type: ignore selectBox.OnInput = OnSelectInput # type:ignore editBox.OnPress = OnEdit # type: ignore editBox.OnCancel = lambda: selectBox.ShowButton(currentButton ) # type: ignore renameBox.OnSubmit = OnRename # type: ignore selectBox.Show()
def __init__(self, Name: str, Settings: Dict[str, str], CheatList: List[ABCCheat]) -> None: self.Name = Name self.IsBeingConfigured = False self.CheatList = CheatList self._NewSettings = Settings self._OldSettings = dict(Settings) self._SelectedCheat = None self._SaveBox = OptionBox( Title=f"Save '{self.Name}'", Caption="Do you want to save your changes?", Tooltip=OptionBox.CreateTooltipString(EscMessage="Back"), Buttons=( self._SaveButton, self._DiscardButton, ), ) self._SaveBox.OnPress = self._FinishConfiguring # type: ignore self._SaveBox.OnCancel = lambda: self._ConfigureBox.Show( ) # type: ignore self._CheatConfigureBoxes = {} cheat_buttons: List[OptionBoxButton] = [] for cheat in self.CheatList: tip: str box: OptionBox if not isinstance(cheat, ABCCycleableCheat): tip = "Currently: Ignore" if cheat.Name in self._NewSettings: tip = "Currently: Run" box = OptionBox( Title=f"Configure '{cheat.Name}'", Caption= ("Select if this cheat should be run or ignored when you press this preset's" " keybind."), Tooltip=OptionBox.CreateTooltipString(EscMessage="Back"), Buttons=( self._RunButton, self._DontRunButton, ), ) else: tip = "Currently: Ignore" if cheat.Name in self._NewSettings: tip = f"Currently: {self._NewSettings[cheat.Name]}" cheat_options: List[OptionBoxButton] = [] for option in cheat.AllValues: cheat_options.append(OptionBoxButton(option)) cheat_options.append(self._IgnoreButton) box = OptionBox( Title=f"Configure '{cheat.Name}'", Caption= ("Select the value that this cheat should be set to when you press this" " preset's keybind."), Tooltip=OptionBox.CreateTooltipString(EscMessage="Back"), Buttons=cheat_options, ) box.OnPress = self._ChangeCheatValue # type: ignore box.OnCancel = lambda: self._ConfigureBox.Show() # type: ignore button = OptionBoxButton(cheat.Name, tip) self._CheatConfigureBoxes[cheat.Name] = box cheat_buttons.append(button) self._ConfigureBox = OptionBox( Title=f"Configure '{self.Name}'", Caption="Choose a specific cheat to configure.", Tooltip=OptionBox.CreateTooltipString(EscMessage="Back"), Buttons=cheat_buttons, ) self._ConfigureBox.OnPress = self._SelectSpecificCheat # type: ignore self._ConfigureBox.OnCancel = lambda: self._SaveBox.Show( ) # type: ignore