diff --git a/stardew-access/ScreenReader/ScreenReaderMac.cs b/stardew-access/ScreenReader/ScreenReaderMac.cs index 9fb519e..7709b63 100644 --- a/stardew-access/ScreenReader/ScreenReaderMac.cs +++ b/stardew-access/ScreenReader/ScreenReaderMac.cs @@ -20,12 +20,18 @@ namespace stardew_access.ScreenReader public void InitializeScreenReader() { MainClass.GetMonitor().Log("Screen reader initialized"); + _speakProcess = new Process(); + _speakProcess.StartInfo.FileName = "mac"; + _speakProcess.StartInfo.Verb = "mac"; + _speakProcess.StartInfo.RedirectStandardInput = true; + _speakProcess.Start(); Speak("Mac screen reader ready", true); } public void CloseScreenReader() { MainClass.GetMonitor().Log("Screen reader closed"); + _speakProcess.Kill(); } public void Say(string text, bool interrupt) @@ -39,7 +45,8 @@ namespace stardew_access.ScreenReader { if (text == null) return; MainClass.GetMonitor().Log($"{text}"); - if (text != prevText) { + if (text != prevText) + { Speak(text, interrupt); prevText = text; } @@ -49,7 +56,8 @@ namespace stardew_access.ScreenReader { if (text == null) return; MainClass.GetMonitor().Log($"{text}"); - if (text != prevMenuText) { + if (text != prevMenuText) + { Speak(text, interrupt); prevMenuText = text; } @@ -59,7 +67,8 @@ namespace stardew_access.ScreenReader { if (text == null) return; MainClass.GetMonitor().Log($"{text}"); - if (text != prevChatText) { + if (text != prevChatText) + { Speak(text, interrupt); prevChatText = text; } @@ -69,28 +78,21 @@ namespace stardew_access.ScreenReader { if (text == null) return; MainClass.GetMonitor().Log($"{text}"); - if (text != prevTextTile) { + if (text != prevTextTile) + { Speak(text, interrupt); prevTextTile = text; } } - private void Speak(string text, bool interupt) { - if (interupt) { - if (_speakProcess != null) { - _speakProcess.Kill(); - _speakProcess = null; - } - } - if (_speakProcess == null) { - _speakProcess = new Process(); - _speakProcess.StartInfo.FileName = "say"; - _speakProcess.StartInfo.Verb = "say"; - _speakProcess.StartInfo.RedirectStandardInput = true; - _speakProcess.StartInfo.Arguments = text; - _speakProcess.Start(); + private void Speak(string text, bool interupt) + { + if (interupt) + { + _speakProcess.StandardInput.WriteLine("x"); } + _speakProcess.StandardInput.WriteLine($"s{text}"); } } } \ No newline at end of file diff --git a/stardew-access/ScreenReader/ScreenReaderMac_old.cs b/stardew-access/ScreenReader/ScreenReaderMac_old.cs new file mode 100644 index 0000000..bc9ec0d --- /dev/null +++ b/stardew-access/ScreenReader/ScreenReaderMac_old.cs @@ -0,0 +1,96 @@ +using System; +using System.Diagnostics; +using System.IO; + +namespace stardew_access.ScreenReader +{ + public class ScreenReaderMacOld : IScreenReader + { + private Process? _speakProcess; + + + public string PrevTextTile + { + get; + set; + } + + public string prevText = "", prevTextTile = " ", prevChatText = "", prevMenuText = ""; + + public void InitializeScreenReader() + { + MainClass.GetMonitor().Log("Screen reader initialized"); + Speak("Mac screen reader ready", true); + } + + public void CloseScreenReader() + { + MainClass.GetMonitor().Log("Screen reader closed"); + } + + public void Say(string text, bool interrupt) + { + if (text == null) return; + MainClass.GetMonitor().Log($"{text}"); + Speak(text, interrupt); + } + + public void SayWithChecker(string text, bool interrupt) + { + if (text == null) return; + MainClass.GetMonitor().Log($"{text}"); + if (text != prevText) { + Speak(text, interrupt); + prevText = text; + } + } + + public void SayWithMenuChecker(string text, bool interrupt) + { + if (text == null) return; + MainClass.GetMonitor().Log($"{text}"); + if (text != prevMenuText) { + Speak(text, interrupt); + prevMenuText = text; + } + } + + public void SayWithChatChecker(string text, bool interrupt) + { + if (text == null) return; + MainClass.GetMonitor().Log($"{text}"); + if (text != prevChatText) { + Speak(text, interrupt); + prevChatText = text; + } + } + + public void SayWithTileQuery(string text, int x, int y, bool interrupt) + { + if (text == null) return; + MainClass.GetMonitor().Log($"{text}"); + if (text != prevTextTile) { + Speak(text, interrupt); + prevTextTile = text; + } + + } + + private void Speak(string text, bool interupt) { + if (interupt) { + if (_speakProcess != null) { + _speakProcess.Kill(); + _speakProcess = null; + } + } + if (_speakProcess == null) { + _speakProcess = new Process(); + _speakProcess.StartInfo.FileName = "say"; + _speakProcess.StartInfo.Verb = "say"; + _speakProcess.StartInfo.RedirectStandardInput = true; + _speakProcess.StartInfo.Arguments = text; + _speakProcess.Start(); + } + } + } +} \ No newline at end of file