-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSystemScreenHandler.cs
More file actions
126 lines (112 loc) · 3.95 KB
/
SystemScreenHandler.cs
File metadata and controls
126 lines (112 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using NobleRobot;
namespace BlippoAccess
{
/// <summary>
/// Announces system screen transitions once the target screen is fully active.
/// </summary>
public sealed class SystemScreenHandler
{
private bool _hasTrackedScreen;
private SystemScreen.Type _lastScreen;
/// <summary>
/// Tracks the active system screen and announces only on real transitions.
/// </summary>
public void Update()
{
if (GameManager.instance == null || Bookshelf.instance == null)
{
return;
}
var currentScreen = GameManager.currentSystemScreen;
if (!IsScreenEnabled(currentScreen))
{
return;
}
if (!_hasTrackedScreen)
{
_hasTrackedScreen = true;
_lastScreen = currentScreen;
AnnounceScreen(currentScreen);
return;
}
if (_lastScreen == currentScreen)
{
return;
}
_lastScreen = currentScreen;
AnnounceScreen(currentScreen);
}
private static bool IsScreenEnabled(SystemScreen.Type screenType)
{
if (!Bookshelf.instance.systemScreens.ContainsKey(screenType))
{
return false;
}
var screen = Bookshelf.instance.systemScreens[screenType];
return screen != null && screen.screenEnabled;
}
private static void AnnounceScreen(SystemScreen.Type screenType)
{
if (ShouldSpeakScreenHeader(screenType))
{
ScreenReader.Say(Loc.Get(GetScreenKey(screenType)));
}
var hintKey = GetHintKey(screenType);
if (!string.IsNullOrEmpty(hintKey))
{
ScreenReader.Say(Loc.Get(hintKey), false);
}
DebugLogger.Log(LogCategory.Handler, $"Screen changed: {screenType}");
}
private static string GetScreenKey(SystemScreen.Type screenType)
{
switch (screenType)
{
case SystemScreen.Type.CONTROL_MENU:
return "screen_control_menu";
case SystemScreen.Type.MESSAGES:
return "screen_messages";
case SystemScreen.Type.TUNER_CALIBRATION:
return "screen_tuner_calibration";
case SystemScreen.Type.PACKETTE_LOAD:
return "screen_packette_load";
case SystemScreen.Type.CREDITS:
return "screen_credits";
case SystemScreen.Type.PROGRAM_GUIDE:
return "screen_program_guide";
case SystemScreen.Type.BROADCAST_DISPLAY:
return "screen_broadcast_display";
case SystemScreen.Type.FEMTOFAX:
return "screen_femtofax";
case SystemScreen.Type.SIGNAL_LOSS:
return "screen_signal_loss";
default:
return "screen_unknown";
}
}
private static string GetHintKey(SystemScreen.Type screenType)
{
switch (screenType)
{
case SystemScreen.Type.PROGRAM_GUIDE:
return "hint_program_guide";
case SystemScreen.Type.TUNER_CALIBRATION:
return "hint_tuner_calibration";
default:
return null;
}
}
private static bool ShouldSpeakScreenHeader(SystemScreen.Type screenType)
{
switch (screenType)
{
case SystemScreen.Type.CONTROL_MENU:
case SystemScreen.Type.MESSAGES:
case SystemScreen.Type.FEMTOFAX:
return false;
default:
return true;
}
}
}
}