-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHelpScreen.cs
98 lines (89 loc) · 3.51 KB
/
HelpScreen.cs
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
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using XmlUtilities;
namespace Game
{
public class HelpScreen : Screen
{
readonly ButtonWidget m_bestiaryButton;
Screen m_previousScreen;
readonly ButtonWidget m_recipaediaButton;
readonly Dictionary<string, HelpTopic> m_topics = new Dictionary<string, HelpTopic>();
readonly ListPanelWidget m_topicsList;
public HelpScreen()
{
WidgetsManager.LoadWidgetContents(this, this, ContentManager.Get<XElement>("Screens/HelpScreen"));
m_topicsList = Children.Find<ListPanelWidget>("TopicsList", true);
m_recipaediaButton = Children.Find<ButtonWidget>("RecipaediaButton", true);
m_bestiaryButton = Children.Find<ButtonWidget>("BestiaryButton", true);
m_topicsList.ItemWidgetFactory = delegate(object item)
{
var helpTopic3 = (HelpTopic)item;
XElement node2 = ContentManager.Get<XElement>("Widgets/HelpTopicItem");
var obj = (ContainerWidget)WidgetsManager.LoadWidget(this, node2, null);
obj.Children.Find<LabelWidget>("HelpTopicItem.Title", true).Text = helpTopic3.Title;
return obj;
};
m_topicsList.ItemClicked += delegate(object item)
{
if (item is HelpTopic helpTopic2)
ShowTopic(helpTopic2);
};
for (var i = ContentManager.CombineXml(ContentManager.Get<XElement>("Help"), ModsManager.GetEntries(".hlp"), "Title", "Name", "Topic").Elements().GetEnumerator(); i.MoveNext();)
{
var element = i.Current;
var strArray = XmlUtils.GetAttributeValue(element, "DisabledPlatforms", string.Empty).Split(',');
if (strArray.FirstOrDefault(Match) == null)
{
var attributeValue1 = XmlUtils.GetAttributeValue(element, "Name", string.Empty);
var attributeValue2 = XmlUtils.GetAttributeValue<string>(element, "Title");
var str1 = string.Empty;
strArray = element.Value.Split('\n');
for (int i1 = 0; i1 < strArray.Length; i1++)
str1 = str1 + strArray[i1].Trim() + " ";
var helpTopic = new HelpTopic { Name = attributeValue1, Title = attributeValue2, Text = str1.Replace("\r", "").Replace("’", "'").Replace("\\n", "\n") };
if (!string.IsNullOrEmpty(helpTopic.Name))
m_topics.Add(helpTopic.Name, helpTopic);
m_topicsList.AddItem(helpTopic);
}
}
}
bool Match(string s) => s.Trim().ToLower() == VersionsManager.Platform.ToString().ToLower();
public override void Enter(object[] parameters)
{
if (ScreensManager.PreviousScreen == ScreensManager.FindScreen<Screen>("HelpTopic") ||
ScreensManager.PreviousScreen == ScreensManager.FindScreen<Screen>("Recipaedia") ||
ScreensManager.PreviousScreen == ScreensManager.FindScreen<Screen>("Bestiary"))
return;
m_previousScreen = ScreensManager.PreviousScreen;
}
public override void Leave()
{
m_topicsList.SelectedItem = null;
}
public override void Update()
{
if (m_recipaediaButton.IsClicked)
ScreensManager.SwitchScreen("Recipaedia");
if (m_bestiaryButton.IsClicked)
ScreensManager.SwitchScreen("Bestiary");
if (!Input.Back && !Input.Cancel && !Children.Find<ButtonWidget>("TopBar.Back", true).IsClicked)
return;
ScreensManager.SwitchScreen(m_previousScreen);
}
public HelpTopic GetTopic(string name)
{
return m_topics[name];
}
private void ShowTopic(HelpTopic helpTopic)
{
if (helpTopic.Name == "Keyboard")
DialogsManager.ShowDialog(null, new KeyboardHelpDialog());
else if (helpTopic.Name == "Gamepad")
DialogsManager.ShowDialog(null, new GamepadHelpDialog());
else
ScreensManager.SwitchScreen("HelpTopic", (object)helpTopic);
}
}
}