Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions SpeechMod/Keybinds/ToggleAutoPlay.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
using HarmonyLib;
using Kingmaker;
using Kingmaker.Localization;
using Kingmaker.UI.MVVM._PCView.Common;
using SpeechMod.Configuration.Settings;
using System;

#if DEBUG
using UnityEngine;
#endif

namespace SpeechMod.Keybinds;

public class ToggleAutoPlay() : ModHotkeySettingEntry(_key, _title, _tooltip, _defaultValue)
{
private const string _key = "autoplay.toggle";
private const string _title = "Toggle autoplay";
private const string _tooltip = "Toggles autoplay on and off.";
private const string _defaultValue = "%T;;All;false";
private const string BIND_NAME = $"{Constants.SETTINGS_PREFIX}.newcontrols.ui.{_key}";

public override SettingStatus TryEnable() => TryEnableAndPatch(typeof(Patches));

[HarmonyPatch]
private static class Patches
{
private static string _ToggleAutoPlayOffText = "SpeechMod: Autoplay toggled OFF!";
private static string _ToggleAutoPlayOnText = "SpeechMod: Autoplay toggled ON!";
private static IDisposable _disposableBinding;

[HarmonyPatch(typeof(CommonPCView), nameof(CommonPCView.BindViewImplementation))]
[HarmonyPostfix]
private static void Add(CommonPCView __instance)
{
#if DEBUG
Debug.Log($"{nameof(CommonPCView)}_{nameof(CommonPCView.BindViewImplementation)}_Postfix : {BIND_NAME}");
#endif
var autoPlayOffText = LocalizationManager.CurrentPack!.GetText("osmodium.speechmod.feature.autoplay.toggle.notification.off", false);
if (!string.IsNullOrWhiteSpace(autoPlayOffText))
_ToggleAutoPlayOffText = autoPlayOffText;

var autoPlayOnText = LocalizationManager.CurrentPack!.GetText("osmodium.speechmod.feature.autoplay.toggle.notification.on", false);
if (!string.IsNullOrWhiteSpace(autoPlayOnText))
_ToggleAutoPlayOnText = autoPlayOnText;

if (Game.Instance.Keyboard.m_Bindings.Exists(binding => binding.Name.Equals(BIND_NAME)))
{
#if DEBUG
Debug.Log($"Binding {BIND_NAME} already exists! Disposing of binding...");
#endif
_disposableBinding.Dispose();
}

_disposableBinding = Game.Instance!.Keyboard!.Bind(BIND_NAME, delegate { ToggleAutoPlay(__instance); });
__instance?.AddDisposable(_disposableBinding);
}

private static void ToggleAutoPlay(CommonPCView instance)
{
Main.Settings.AutoPlay = !Main.Settings.AutoPlay;

if (instance.m_WarningsText != null && Main.Settings!.ShowNotificationOnPlaybackStop)
{
instance.m_WarningsText?.Show(Main.Settings.AutoPlay ? _ToggleAutoPlayOnText : _ToggleAutoPlayOffText);
}
}
}
}
4 changes: 2 additions & 2 deletions SpeechMod/Keybinds/ToggleBarks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ private static void Add(CommonPCView __instance)
Debug.Log($"{nameof(CommonPCView)}_{nameof(CommonPCView.BindViewImplementation)}_Postfix : {BIND_NAME}");
#endif
var barksOffText = LocalizationManager.CurrentPack!.GetText("osmodium.speechmod.feature.barks.toggle.notification.off", false);
if (string.IsNullOrWhiteSpace(barksOffText))
if (!string.IsNullOrWhiteSpace(barksOffText))
_ToggleBarksOffText = barksOffText;

var barksOnText = LocalizationManager.CurrentPack!.GetText("osmodium.speechmod.feature.barks.toggle.notification.on", false);
if (string.IsNullOrWhiteSpace(barksOnText))
if (!string.IsNullOrWhiteSpace(barksOnText))
_ToggleBarksOnText = barksOnText;

if (Game.Instance.Keyboard.m_Bindings.Exists(binding => binding.Name.Equals(BIND_NAME)))
Expand Down
62 changes: 37 additions & 25 deletions SpeechMod/Localization/enGB.json
Original file line number Diff line number Diff line change
@@ -1,28 +1,40 @@
{
"Strings": {
"osmodium.speechmod.group.main": {
"Text": "Speech Mod"
},
"osmodium.speechmod.feature.playback.stop.description": {
"Text": "Stop playback"
},
"osmodium.speechmod.feature.playback.stop.tooltip-description": {
"Text": "Stops playback of SpeechMod TTS when it is playing."
},
"osmodium.speechmod.feature.playback.stop.notification": {
"Text": "SpeechMod: Playback stopped!"
},
"osmodium.speechmod.feature.barks.toggle.description": {
"Text": "Toggle barks"
},
"osmodium.speechmod.feature.barks.toggle.tooltip-description": {
"Text": "Toggles playback of barks ON and OFF.\nBarks are the small text boxes above characters heads when they speak."
},
"osmodium.speechmod.feature.barks.toggle.notification.off": {
"Text": "SpeechMod: Barks toggled OFF!"
},
"osmodium.speechmod.feature.barks.toggle.notification.on": {
"Text": "SpeechMod: Barks toggled ON!"
}
"Strings": {
"osmodium.speechmod.group.main": {
"Text": "Speech Mod"
},
"osmodium.speechmod.feature.playback.stop.description": {
"Text": "Stop playback"
},
"osmodium.speechmod.feature.playback.stop.tooltip-description": {
"Text": "Stops playback of SpeechMod TTS when it is playing."
},
"osmodium.speechmod.feature.playback.stop.notification": {
"Text": "SpeechMod: Playback stopped!"
},
"osmodium.speechmod.feature.barks.toggle.description": {
"Text": "Toggle barks"
},
"osmodium.speechmod.feature.barks.toggle.tooltip-description": {
"Text": "Toggles playback of barks ON and OFF.\nBarks are the small text boxes above characters heads when they speak."
},
"osmodium.speechmod.feature.barks.toggle.notification.off": {
"Text": "SpeechMod: Barks toggled OFF!"
},
"osmodium.speechmod.feature.barks.toggle.notification.on": {
"Text": "SpeechMod: Barks toggled ON!"
},
"osmodium.speechmod.feature.autoplay.toggle.description": {
"Text": "Toggle Auto play dialog"
},
"osmodium.speechmod.feature.autoplay.toggle.tooltip-description": {
"Text": "Toggles Auto play dialog ON and OFF."
},
"osmodium.speechmod.feature.autoplay.toggle.notification.off": {
"Text": "SpeechMod: Auto play dialog toggled OFF!"
},
"osmodium.speechmod.feature.autoplay.toggle.notification.on": {
"Text": "SpeechMod: Auto play dialog toggled ON!"
}
}
}
2 changes: 1 addition & 1 deletion SpeechMod/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ private static void SetUpSettings()
if (ModConfigurationManager.Instance.GroupedSettings.TryGetValue("main", out _))
return;

ModConfigurationManager.Instance.GroupedSettings.Add("main", [new PlaybackStop(), new ToggleBarks()]);
ModConfigurationManager.Instance.GroupedSettings.Add("main", [new PlaybackStop(), new ToggleBarks(), new ToggleAutoPlay()]);
}

private static bool SetAvailableVoices()
Expand Down