stardew-access/stardew-access/ScreenReader/ScreenReaderMac.cs

96 lines
2.7 KiB
C#
Raw Normal View History

2022-03-05 15:11:48 +00:00
using System;
using System.Diagnostics;
using System.IO;
namespace stardew_access.ScreenReader
{
public class ScreenReaderMac : 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();
}
}
}
}