Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
WorldOptionsScreen.cs
浏览该文件的文档.
1using System.Globalization;
2using System.Xml.Linq;
3using Engine;
5
6namespace Game {
8 public static string fName = "WorldOptionsScreen";
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44
46
48
50
52
54
56
58
60
62
64
66
68
70
72
74
76
78
80
82
84
86
87 public bool m_isExistingWorld;
88
90
91 public static bool ForceEnableTerrainGeneratorVersionButton = false;
92
93 public static float[] m_islandSizes = [
94 1f,
95 7f,
96 15f,
97 30f,
98 40f,
99 50f,
100 60f,
101 80f,
102 100f,
103 120f,
104 150f,
105 200f,
106 250f,
107 300f,
108 400f,
109 500f,
110 600f,
111 800f,
112 1000f,
113 1200f,
114 1500f,
115 2000f,
116 2500f
117 ];
118
119 public static float[] m_biomeSizes = [
120 0.01f,
121 0.1f,
122 0.25f,
123 0.33f,
124 0.5f,
125 0.75f,
126 1f,
127 1.5f,
128 2f,
129 3f,
130 4f,
131 6f,
132 8f,
133 10f,
134 12f,
135 16f,
136 20f,
137 24f,
138 32f
139 ];
140
141 public static float[] m_yearDays = [
142 4f,
143 8f,
144 12f,
145 16f,
146 20f,
147 24f,
148 32f,
149 48f,
150 64f,
151 96f,
152 128f,
153 192f,
154 256f,
155 365f,
156 384f,
157 512f
158 ];
159
160 public static int[] m_flatTerrainBlockList = [
161 -1,
162 8,
163 2,
164 7,
165 3,
166 67,
167 66,
168 4,
169 5,
170 26,
171 73,
172 21,
173 46,
174 47,
175 15,
176 62,
177 68,
178 126,
179 71,
180 1
181 ];
182
184 XElement node = ContentManager.Get<XElement>("Screens/WorldOptionsScreen");
185 LoadContents(this, node);
186 m_creativeModePanel = Children.Find<Widget>("CreativeModePanel");
187 m_seasonsPanel = Children.Find<Widget>("SeasonsPanel");
188 m_newWorldOnlyPanel = Children.Find<Widget>("NewWorldOnlyPanel");
189 m_continentTerrainPanel = Children.Find<Widget>("ContinentTerrainPanel");
190 m_yearDaysPanel = Children.Find<Widget>("YearDaysPanel");
191 m_islandTerrainPanel = Children.Find<Widget>("IslandTerrainPanel");
192 m_islandSizeNS = Children.Find<SliderWidget>("IslandSizeNS");
193 m_islandSizeEW = Children.Find<SliderWidget>("IslandSizeEW");
194 m_flatTerrainPanel = Children.Find<Widget>("FlatTerrainPanel");
195 m_blocksTextureIcon = Children.Find<RectangleWidget>("BlocksTextureIcon");
196 m_blocksTextureLabel = Children.Find<LabelWidget>("BlocksTextureLabel");
197 m_blocksTextureDetails = Children.Find<LabelWidget>("BlocksTextureDetails");
198 m_blocksTextureButton = Children.Find<ButtonWidget>("BlocksTextureButton");
199 m_seaLevelOffsetSlider = Children.Find<SliderWidget>("SeaLevelOffset");
200 m_temperatureOffsetSlider = Children.Find<SliderWidget>("TemperatureOffset");
201 m_humidityOffsetSlider = Children.Find<SliderWidget>("HumidityOffset");
202 m_biomeSizeSlider = Children.Find<SliderWidget>("BiomeSize");
203 m_terrainGeneratorVersionButtonPanel = Children.Find<Widget>("TerrainGeneratorVersionPanel");
204 m_terrainGeneratorVersionButton = Children.Find<ButtonWidget>("TerrainGeneratorVersion");
205 m_paletteButton = Children.Find<ButtonWidget>("Palette");
206 m_supernaturalCreaturesButton = Children.Find<ButtonWidget>("SupernaturalCreatures");
207 m_friendlyFireButton = Children.Find<ButtonWidget>("FriendlyFire");
208 m_environmentBehaviorButton = Children.Find<ButtonWidget>("EnvironmentBehavior");
209 m_timeOfDayButton = Children.Find<ButtonWidget>("TimeOfDay");
210 m_areSeasonsChangingCheckBox = Children.Find<CheckboxWidget>("AreSeasonsChanging");
211 m_yearDaysSlider = Children.Find<SliderWidget>("YearDays");
212 m_timeOfYearSlider = Children.Find<SliderWidget>("TimeOfYear");
213 m_weatherEffectsButton = Children.Find<ButtonWidget>("WeatherEffects");
214 m_adventureRespawnButton = Children.Find<ButtonWidget>("AdventureRespawn");
215 m_adventureSurvivalMechanicsButton = Children.Find<ButtonWidget>("AdventureSurvivalMechanics");
216 m_terrainGenerationButton = Children.Find<ButtonWidget>("TerrainGeneration");
217 m_flatTerrainLevelSlider = Children.Find<SliderWidget>("FlatTerrainLevel");
218 m_flatTerrainShoreRoughnessSlider = Children.Find<SliderWidget>("FlatTerrainShoreRoughness");
219 m_flatTerrainBlock = Children.Find<BlockIconWidget>("FlatTerrainBlock");
220 m_flatTerrainBlockLabel = Children.Find<LabelWidget>("FlatTerrainBlockLabel");
221 m_flatTerrainBlockButton = Children.Find<ButtonWidget>("FlatTerrainBlockButton");
223 m_descriptionLabel = Children.Find<LabelWidget>("Description");
224 m_islandSizeEW.MinValue = 0f;
225 m_islandSizeEW.MaxValue = m_islandSizes.Length - 1;
226 m_islandSizeEW.Granularity = 1f;
227 m_islandSizeNS.MinValue = 0f;
228 m_islandSizeNS.MaxValue = m_islandSizes.Length - 1;
229 m_islandSizeNS.Granularity = 1f;
230 m_biomeSizeSlider.MinValue = 0f;
231 m_biomeSizeSlider.MaxValue = m_biomeSizes.Length - 1;
232 m_biomeSizeSlider.Granularity = 1f;
233 m_terrainGeneratorVersionButton.Text = VersionsManager.SerializationVersion;
234 //当有模组需要使用2.4地形时,禁止玩家更改地形生成器版本,防止玩家误操作导致模组地形不能生成
235 m_terrainGeneratorVersionButton.IsEnabled = ForceEnableTerrainGeneratorVersionButton
236 || !ModsManager.ModHooks.TryGetValue("TerrainContentsGenerator24Initialize", out ModsManager.ModHook modHook)
237 || modHook.Loaders.Count == 0;
238 m_yearDaysSlider.MinValue = 0f;
239 m_yearDaysSlider.MaxValue = m_yearDays.Length - 1;
240 m_yearDaysSlider.Granularity = 1f;
241 }
242
243 public static string FormatOffset(float value) {
244 if (value != 0f) {
245 return (value >= 0f ? "+" : "") + value;
246 }
247 return LanguageControl.Get(fName, 6);
248 }
249
250 public override void Enter(object[] parameters) {
251 m_worldSettings = (WorldSettings)parameters[0];
252 m_isExistingWorld = (bool)parameters[1];
253 m_descriptionLabel.Text = StringsManager.GetString($"EnvironmentBehaviorMode.{m_worldSettings.EnvironmentBehaviorMode}.Description");
254 }
255
256 public override void Leave() {
257 m_blockTexturesCache.Clear();
258 }
259
260 public override void Update() {
261 if (m_terrainGenerationButton.IsClicked
262 && !m_isExistingWorld) {
263 IList<int> enumValues = EnumUtils.GetEnumValues<TerrainGenerationMode>();
265 null,
268 enumValues,
269 56f,
270 e => StringsManager.GetString($"TerrainGenerationMode.{(TerrainGenerationMode)e}.Name"),
271 e => {
272 if (m_worldSettings.GameMode != 0
273 && ((TerrainGenerationMode)e == TerrainGenerationMode.FlatContinent
274 || (TerrainGenerationMode)e == TerrainGenerationMode.FlatIsland)) {
275 DialogsManager.ShowDialog(
276 null,
277 new MessageDialog(LanguageControl.Get(fName, 4), LanguageControl.Get(fName, 5), LanguageControl.Ok, null, null)
278 );
279 }
280 else {
281 m_worldSettings.TerrainGenerationMode = (TerrainGenerationMode)e;
282 m_descriptionLabel.Text = StringsManager.GetString(
283 $"TerrainGenerationMode.{m_worldSettings.TerrainGenerationMode}.Description"
284 );
285 if (m_worldSettings.TerrainGenerationMode == TerrainGenerationMode.Continent
286 || m_worldSettings.TerrainGenerationMode == TerrainGenerationMode.Island) {
287 m_seaLevelOffsetSlider.MinValue = -64f;
288 m_seaLevelOffsetSlider.MaxValue = 191f;
289 m_worldSettings.SeaLevelOffset = Math.Clamp(m_worldSettings.SeaLevelOffset, -64, 191);
290 m_seaLevelOffsetSlider.Value = m_worldSettings.SeaLevelOffset;
291 }
292 else {
293 m_seaLevelOffsetSlider.MinValue = -m_worldSettings.TerrainLevel;
294 m_seaLevelOffsetSlider.MaxValue = 255 - m_worldSettings.TerrainLevel;
295 m_worldSettings.SeaLevelOffset = Math.Clamp(
296 m_worldSettings.SeaLevelOffset,
297 -m_worldSettings.TerrainLevel,
298 255 - m_worldSettings.TerrainLevel
299 );
300 m_seaLevelOffsetSlider.Value = m_worldSettings.SeaLevelOffset;
301 }
302 }
303 }
304 )
305 );
306 }
307 if (m_islandSizeEW.IsSliding
308 && !m_isExistingWorld) {
309 m_worldSettings.IslandSize.X = m_islandSizes[Math.Clamp((int)m_islandSizeEW.Value, 0, m_islandSizes.Length - 1)];
310 }
311 if (m_islandSizeNS.IsSliding
312 && !m_isExistingWorld) {
313 m_worldSettings.IslandSize.Y = m_islandSizes[Math.Clamp((int)m_islandSizeNS.Value, 0, m_islandSizes.Length - 1)];
314 }
315 if (m_flatTerrainLevelSlider.IsSliding
316 && !m_isExistingWorld) {
317 m_worldSettings.TerrainLevel = Math.Clamp(
318 (int)m_flatTerrainLevelSlider.Value / (int)m_flatTerrainLevelSlider.Granularity * (int)m_flatTerrainLevelSlider.Granularity,
319 2,
320 252
321 );
322 m_seaLevelOffsetSlider.MinValue = -m_worldSettings.TerrainLevel;
323 m_seaLevelOffsetSlider.MaxValue = 255 - m_worldSettings.TerrainLevel;
324 m_worldSettings.SeaLevelOffset = Math.Clamp(
325 m_worldSettings.SeaLevelOffset,
326 -m_worldSettings.TerrainLevel,
327 255 - m_worldSettings.TerrainLevel
328 );
329 m_seaLevelOffsetSlider.Value = m_worldSettings.SeaLevelOffset;
330 m_descriptionLabel.Text = StringsManager.GetString("FlatTerrainLevel.Description");
331 }
332 if (m_flatTerrainShoreRoughnessSlider.IsSliding
333 && !m_isExistingWorld) {
334 m_worldSettings.ShoreRoughness = m_flatTerrainShoreRoughnessSlider.Value;
335 m_descriptionLabel.Text = StringsManager.GetString("FlatTerrainShoreRoughness.Description");
336 }
337 if (m_flatTerrainBlockButton.IsClicked
338 && !m_isExistingWorld) {
340 null,
342 LanguageControl.Get(fName, 2),
343 m_flatTerrainBlockList,
344 72f,
345 index => {
346 if ((int)index == -1) {
347 return new StackPanelWidget {
348 VerticalAlignment = WidgetAlignment.Center,
349 Children = {
350 new CanvasWidget { Size = new Vector2(94f, 0f) },
351 new LabelWidget { Text = LanguageControl.Get(fName, "9"), Color = Color.White }
352 }
353 };
354 }
355 XElement node2 = ContentManager.Get<XElement>("Widgets/SelectBlockItem");
356 ContainerWidget obj2 = (ContainerWidget)LoadWidget(null, node2, null);
357 obj2.Children.Find<BlockIconWidget>("SelectBlockItem.Block").Contents = (int)index;
358 obj2.Children.Find<LabelWidget>("SelectBlockItem.Text").Text = BlocksManager.Blocks[(int)index]
359 .GetDisplayName(null, Terrain.MakeBlockValue((int)index));
360 return obj2;
361 },
362 index => {
363 if ((int)index == -1) {
365 this,
366 new TextBoxDialog(
367 LanguageControl.Get(fName, "9"),
368 m_worldSettings.TerrainBlockIndex.ToString(),
369 10,
370 str => {
371 bool flag = true;
372 if (int.TryParse(str, out int num)) {
373 int contents = Terrain.ExtractContents(num);
374 if (contents == 0
375 || BlocksManager.Blocks[contents] is not AirBlock) {
376 flag = false;
377 m_worldSettings.TerrainBlockIndex = num;
378 }
379 }
380 if (flag) {
382 this,
383 new MessageDialog(
385 LanguageControl.Get(fName, "10"),
387 null,
388 null
389 )
390 );
391 }
392 }
393 )
394 );
395 }
396 else {
397 m_worldSettings.TerrainBlockIndex = (int)index;
398 }
399 }
400 )
401 );
402 }
403 if (m_flatTerrainMagmaOceanCheckbox.IsClicked) {
404 m_worldSettings.TerrainOceanBlockIndex = m_worldSettings.TerrainOceanBlockIndex == 18 ? 92 : 18;
405 m_descriptionLabel.Text = StringsManager.GetString("FlatTerrainMagmaOcean.Description");
406 }
407 if (m_seaLevelOffsetSlider.IsSliding
408 && !m_isExistingWorld) {
409 m_worldSettings.SeaLevelOffset = (int)m_seaLevelOffsetSlider.Value;
410 m_descriptionLabel.Text = StringsManager.GetString("SeaLevelOffset.Description");
411 }
412 if (m_temperatureOffsetSlider.IsSliding
413 && !m_isExistingWorld) {
414 m_worldSettings.TemperatureOffset = m_temperatureOffsetSlider.Value;
415 m_descriptionLabel.Text = StringsManager.GetString("TemperatureOffset.Description");
416 }
417 if (m_humidityOffsetSlider.IsSliding
418 && !m_isExistingWorld) {
419 m_worldSettings.HumidityOffset = m_humidityOffsetSlider.Value;
420 m_descriptionLabel.Text = StringsManager.GetString("HumidityOffset.Description");
421 }
422 if (m_biomeSizeSlider.IsSliding
423 && !m_isExistingWorld) {
424 m_worldSettings.BiomeSize = m_biomeSizes[Math.Clamp((int)m_biomeSizeSlider.Value, 0, m_biomeSizes.Length - 1)];
425 m_descriptionLabel.Text = StringsManager.GetString("BiomeSize.Description");
426 }
427 if (m_terrainGeneratorVersionButton.IsClicked) {
428 DialogsManager.ShowDialog(
429 null,
430 new ListSelectionDialog(
431 LanguageControl.Get(fName, "11"),
432 new[] { "2.1", "2.2", "2.3", "2.4", VersionsManager.SerializationVersion }.Distinct(),
433 56f,
434 e => e as string,
435 e => m_worldSettings.OriginalSerializationVersion = e as string
436 )
437 );
438 }
439 if (m_blocksTextureButton.IsClicked) {
440 BlocksTexturesManager.UpdateBlocksTexturesList();
441 ListSelectionDialog dialog = new(
442 LanguageControl.Get(fName, 3),
443 BlocksTexturesManager.BlockTexturesNames,
444 64f,
445 item => {
446 XElement node = ContentManager.Get<XElement>("Widgets/BlocksTextureItem");
447 ContainerWidget obj = (ContainerWidget)LoadWidget(this, node, null);
448 Texture2D texture2 = m_blockTexturesCache.GetTexture((string)item);
449 obj.Children.Find<LabelWidget>("BlocksTextureItem.Text").Text = BlocksTexturesManager.GetDisplayName((string)item);
450 obj.Children.Find<LabelWidget>("BlocksTextureItem.Details").Text = $"{texture2.Width}x{texture2.Height}";
451 obj.Children.Find<RectangleWidget>("BlocksTextureItem.Icon").Subtexture = new Subtexture(texture2, Vector2.Zero, Vector2.One);
452 return obj;
453 },
454 item => m_worldSettings.BlocksTextureName = (string)item
455 );
456 DialogsManager.ShowDialog(null, dialog);
457 m_descriptionLabel.Text = StringsManager.GetString("BlocksTexture.Description");
458 }
459 if (m_paletteButton.IsClicked) {
460 DialogsManager.ShowDialog(null, new EditPaletteDialog(m_worldSettings.Palette));
461 }
462 if (m_supernaturalCreaturesButton.IsClicked) {
463 m_worldSettings.AreSupernaturalCreaturesEnabled = !m_worldSettings.AreSupernaturalCreaturesEnabled;
464 m_descriptionLabel.Text = StringsManager.GetString($"SupernaturalCreatures.{m_worldSettings.AreSupernaturalCreaturesEnabled}");
465 }
466 if (m_friendlyFireButton.IsClicked) {
467 m_worldSettings.IsFriendlyFireEnabled = !m_worldSettings.IsFriendlyFireEnabled;
468 m_descriptionLabel.Text = StringsManager.GetString($"FriendlyFire.{m_worldSettings.IsFriendlyFireEnabled}");
469 }
470 if (m_environmentBehaviorButton.IsClicked) {
471 IList<int> enumValues2 = EnumUtils.GetEnumValues<EnvironmentBehaviorMode>();
472 m_worldSettings.EnvironmentBehaviorMode =
473 (EnvironmentBehaviorMode)((enumValues2.IndexOf((int)m_worldSettings.EnvironmentBehaviorMode) + 1) % enumValues2.Count);
474 m_descriptionLabel.Text = StringsManager.GetString($"EnvironmentBehaviorMode.{m_worldSettings.EnvironmentBehaviorMode}.Description");
475 }
476 if (m_timeOfDayButton.IsClicked) {
477 DialogsManager.ShowDialog(
478 null,
479 new ListSelectionDialog(
480 LanguageControl.Get(fName, "7"),
481 EnumUtils.GetEnumValues<TimeOfDayMode>(),
482 56f,
483 e => LanguageControl.Get("TimeOfDayMode", ((TimeOfDayMode)e).ToString()),
484 e => {
485 m_worldSettings.TimeOfDayMode = (TimeOfDayMode)e;
486 m_descriptionLabel.Text = StringsManager.GetString($"TimeOfDayMode.{(TimeOfDayMode)e}.Description");
487 }
488 )
489 );
490 }
491 if (m_areSeasonsChangingCheckBox.IsClicked) {
492 m_worldSettings.AreSeasonsChanging = !m_worldSettings.AreSeasonsChanging;
493 m_descriptionLabel.Text = StringsManager.GetString($"AreSeasonsChanging.{m_worldSettings.AreSeasonsChanging}");
494 }
495 if (m_yearDaysSlider.IsSliding) {
496 m_worldSettings.YearDays = m_yearDays[Math.Clamp((int)m_yearDaysSlider.Value, 0, m_yearDays.Length - 1)];
497 m_descriptionLabel.Text = StringsManager.GetString("YearDays.Description");
498 }
499 if (m_timeOfYearSlider.IsSliding) {
500 m_worldSettings.TimeOfYear = Math.Clamp(m_timeOfYearSlider.Value, 0f, 0.999f);
501 m_descriptionLabel.Text = StringsManager.GetString("TimeOfYear.Description");
502 }
503 if (m_weatherEffectsButton.IsClicked) {
504 m_worldSettings.AreWeatherEffectsEnabled = !m_worldSettings.AreWeatherEffectsEnabled;
505 m_descriptionLabel.Text = StringsManager.GetString($"WeatherMode.{m_worldSettings.AreWeatherEffectsEnabled}");
506 }
507 if (m_adventureRespawnButton.IsClicked) {
508 m_worldSettings.IsAdventureRespawnAllowed = !m_worldSettings.IsAdventureRespawnAllowed;
509 m_descriptionLabel.Text = StringsManager.GetString($"AdventureRespawnMode.{m_worldSettings.IsAdventureRespawnAllowed}");
510 }
511 if (m_adventureSurvivalMechanicsButton.IsClicked) {
512 m_worldSettings.AreAdventureSurvivalMechanicsEnabled = !m_worldSettings.AreAdventureSurvivalMechanicsEnabled;
513 m_descriptionLabel.Text = StringsManager.GetString(
514 $"AdventureSurvivalMechanics.{m_worldSettings.AreAdventureSurvivalMechanicsEnabled}"
515 );
516 }
517 m_creativeModePanel.IsVisible = m_worldSettings.GameMode == GameMode.Creative;
518 m_newWorldOnlyPanel.IsVisible = !m_isExistingWorld;
519 m_seasonsPanel.IsVisible = m_worldSettings.GameMode == GameMode.Creative || !m_isExistingWorld;
520 m_continentTerrainPanel.IsVisible = m_worldSettings.TerrainGenerationMode == TerrainGenerationMode.Continent
521 || m_worldSettings.TerrainGenerationMode == TerrainGenerationMode.FlatContinent;
522 m_islandTerrainPanel.IsVisible = m_worldSettings.TerrainGenerationMode == TerrainGenerationMode.Island
523 || m_worldSettings.TerrainGenerationMode == TerrainGenerationMode.FlatIsland;
524 m_flatTerrainPanel.IsVisible = m_worldSettings.TerrainGenerationMode == TerrainGenerationMode.FlatContinent
525 || m_worldSettings.TerrainGenerationMode == TerrainGenerationMode.FlatIsland;
526 m_yearDaysPanel.IsVisible = m_worldSettings.AreSeasonsChanging;
527 m_terrainGenerationButton.Text = StringsManager.GetString($"TerrainGenerationMode.{m_worldSettings.TerrainGenerationMode}.Name");
528 m_islandSizeEW.Value = FindNearestIndex(m_islandSizes, m_worldSettings.IslandSize.X);
529 m_islandSizeEW.Text = m_worldSettings.IslandSize.X.ToString(CultureInfo.InvariantCulture);
530 m_islandSizeNS.Value = FindNearestIndex(m_islandSizes, m_worldSettings.IslandSize.Y);
531 m_islandSizeNS.Text = m_worldSettings.IslandSize.Y.ToString(CultureInfo.InvariantCulture);
532 m_flatTerrainLevelSlider.Value = m_worldSettings.TerrainLevel;
533 m_flatTerrainLevelSlider.Text = m_worldSettings.TerrainLevel.ToString();
534 m_flatTerrainShoreRoughnessSlider.Value = m_worldSettings.ShoreRoughness;
535 m_flatTerrainShoreRoughnessSlider.Text = $"{m_worldSettings.ShoreRoughness * 100f:0}%";
536 m_flatTerrainBlock.Contents = m_worldSettings.TerrainBlockIndex;
537 m_flatTerrainMagmaOceanCheckbox.IsChecked = m_worldSettings.TerrainOceanBlockIndex == 92;
538 string text = BlocksManager.Blocks[Terrain.ExtractContents(m_worldSettings.TerrainBlockIndex)]
539 ?.GetDisplayName(null, m_worldSettings.TerrainBlockIndex)
540 ?? string.Empty;
541 m_flatTerrainBlockLabel.Text = text.Length > 10 ? $"{text.Substring(0, 10)}..." : text;
542 Texture2D texture = m_blockTexturesCache.GetTexture(m_worldSettings.BlocksTextureName);
543 m_blocksTextureIcon.Subtexture = new Subtexture(texture, Vector2.Zero, Vector2.One);
544 m_blocksTextureLabel.Text = BlocksTexturesManager.GetDisplayName(m_worldSettings.BlocksTextureName);
545 m_blocksTextureDetails.Text = $"{texture.Width}x{texture.Height}";
546 m_seaLevelOffsetSlider.Value = m_worldSettings.SeaLevelOffset;
547 m_seaLevelOffsetSlider.Text = FormatOffset(m_worldSettings.SeaLevelOffset);
548 m_temperatureOffsetSlider.Value = m_worldSettings.TemperatureOffset;
549 m_temperatureOffsetSlider.Text = FormatOffset(m_worldSettings.TemperatureOffset);
550 m_humidityOffsetSlider.Value = m_worldSettings.HumidityOffset;
551 m_humidityOffsetSlider.Text = FormatOffset(m_worldSettings.HumidityOffset);
552 m_biomeSizeSlider.Value = FindNearestIndex(m_biomeSizes, m_worldSettings.BiomeSize);
553 m_biomeSizeSlider.Text = $"{m_worldSettings.BiomeSize}x";
554 m_terrainGeneratorVersionButtonPanel.IsVisible = !m_flatTerrainPanel.IsVisible;
555 if (m_flatTerrainPanel.IsVisible) {
556 m_worldSettings.OriginalSerializationVersion = VersionsManager.SerializationVersion;
557 }
558 m_terrainGeneratorVersionButton.Text = m_worldSettings.OriginalSerializationVersion;
559 m_environmentBehaviorButton.Text = LanguageControl.Get("EnvironmentBehaviorMode", m_worldSettings.EnvironmentBehaviorMode.ToString());
560 m_timeOfDayButton.Text = LanguageControl.Get("TimeOfDayMode", m_worldSettings.TimeOfDayMode.ToString());
561 m_areSeasonsChangingCheckBox.IsChecked = m_worldSettings.AreSeasonsChanging;
562 m_yearDaysSlider.Value = FindNearestIndex(m_yearDays, m_worldSettings.YearDays);
563 m_yearDaysSlider.Text = $"{m_worldSettings.YearDays}{LanguageControl.Get(fName, "8")}";
564 m_timeOfYearSlider.Value = m_worldSettings.TimeOfYear;
565 m_timeOfYearSlider.Text = $"{SubsystemSeasons.GetTimeOfYearName(m_worldSettings.TimeOfYear)}";
566 m_timeOfYearSlider.TextColor = SubsystemSeasons.GetTimeOfYearColor(m_worldSettings.TimeOfYear);
567 m_weatherEffectsButton.Text = m_worldSettings.AreWeatherEffectsEnabled ? LanguageControl.Enable : LanguageControl.Disable;
568 m_adventureRespawnButton.Text = m_worldSettings.IsAdventureRespawnAllowed ? LanguageControl.Allowed : LanguageControl.NAllowed;
569 m_adventureSurvivalMechanicsButton.Text = m_worldSettings.AreAdventureSurvivalMechanicsEnabled
570 ? LanguageControl.Enable
571 : LanguageControl.Disable;
572 m_supernaturalCreaturesButton.Text = m_worldSettings.AreSupernaturalCreaturesEnabled ? LanguageControl.Enable : LanguageControl.Disable;
573 m_friendlyFireButton.Text = m_worldSettings.IsFriendlyFireEnabled ? LanguageControl.Allowed : LanguageControl.NAllowed;
574 if (Input.Back
575 || Input.Cancel
576 || Children.Find<ButtonWidget>("TopBar.Back").IsClicked) {
577 ScreensManager.SwitchScreen(ScreensManager.PreviousScreen);
578 }
579 }
580
581 public static int FindNearestIndex(IList<float> list, float v) {
582 int num = 0;
583 for (int i = 0; i < list.Count; i++) {
584 if (MathF.Abs(list[i] - v) < MathF.Abs(list[num] - v)) {
585 num = i;
586 }
587 }
588 return num;
589 }
590 }
591}
virtual string GetDisplayName(SubsystemTerrain subsystemTerrain, int value)
readonly WidgetsList Children
static object Get(Type type, string name)
static void ShowDialog(ContainerWidget parentWidget, Dialog dialog)
static IList< int > GetEnumValues(Type type)
override string Text
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
static string GetString(string name)
static int MakeBlockValue(int contents)
virtual void LoadContents(object eventsTarget, XElement node)
Widget Find(string name, Type type, bool throwIfNotFound=true)
override void Enter(object[] parameters)
BlocksTexturesCache m_blockTexturesCache
CheckboxWidget m_flatTerrainMagmaOceanCheckbox
static string FormatOffset(float value)
static int FindNearestIndex(IList< float > list, float v)
static bool ForceEnableTerrainGeneratorVersionButton
static Dictionary< string, ModHook > ModHooks
模组调整世界设置的界面需要继承该接口
static readonly Vector2 Zero
static readonly Vector2 One