Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
ManageClassSubstitutesScreen.cs
浏览该文件的文档.
1using System.Xml.Linq;
2using Engine;
4
5namespace Game {
9 public readonly string m_guid;
12
13 public SubstitutesGroupWidget(ManageClassSubstitutesScreen screen, List<ModsManager.ClassSubstitute> substitutes, string guid) {
14 m_screen = screen;
15 m_substitutes = substitutes;
16 m_guid = guid;
17 Direction = LayoutDirection.Vertical;
18 MarginLeft = 10f;
19 MarginRight = 10f;
20 string description = ModsManager.FindElementByGuid(DatabaseManager.DatabaseNode, guid, out XElement element)
21 ? element.Parent?.Attribute("Description")?.Value ?? LanguageControl.Unknown
23 if (description.StartsWith('[')
24 && description.EndsWith(']')) {
25 string[] array = description.Substring(1, description.Length - 2).Split(':');
26 if (array.Length == 2) {
27 description = LanguageControl.GetDatabase(array[0], array[1]);
28 }
29 }
31 new CanvasWidget() {
32 Size = new Vector2(float.PositiveInfinity, 40f),
33 Children = {
34 new StackPanelWidget() {
36 Children = {
37 new LabelWidget { Text = substitutes[0].ClassName, VerticalAlignment = WidgetAlignment.Center },
38 new LabelWidget { Text = $"({description})", Color = new Color(192, 192, 192), VerticalAlignment = WidgetAlignment.Center, MarginLeft = 10f, Ellipsis = true }
39 }
40 }
41 }
42 }
43 );
44 if (!ModsManager.SelectedClassSubstitutes.TryGetValue(guid, out ModsManager.ClassSubstitute selected)) {
45 selected = substitutes[0];
46 }
47 for (int i = 0; i < substitutes.Count; i++) {
48 ModsManager.ClassSubstitute substitute = substitutes[i];
49 m_substitutesContainer.AddChildren(new SubstituteWidget(this, i, substitute, selected == substitute));
50 }
52 }
53
54 public void SelectSubstitute(int index) {
55 m_screen.m_changedGuids.Add(m_guid);
56 int count = m_substitutes.Count;
57 for (int i = 0; i < count; i++) {
58 if (i == index) {
60 if (m_substitutesContainer.Children[i] is SubstituteWidget widget) {
61 widget.m_checkbox.IsChecked = true;
62 }
63 }
64 else if (m_substitutesContainer.Children[i] is SubstituteWidget widget) {
65 widget.m_checkbox.IsChecked = false;
66 }
67 }
68 }
69 }
70
73 public readonly int m_index;
74
76
77 public SubstituteWidget(SubstitutesGroupWidget group, int index, ModsManager.ClassSubstitute substitute, bool isSelected) {
78 m_group = group;
79 m_index = index;
80 m_checkbox = new CheckboxWidget() { IsAutoCheckingEnabled = false, IsChecked = isSelected };
81 Texture2D icon;
84 if (substitute.PackageName == "survivalcraft") {
86 label.Text = $"{LanguageControl.Get("SelectClassSubstituteDialog", "1")} - {substitute.ClassName}";
87 }
88 else if (ModsManager.PackageNameToModEntity.TryGetValue(substitute.PackageName, out ModEntity modEntity)) {
89 icon = modEntity.Icon;
90 label.Text = $"{modEntity.modInfo.Name} - {substitute.ClassName}";
91 }
92 else {
93 icon = null;
94 label.Text = $"{substitute.PackageName} - {substitute.ClassName}";
95 }
96 if (icon != null) {
98 new RectangleWidget() {
99 Subtexture = icon,
100 Size = new Vector2(48f),
102 FillColor = Color.White,
103 OutlineColor = Color.Transparent,
104 OutlineThickness = 0f
105 }
106 );
107 }
108 AddChildren(label);
109 }
110
111 public override void Update() {
112 if (m_checkbox.IsClicked
113 && !m_checkbox.IsChecked) {
114 m_group.SelectSubstitute(m_index);
115 AudioManager.PlaySound("Audio/UI/ButtonClick", 1f, 0f, 0f);
116 }
117 }
118 }
119
120 public HashSet<string> m_changedGuids = [];
121
123
125 XElement node = ContentManager.Get<XElement>("Screens/ManageClassSubstitutesScreen");
126 LoadContents(this, node);
127 m_backButton = Children.Find<ButtonWidget>("TopBar.Back");
128 ScrollPanelWidget scrollPanel = Children.Find<ScrollPanelWidget>("Scroll");
129 foreach ((string guid, List<ModsManager.ClassSubstitute> substitutes) in ModsManager.ClassSubstitutes) {
130 scrollPanel.AddChildren(new SubstitutesGroupWidget(this, substitutes, guid));
131 }
132 }
133
134 public override void Update() {
135 if (Input.Back
136 || Input.Cancel
137 || m_backButton.IsClicked) {
138 if (m_changedGuids.Count > 0) {
139 foreach (string guid in m_changedGuids) {
140 if (ModsManager.SelectedClassSubstitutes.TryGetValue(guid, out ModsManager.ClassSubstitute substitute)
141 && ModsManager.FindElementByGuid(DatabaseManager.DatabaseNode, guid, out XElement element)) {
142 element.SetAttributeValue("Value", substitute.ClassName);
143 }
144 }
145 m_changedGuids.Clear();
148 }
149 }
150 }
151 }
152}
Engine.Color Color
static void PlaySound(string name, float volume, float pitch, float pan)
readonly WidgetsList Children
void AddChildren(Widget widget)
static object Get(Type type, string name)
static void LoadDataBaseFromXml(XElement node)
static string GetDatabase(string name, string prop)
SubstituteWidget(SubstitutesGroupWidget group, int index, ModsManager.ClassSubstitute substitute, bool isSelected)
SubstitutesGroupWidget(ManageClassSubstitutesScreen screen, List< ModsManager.ClassSubstitute > substitutes, string guid)
static void GoBack(params object[] parameters)
virtual WidgetAlignment VerticalAlignment
virtual void LoadContents(object eventsTarget, XElement node)
virtual float MarginRight
virtual float MarginLeft
static bool FindElementByGuid(XElement xElement, string guid, out XElement elementout)
static Dictionary< string, ModEntity > PackageNameToModEntity
含所有已启用的模组
static Dictionary< string, List< ClassSubstitute > > ClassSubstitutes
static ModEntity SurvivalCraftModEntity
static Dictionary< string, ClassSubstitute > SelectedClassSubstitutes
static Color Transparent
定义 Color.cs:5
static Color White