Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
CameraManageScreen.cs
浏览该文件的文档.
1using System.Xml.Linq;
2using Engine;
3
4namespace Game {
5 public class CameraManageScreen : Screen {
6 public Widget KeyInfoWidget(object item) {
7 XElement node = ContentManager.Get<XElement>("Widgets/KeyboardMappingItem");
8 ContainerWidget containerWidget = (ContainerWidget)LoadWidget(this, node, null);
9 LabelWidget labelWidget = containerWidget.Children.Find<LabelWidget>("Name");
10 LabelWidget labelWidget2 = containerWidget.Children.Find<LabelWidget>("BoundKey");
11 bool enable = SettingsManager.GetCameraManageSetting(item.ToString()) >= 0;
12 labelWidget.Text = LanguageControl.Get("CameraManage", item.ToString());
13 labelWidget2.Text = LanguageControl.Get("ContainerWidget", "CameraManageScreen", enable ? "Enabled" : "Disabled");
14 labelWidget2.Color = enable ? Color.White : Color.Gray;
15 m_widgetsByString[item.ToString()] = containerWidget;
16 return containerWidget;
17 }
18
25 public Dictionary<string, ContainerWidget> m_widgetsByString = new();
26
27 public static int EnabledCamerasCount => ModSettingsManager.CombinedCameraManageSettings.Count(item => Convert.ToInt32(item.Value) >= 0);
28
30 XElement node = ContentManager.Get<XElement>("Screens/CameraManageScreen");
31 LoadContents(this, node);
32 m_camerasList = Children.Find<ListPanelWidget>("KeysList");
33 m_camerasList.ItemWidgetFactory = (Func<object, Widget>)Delegate.Combine(m_camerasList.ItemWidgetFactory, KeyInfoWidget);
34 m_camerasList.ScrollPosition = 0f;
35 m_camerasList.ScrollSpeed = 0f;
36 m_camerasList.ItemClicked += item => {
37 if (m_camerasList.SelectedItem == item) {
38 m_camerasList.SelectedItem = null;
39 }
40 else {
41 m_camerasList.SelectedItem = item;
42 }
43 };
44 m_enableButton = Children.Find<BevelledButtonWidget>("EnableCamera");
45 m_disableButton = Children.Find<BevelledButtonWidget>("DisableCamera");
49 }
50
51 public override void Update() {
52 string selectedCameraName = m_camerasList.SelectedItem?.ToString() ?? string.Empty;
53 int enabledCount = EnabledCamerasCount;
54 int selectedItemValue = string.IsNullOrEmpty(selectedCameraName) ? -2 : SettingsManager.GetCameraManageSetting(selectedCameraName);
55 m_enableButton.IsEnabled = !string.IsNullOrEmpty(selectedCameraName) && selectedItemValue < 0;
56 m_disableButton.IsEnabled = !string.IsNullOrEmpty(selectedCameraName)
57 && selectedItemValue >= 0
58 && selectedCameraName != "Game.FppCamera"
59 && enabledCount > 2; //至少保留2个摄像机,当现存小于等于2个时无法点击禁用按钮
60 m_upButton.IsEnabled = !string.IsNullOrEmpty(selectedCameraName) && selectedItemValue > 0;
61 m_downButton.IsEnabled = !string.IsNullOrEmpty(selectedCameraName) && selectedItemValue >= 0 && selectedItemValue < enabledCount - 1;
62 foreach (string key in m_widgetsByString.Keys) {
63 LabelWidget labelWidget = m_widgetsByString[key].Children.Find<LabelWidget>("BoundKey");
64 bool enable = SettingsManager.GetCameraManageSetting(key) >= 0;
65 //labelWidget.Text = SettingsManager.GetCameraManageSetting(key).ToString();
66 labelWidget.Text = LanguageControl.Get("ContentWidgets", "CameraManageScreen", enable ? "Enabled" : "Disabled");
67 labelWidget.Color = enable ? Color.White : Color.Gray;
68 }
69 if (m_disableButton.IsClicked) {
70 SettingsManager.SetCameraManageSetting(selectedCameraName, -1); //-1表示禁用
72 }
73 if (m_enableButton.IsClicked) {
74 SettingsManager.SetCameraManageSetting(selectedCameraName, enabledCount); //将禁用的启用后自动放在最后面
76 m_camerasList.SelectedIndex = ModSettingsManager.CombinedCameraManageSettings.Count - 1; //列表自动选中最后一个
77 }
78 if (m_upButton.IsClicked) {
79 foreach (KeyValuePair<string, int> item in ModSettingsManager.CombinedCameraManageSettings) { //找到选中摄像机的上一个并将其序号进行替换
80 string key = item.Key;
81 if (SettingsManager.GetCameraManageSetting(key) == selectedItemValue - 1) {
82 SettingsManager.SetCameraManageSetting(key, selectedItemValue);
83 break;
84 }
85 }
86 SettingsManager.SetCameraManageSetting(selectedCameraName, selectedItemValue - 1);
87 int i = m_camerasList.SelectedIndex ?? 1;
89 m_camerasList.SelectedIndex = i - 1; //刷新列表后重新选中
90 }
91 if (m_downButton.IsClicked) {
92 foreach (KeyValuePair<string, int> item in ModSettingsManager.CombinedCameraManageSettings) { //找到选中摄像机的下一个并将其序号进行替换
93 string key = item.Key;
94 if (SettingsManager.GetCameraManageSetting(key) == selectedItemValue + 1) {
95 SettingsManager.SetCameraManageSetting(key, selectedItemValue);
96 break;
97 }
98 }
99 SettingsManager.SetCameraManageSetting(selectedCameraName, selectedItemValue + 1);
100 int i = m_camerasList.SelectedIndex ?? -1;
101 RefreshList();
102 m_camerasList.SelectedIndex = i + 1; //刷新列表后重新选中
103 }
104 if (m_resetButton.IsClicked) {
105 MessageDialog dialog = new(
106 LanguageControl.Get("ContentWidgets", "CameraManageScreen", "ResetTitle"),
107 LanguageControl.Get("ContentWidgets", "CameraManageScreen", "ResetText"),
110 delegate(MessageDialogButton button) {
111 if (button == MessageDialogButton.Button1) {
112 ResetAll();
113 }
114 }
115 );
116 DialogsManager.ShowDialog(null, dialog);
117 }
118 if (Children.Find<ButtonWidget>("TopBar.Back").IsClicked
119 || Input.Back
120 || Input.Cancel) {
122 }
123 }
124
125 public override void Enter(object[] parameters) {
126 RefreshList();
127 }
128
134
135 void RefreshList() {
136 m_camerasList.ClearItems();
137 List<KeyValuePair<string, int>> list = ModSettingsManager.CombinedCameraManageSettings.OrderBy(x => x.Value).ToList();
138 int num = 0;
139 foreach (KeyValuePair<string, int> item in list) {
140 string name = item.Key;
141 m_camerasList.AddItem(name);
142 int value = item.Value;
143 if (value >= 0) { //刷新列表时重新按顺序分配值,避免出现空缺
145 num++;
146 }
147 }
148 }
149 }
150}
override void Enter(object[] parameters)
BevelledButtonWidget m_enableButton
BevelledButtonWidget m_downButton
BevelledButtonWidget m_disableButton
Dictionary< string, ContainerWidget > m_widgetsByString
BevelledButtonWidget m_resetButton
Widget KeyInfoWidget(object item)
readonly WidgetsList Children
static object Get(Type type, string name)
static void ShowDialog(ContainerWidget parentWidget, Dialog dialog)
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
static Dictionary< string, int > CombinedCameraManageSettings
static Screen PreviousScreen
上一个Screen
static void SwitchScreen(string name, params object[] parameters)
static int GetCameraManageSetting(string keyName, bool throwIfNotFound=true)
static void SetCameraManageSetting(string keyName, int value)
仅用于修改现有相机配置,添加相机配置请使用ModLoader.GetCameraList
static void InitializeCameraManageSettings()
static Widget LoadWidget(object eventsTarget, XElement node, ContainerWidget parentWidget)
virtual void LoadContents(object eventsTarget, XElement node)
static Color Gray