-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathContextHelpHandler.cs
More file actions
124 lines (105 loc) · 3.93 KB
/
ContextHelpHandler.cs
File metadata and controls
124 lines (105 loc) · 3.93 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
using HarmonyLib;
using UnityEngine;
namespace MelatoninAccess
{
internal static class ContextHelpHandler
{
public static void TryAnnounceContextHelp()
{
string help = GetContextHelp();
if (string.IsNullOrWhiteSpace(help)) return;
ScreenReader.Say(help, true);
}
private static string GetContextHelp()
{
if (IsMapModeMenuOpen())
{
return Loc.Get("help_mode_menu", GetActionPrompt(), GetCancelPrompt());
}
if (IsOnMap())
{
return Loc.Get("help_map", GetActionPrompt());
}
if (IsResultsScreenOpen())
{
return Loc.Get("help_results", GetActionPrompt(), GetCancelPrompt());
}
if (IsSubmenuOpen())
{
return Loc.Get("help_menu", GetActionPrompt(), GetCancelPrompt());
}
if (LvlEditor.dir != null)
{
return Loc.Get("help_editor", GetActionPrompt(), GetCancelPrompt());
}
if (Dream.dir != null)
{
return Loc.Get("help_gameplay", GetPausePrompt());
}
if (SceneMonitor.mgr != null && SceneMonitor.mgr.GetActiveSceneName() == "TitleScreen")
{
return Loc.Get("help_title_screen", GetActionPrompt(), GetSwapPrompt());
}
return "";
}
private static bool IsMapModeMenuOpen()
{
if (!IsOnMap()) return false;
var modeMenu = Map.env.Neighbourhood.McMap.ModeMenu;
return modeMenu != null && modeMenu.CheckIsTranstioned();
}
private static bool IsOnMap()
{
return Map.env != null &&
Map.env.Neighbourhood != null &&
Map.env.Neighbourhood.McMap != null;
}
private static bool IsResultsScreenOpen()
{
if (Interface.env == null || Interface.env.Results == null) return false;
return Traverse.Create(Interface.env.Results).Field("isEnabled").GetValue<bool>();
}
private static bool IsSubmenuOpen()
{
return Interface.env != null &&
Interface.env.Submenu != null &&
Interface.env.Submenu.CheckIsActivated();
}
private static string GetActionPrompt()
{
int ctrlType = ControlHandler.mgr != null ? ControlHandler.mgr.GetCtrlType() : 0;
if (ctrlType == 1) return "A";
if (ctrlType == 2) return "Cross";
string key = SaveManager.mgr != null ? SaveManager.mgr.GetActionKey() : "SPACE";
if (string.IsNullOrWhiteSpace(key)) return Loc.Get("cue_space");
return key.Trim().ToUpperInvariant() switch
{
"SPACE" => Loc.Get("cue_space"),
"ENTER" => Loc.Get("key_enter"),
"PERIOD" => Loc.Get("key_period"),
"SLASH" => Loc.Get("key_slash"),
_ => key.Trim()
};
}
private static string GetCancelPrompt()
{
int ctrlType = ControlHandler.mgr != null ? ControlHandler.mgr.GetCtrlType() : 0;
if (ctrlType == 1) return "B";
if (ctrlType == 2) return "Circle";
return Loc.Get("key_escape");
}
private static string GetSwapPrompt()
{
int ctrlType = ControlHandler.mgr != null ? ControlHandler.mgr.GetCtrlType() : 0;
if (ctrlType == 1) return "Y";
if (ctrlType == 2) return "Triangle";
return Loc.Get("key_tab");
}
private static string GetPausePrompt()
{
int ctrlType = ControlHandler.mgr != null ? ControlHandler.mgr.GetCtrlType() : 0;
if (ctrlType > 0) return Loc.Get("key_start");
return Loc.Get("key_escape");
}
}
}