Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
HelpScreen.cs
浏览该文件的文档.
1using System.Text.Json;
2using System.Text.Json.Nodes;
3using System.Xml.Linq;
4
5namespace Game {
6 public class HelpScreen : Screen {
8
10
12
14
15 [Obsolete]
17
18 public Dictionary<string, HelpTopic> m_topics = [];
19
23 public virtual void OnTopicsListItemClicked(object item) {
24 if (item is HelpTopic helpTopic2) {
25 ShowTopic(helpTopic2);
26 }
27 }
28
29 public HelpScreen() {
30 XElement node = ContentManager.Get<XElement>("Screens/HelpScreen");
31 LoadContents(this, node);
32 m_topicsList = Children.Find<ListPanelWidget>("TopicsList");
33 m_reportButton = Children.Find<ButtonWidget>("ReportButton");
34 m_recipaediaButton = Children.Find<ButtonWidget>("RecipaediaButton");
35 m_bestiaryButton = Children.Find<ButtonWidget>("BestiaryButton");
36 m_topicsList.ItemWidgetFactory = delegate(object item) {
37 HelpTopic helpTopic3 = (HelpTopic)item;
38 XElement node2 = ContentManager.Get<XElement>("Widgets/HelpTopicItem");
39 ContainerWidget obj = (ContainerWidget)LoadWidget(this, node2, null);
40 obj.Children.Find<LabelWidget>("HelpTopicItem.Title").Text = helpTopic3.Title;
41 return obj;
42 };
43 m_topicsList.ItemClicked += OnTopicsListItemClicked;
44 JsonObject helpObject = LanguageControl.jsonNode["Help"]?.AsObject();
45 if (helpObject != null) {
46 foreach (KeyValuePair<string, JsonNode> item in helpObject) {
47 JsonNode item3 = item.Value;
48 JsonNode displa = item3["DisabledPlatforms"];
49 if (displa != null
50 && displa.GetValueKind() == JsonValueKind.String) {
51 if (displa.GetValue<string>()
52 .Split([","], StringSplitOptions.None)
53 .FirstOrDefault(s => s.Trim().Equals(VersionsManager.PlatformString, StringComparison.CurrentCultureIgnoreCase))
54 == null) {
55 continue;
56 }
57 }
58 JsonNode Title = item3["Title"];
59 JsonNode Name1 = item3["Name"];
60 JsonNode value = item3["value"];
61 string attributeValue = Name1 != null && Name1.GetValueKind() == JsonValueKind.String ? Name1.GetValue<string>() : string.Empty;
62 string attributeValue2 = Title != null && Title.GetValueKind() == JsonValueKind.String ? Title.GetValue<string>() : string.Empty;
63 string text = string.Empty;
64 if (value != null) {
65 string[] array = value.GetValue<string>().Split(["\n"], StringSplitOptions.None);
66 foreach (string text2 in array) {
67 text = $"{text}{text2.Trim()} ";
68 }
69 text = text.Replace("\r", "");
70 text = text.Replace("’", "'");
71 text = text.Replace("\\n", "\n");
72 }
73 bool floatParseSucceed = float.TryParse(item.Key, out float index);
74 HelpTopic helpTopic = new() {
75 Index = floatParseSucceed ? index : 0f, Name = attributeValue, Title = attributeValue2, Text = text
76 };
77 if (!string.IsNullOrEmpty(helpTopic.Name)) {
78 if (m_topics.TryAdd(helpTopic.Name, helpTopic)) {
79 m_topicsList.m_items.Add(helpTopic);
80 }
81 }
82 }
83 }
84 m_topicsList.m_items.Sort((x, y) => x is not HelpTopic x_topic || y is not HelpTopic y_topic ? 0 : x_topic.Index.CompareTo(y_topic.Index)
85 );
86 }
87
88 public override void Enter(object[] parameters) {
89 /*if (ScreensManager.PreviousScreen != ScreensManager.FindScreen<Screen>("HelpTopic")
90 && ScreensManager.PreviousScreen != ScreensManager.FindScreen<Screen>("Recipaedia")
91 && ScreensManager.PreviousScreen != ScreensManager.FindScreen<Screen>("Bestiary")
92 && ScreensManager.PreviousScreen != ScreensManager.FindScreen<Screen>("KeyboardMapping")
93 && ScreensManager.PreviousScreen != ScreensManager.FindScreen<Screen>("GamepadMapping")) {
94 m_previousScreen = ScreensManager.PreviousScreen;
95 }*/
96 }
97
98 public override void Leave() {
99 m_topicsList.SelectedItem = null;
100 }
101
102 public override void Update() {
103 if (m_recipaediaButton.IsClicked) {
104 ScreensManager.SwitchScreen("Recipaedia");
105 }
106 if (m_bestiaryButton.IsClicked) {
107 ScreensManager.SwitchScreen("Bestiary");
108 }
109 if (m_reportButton.IsClicked) {
111 }
112 if (Input.Back
113 || Input.Cancel
114 || Children.Find<ButtonWidget>("TopBar.Back").IsClicked) {
116 }
117 }
118
119 public HelpTopic GetTopic(string name) => m_topics[name];
120
121 public void ShowTopic(HelpTopic helpTopic) {
122 if (helpTopic.Name == "Keyboard") {
123 ScreensManager.SwitchScreen("KeyboardMapping");
124 }
125 else if (helpTopic.Name == "Gamepad") {
126 ScreensManager.SwitchScreen("GamepadMapping");
127 }
128 else {
129 ScreensManager.SwitchScreen("HelpTopic", helpTopic);
130 }
131 }
132 }
133}
readonly WidgetsList Children
static object Get(Type type, string name)
ButtonWidget m_bestiaryButton
ListPanelWidget m_topicsList
Dictionary< string, HelpTopic > m_topics
ButtonWidget m_reportButton
ButtonWidget m_recipaediaButton
override void Update()
HelpTopic GetTopic(string name)
override void Leave()
override void Enter(object[] parameters)
void ShowTopic(HelpTopic helpTopic)
virtual void OnTopicsListItemClicked(object item)
点击帮助条目时执行
static void GoBack(params object[] parameters)
static void SwitchScreen(string name, params object[] parameters)
static void LaunchBrowser(string url)
virtual string Name
static Widget LoadWidget(object eventsTarget, XElement node, ContainerWidget parentWidget)
virtual void LoadContents(object eventsTarget, XElement node)
static string ReportLink