Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
RecipaediaDescriptionScreen.cs
浏览该文件的文档.
1using System.Globalization;
2using System.Xml.Linq;
3using Engine;
4
5namespace Game {
8
10
12
14
16
18
20
22
24
25 public int m_index;
26
27 public IList<int> m_valuesList;
28 public static string fName = "RecipaediaDescriptionScreen";
29
30 public static RecipaediaDescriptionScreen Default => new();
31
33 XElement node = ContentManager.Get<XElement>("Screens/RecipaediaDescriptionScreen");
34 LoadContents(this, node);
36 m_nameWidget = Children.Find<LabelWidget>("Name");
39 m_descriptionWidget = Children.Find<LabelWidget>("Description");
40 m_propertyNames1Widget = Children.Find<LabelWidget>("PropertyNames1");
41 m_propertyValues1Widget = Children.Find<LabelWidget>("PropertyValues1");
42 m_propertyNames2Widget = Children.Find<LabelWidget>("PropertyNames2");
43 m_propertyValues2Widget = Children.Find<LabelWidget>("PropertyValues2");
44 }
45
46 public override void Enter(object[] parameters) {
47 int item = (int)parameters[0];
48 m_valuesList = (IList<int>)parameters[1];
49 m_index = m_valuesList.IndexOf(item);
51 }
52
53 public override void Update() {
54 m_leftButtonWidget.IsEnabled = m_index > 0;
55 m_rightButtonWidget.IsEnabled = m_index < m_valuesList.Count - 1;
56 if (m_leftButtonWidget.IsClicked
57 || Input.Left) {
58 m_index = MathUtils.Max(m_index - 1, 0);
60 }
61 if (m_rightButtonWidget.IsClicked
62 || Input.Right) {
63 m_index = MathUtils.Min(m_index + 1, m_valuesList.Count - 1);
65 }
66 if (Input.Back
67 || Input.Cancel
68 || Children.Find<ButtonWidget>("TopBar.Back").IsClicked) {
70 }
71 }
72
73 public virtual Dictionary<string, string> GetBlockProperties(int value) {
74 Dictionary<string, string> dictionary = new();
75 int num = Terrain.ExtractContents(value);
76 Block block = BlocksManager.Blocks[num];
77 if (block.GetEmittedLightAmount(value) > 0) {
78 dictionary.Add("Luminosity", block.GetEmittedLightAmount(value).ToString());
79 }
80 if (block.GetFuelFireDuration(value) > 0f) {
81 dictionary.Add("Fuel Value", block.GetFuelFireDuration(value).ToString(CultureInfo.InvariantCulture));
82 }
83 dictionary.Add(
84 "Is Stackable",
85 block.GetMaxStacking(value) > 1
86 ? string.Format(LanguageControl.Get(fName, 1), block.GetMaxStacking(value).ToString())
88 );
89 dictionary.Add("Is Flammable", block.GetFireDuration(value) > 0f ? LanguageControl.Yes : LanguageControl.No);
90 if (block.GetNutritionalValue(value) > 0f) {
91 dictionary.Add("Nutrition", block.GetNutritionalValue(value).ToString("F",CultureInfo.InvariantCulture));
92 }
93 if (block.GetRotPeriod(value) > 0) {
94 dictionary.Add(
95 "Max Storage Time",
96 string.Format(LanguageControl.Get(fName, 2), $"{2 * block.GetRotPeriod(value) * 60f / 1200f:0.0}")
97 );
98 }
99 if (block.GetBlockDigMethod(value) != 0) {
100 dictionary.Add("Digging Method", LanguageControl.Get("DigMethod", block.GetBlockDigMethod(value).ToString()));
101 dictionary.Add("Digging Resilience", block.GetDigResilience(value).ToString(CultureInfo.InvariantCulture));
102 }
103 if (block.GetExplosionResilience(value) > 0f) {
104 dictionary.Add("Explosion Resilience", block.GetExplosionResilience(value).ToString(CultureInfo.InvariantCulture));
105 }
106 if (block.GetExplosionPressure(value) > 0f) {
107 dictionary.Add("Explosive Power", block.GetExplosionPressure(value).ToString(CultureInfo.InvariantCulture));
108 }
109 bool flag = false;
110 if (block.GetMeleePower(value) > 1f) {
111 dictionary.Add("Melee Power", block.GetMeleePower(value).ToString(CultureInfo.InvariantCulture));
112 flag = true;
113 }
114 if (block.GetMeleePower(value) > 1f) {
115 dictionary.Add("Melee Hit Ratio", $"{100f * block.GetMeleeHitProbability(value):0}%");
116 flag = true;
117 }
118 if (block.GetProjectilePower(value) > 1f) {
119 dictionary.Add("Projectile Power", block.GetProjectilePower(value).ToString(CultureInfo.InvariantCulture));
120 flag = true;
121 }
122 if (block.GetShovelPower(value) > 1f) {
123 dictionary.Add("Shoveling", block.GetShovelPower(value).ToString(CultureInfo.InvariantCulture));
124 flag = true;
125 }
126 if (block.GetHackPower(value) > 1f) {
127 dictionary.Add("Hacking", block.GetHackPower(value).ToString(CultureInfo.InvariantCulture));
128 flag = true;
129 }
130 if (block.GetQuarryPower(value) > 1f) {
131 dictionary.Add("Quarrying", block.GetQuarryPower(value).ToString(CultureInfo.InvariantCulture));
132 flag = true;
133 }
134 if (flag && block.GetDurability(value) > 0) {
135 dictionary.Add("Durability", block.GetDurability(value).ToString());
136 }
137 if (block.DefaultExperienceCount > 0f) {
138 dictionary.Add("Experience Orbs", block.DefaultExperienceCount.ToString(CultureInfo.InvariantCulture));
139 }
140 if (block.CanWear(value)) {
141 ClothingData clothingData = block.GetClothingData(value);
142 dictionary.Add("Can Be Dyed", clothingData.CanBeDyed ? LanguageControl.Yes : LanguageControl.No);
143 dictionary.Add("Armor Protection", $"{(int)(clothingData.ArmorProtection * 100f)}%");
144 dictionary.Add("Armor Durability", clothingData.Sturdiness.ToString(CultureInfo.InvariantCulture));
145 dictionary.Add("Insulation", $"{clothingData.Insulation:0.0} clo");
146 dictionary.Add("Movement Speed", $"{clothingData.MovementSpeedFactor * 100f:0}%");
147 }
148 if (GameManager.Project != null
149 && block.BlockIndex > 0) {
150 dictionary.Add("Dynamic Index", block.BlockIndex.ToString());
151 dictionary.Add("Block Data", Terrain.ExtractData(value).ToString());
152 }
154 "EditBlockDescriptionScreen",
155 loader => {
156#pragma warning disable CS0618
157 loader.EditBlockDescriptionScreen(dictionary);
158#pragma warning restore CS0618
159 loader.EditBlockDescriptionScreen(dictionary, value);
160 return false;
161 }
162 );
163 return dictionary;
164 }
165
166 public virtual void UpdateBlockProperties() {
167 if (m_index >= 0
168 && m_index < m_valuesList.Count) {
169 int value = m_valuesList[m_index];
170 int num = Terrain.ExtractContents(value);
171 Block block = BlocksManager.Blocks[num];
172 m_blockIconWidget.Value = value;
173 m_nameWidget.Text = block.GetDisplayName(null, value);
174 m_descriptionWidget.Text = block.GetDescription(value);
175 m_propertyNames1Widget.Text = string.Empty;
176 m_propertyValues1Widget.Text = string.Empty;
177 m_propertyNames2Widget.Text = string.Empty;
178 m_propertyValues2Widget.Text = string.Empty;
179 Dictionary<string, string> blockProperties = GetBlockProperties(value);
180 int num2 = 0;
181 foreach (KeyValuePair<string, string> item in blockProperties) {
182 if (num2 < blockProperties.Count - blockProperties.Count / 2) {
183 LabelWidget propertyNames1Widget = m_propertyNames1Widget;
184 string keyText = LanguageControl.Get(fName, item.Key) ?? item.Key;
185 //if (String.IsNullOrEmpty(keyText)) keyText = item.Key;
186 propertyNames1Widget.Text = $"{propertyNames1Widget.Text}{keyText}:\n";
187 LabelWidget propertyValues1Widget = m_propertyValues1Widget;
188 propertyValues1Widget.Text = $"{propertyValues1Widget.Text}{item.Value}\n";
189 }
190 else {
191 LabelWidget propertyNames2Widget = m_propertyNames2Widget;
192 propertyNames2Widget.Text = $"{propertyNames2Widget.Text}{LanguageControl.Get(fName, item.Key)}:\n";
193 LabelWidget propertyValues2Widget = m_propertyValues2Widget;
194 propertyValues2Widget.Text = $"{propertyValues2Widget.Text}{item.Value}\n";
195 }
196 num2++;
197 }
198 }
199 }
200 }
201}
static int Min(int x1, int x2)
static int Max(int x1, int x2)
int BlockIndex
定义 Block.cs:6
virtual float GetDigResilience(int value)
virtual float GetHackPower(int value)
virtual float GetExplosionResilience(int value)
virtual float GetMeleePower(int value)
virtual float GetQuarryPower(int value)
virtual float GetProjectilePower(int value)
virtual float GetExplosionPressure(int value)
virtual ClothingData GetClothingData(int value)
virtual string GetDescription(int value)
virtual bool CanWear(int value)
virtual float GetShovelPower(int value)
virtual int GetRotPeriod(int value)
float DefaultExperienceCount
virtual int GetMaxStacking(int value)
virtual int GetDurability(int value)
virtual string GetDisplayName(SubsystemTerrain subsystemTerrain, int value)
virtual float GetFireDuration(int value)
virtual int GetEmittedLightAmount(int value)
virtual BlockDigMethod GetBlockDigMethod(int value)
virtual float GetFuelFireDuration(int value)
virtual float GetNutritionalValue(int value)
readonly WidgetsList Children
static object Get(Type type, string name)
static Project Project
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
static RecipaediaDescriptionScreen Default
virtual Dictionary< string, string > GetBlockProperties(int value)
static Screen PreviousScreen
上一个Screen
static void SwitchScreen(string name, params object[] parameters)
static int ExtractContents(int value)
static int ExtractData(int value)
virtual void LoadContents(object eventsTarget, XElement node)
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook