Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
SettingsScreen.cs
浏览该文件的文档.
1using System.Xml.Linq;
2using Engine;
3
4namespace Game {
5 public class SettingsScreen : Screen {
6 [Obsolete]
8
10
12
14
16
18
20
22 readonly Dictionary<ButtonWidget, Action> m_buttonActions = new();
23
24 public SettingsScreen() {
25 XElement node = ContentManager.Get<XElement>("Screens/SettingsScreen");
26 LoadContents(this, node);
27 m_performanceButton = Children.Find<ButtonWidget>("Performance");
28 m_graphicsButton = Children.Find<ButtonWidget>("Graphics");
29 m_uiButton = Children.Find<ButtonWidget>("Ui");
30 m_compatibilityButton = Children.Find<ButtonWidget>("Compatibility");
31 m_audioButton = Children.Find<ButtonWidget>("Audio");
32 m_controlsButton = Children.Find<ButtonWidget>("Controls");
33 m_leftStack = Children.Find<StackPanelWidget>("LeftStack");
34 m_rightPanel = Children.Find<StackPanelWidget>("RightStack");
36 "OnSettingsScreenCreated",
37 loader => {
38 loader.OnSettingsScreenCreated(this, out Dictionary<ButtonWidget, Action> buttonsToAdd);
39 if (buttonsToAdd != null) {
40 foreach (KeyValuePair<ButtonWidget, Action> child in buttonsToAdd) {
41 AddSettingButton(child.Key, child.Value);
42 }
43 }
44 return false;
45 }
46 );
47 }
48
49 /*public override void Enter(object[] parameters) {
50 if (m_previousScreen == null) {
51 m_previousScreen = ScreensManager.PreviousScreen;
52 }
53 }*/
54
55 public override void Update() {
56 if (m_performanceButton.IsClicked) {
57 ScreensManager.SwitchScreen("SettingsPerformance");
58 }
59 if (m_graphicsButton.IsClicked) {
60 ScreensManager.SwitchScreen("SettingsGraphics");
61 }
62 if (m_uiButton.IsClicked) {
63 ScreensManager.SwitchScreen("SettingsUi");
64 }
65 if (m_compatibilityButton.IsClicked) {
66 ScreensManager.SwitchScreen("SettingsCompatibility");
67 }
68 if (m_audioButton.IsClicked) {
69 ScreensManager.SwitchScreen("SettingsAudio");
70 }
71 if (m_controlsButton.IsClicked) {
72 ScreensManager.SwitchScreen("SettingsControls");
73 }
74 foreach (KeyValuePair<ButtonWidget, Action> buttonAction in m_buttonActions) {
75 if (buttonAction.Key.IsClicked) {
76 buttonAction.Value?.Invoke();
77 }
78 }
79 if (Input.Back
80 || Input.Cancel
81 || Children.Find<ButtonWidget>("TopBar.Back").IsClicked) {
82 //ScreensManager.SwitchScreen(m_previousScreen);
83 //m_previousScreen = null;
85 }
86 }
87
94 public void AddSettingButton(ButtonWidget button, Action onClicked) {
95 ArgumentNullException.ThrowIfNull(button);
96 if (!m_buttonActions.TryAdd(button, onClicked)) {
97 throw new InvalidOperationException("Button already has an action assigned");
98 }
99 int index = m_buttonActions.Count - 1;
100 if (index % 2 == 0) {
101 m_leftStack.Children.Add(button);
102 }
103 else {
104 m_rightPanel.Children.Add(button);
105 }
106 }
107
113 public void AddSettingButton(string text, Action onClicked) {
115 Name = text,
116 Text = text,
117 Style = ContentManager.Get<XElement>("Styles/ButtonStyle_310x60"),
120 Margin = new Vector2(0f, 5f)
121 };
122 AddSettingButton(button, onClicked);
123 }
124 }
125}
readonly WidgetsList Children
static object Get(Type type, string name)
static void GoBack(params object[] parameters)
static void SwitchScreen(string name, params object[] parameters)
StackPanelWidget m_rightPanel
void AddSettingButton(string text, Action onClicked)
添加新的设置按钮。使用标准的设置按钮样式,若需要自定义样式请使用另一个重载
readonly Dictionary< ButtonWidget, Action > m_buttonActions
StackPanelWidget m_leftStack
ButtonWidget m_performanceButton
void AddSettingButton(ButtonWidget button, Action onClicked)
添加新的设置按钮
ButtonWidget m_compatibilityButton
virtual string Name
virtual WidgetAlignment VerticalAlignment
virtual Vector2 Margin
virtual WidgetAlignment HorizontalAlignment
XElement Style
virtual void LoadContents(object eventsTarget, XElement node)
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook