Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
BestiaryDescriptionScreen.cs
浏览该文件的文档.
1using System.Xml.Linq;
2using Engine;
4
5namespace Game {
17
18 public int m_index;
19 public IList<BestiaryCreatureInfo> m_infoList;
20 public const string fName = "BestiaryDescriptionScreen";
21
23 XElement node = ContentManager.Get<XElement>("Screens/BestiaryDescriptionScreen");
24 LoadContents(this, node);
25 m_modelWidget = Children.Find<ModelWidget>("Model");
26 m_nameWidget = Children.Find<LabelWidget>("Name");
29 m_descriptionWidget = Children.Find<LabelWidget>("Description");
30 m_propertyNames1Widget = Children.Find<LabelWidget>("PropertyNames1");
31 m_propertyValues1Widget = Children.Find<LabelWidget>("PropertyValues1");
32 m_propertyNames2Widget = Children.Find<LabelWidget>("PropertyNames2");
33 m_propertyValues2Widget = Children.Find<LabelWidget>("PropertyValues2");
34 m_dropsPanel = Children.Find<ContainerWidget>("Drops");
35 }
36
37 public override void Enter(object[] parameters) {
38 BestiaryCreatureInfo item = (BestiaryCreatureInfo)parameters[0];
39 m_infoList = (IList<BestiaryCreatureInfo>)parameters[1];
40 m_index = m_infoList.IndexOf(item);
42 }
43
44 public override void Update() {
45 m_leftButtonWidget.IsEnabled = m_index > 0;
46 m_rightButtonWidget.IsEnabled = m_index < m_infoList.Count - 1;
47 if (m_leftButtonWidget.IsClicked
48 || Input.Left) {
49 m_index = Math.Max(m_index - 1, 0);
51 }
52 if (m_rightButtonWidget.IsClicked
53 || Input.Right) {
54 m_index = Math.Min(m_index + 1, m_infoList.Count - 1);
56 }
57 if (Input.Back
58 || Input.Cancel
59 || Children.Find<ButtonWidget>("TopBar.Back").IsClicked) {
61 }
62 }
63
64 public virtual void UpdateCreatureProperties() {
65 if (m_index >= 0
66 && m_index < m_infoList.Count) {
67 BestiaryCreatureInfo bestiaryCreatureInfo = m_infoList[m_index];
68 m_modelWidget.AutoRotationVector = new Vector3(0f, 1f, 0f);
69 BestiaryScreen.SetupBestiaryModelWidget(bestiaryCreatureInfo, m_modelWidget, new Vector3(-1f, 0f, -1f), true, true);
70 m_nameWidget.Text = bestiaryCreatureInfo.DisplayName;
71 m_descriptionWidget.Text = bestiaryCreatureInfo.Description;
72 m_propertyNames1Widget.Text = string.Empty;
73 m_propertyValues1Widget.Text = string.Empty;
74 m_propertyNames1Widget.Text += LanguageControl.Get(fName, "resilience");
75 LabelWidget propertyValues1Widget = m_propertyValues1Widget;
76 propertyValues1Widget.Text = $"{propertyValues1Widget.Text}{bestiaryCreatureInfo.AttackResilience}\n";
77 m_propertyNames1Widget.Text += LanguageControl.Get(fName, "attack");
78 LabelWidget propertyValues1Widget2 = m_propertyValues1Widget;
79 propertyValues1Widget2.Text =
80 $"{propertyValues1Widget2.Text}{(bestiaryCreatureInfo.AttackPower > 0f ? bestiaryCreatureInfo.AttackPower.ToString("0.0") : LanguageControl.None)}\n";
81 m_propertyNames1Widget.Text += LanguageControl.Get(fName, "herding");
82 LabelWidget propertyValues1Widget3 = m_propertyValues1Widget;
83 propertyValues1Widget3.Text =
84 $"{propertyValues1Widget3.Text}{(bestiaryCreatureInfo.IsHerding ? LanguageControl.Yes : LanguageControl.No)}\n";
85 m_propertyNames1Widget.Text += LanguageControl.Get(fName, 1);
86 LabelWidget propertyValues1Widget4 = m_propertyValues1Widget;
87 propertyValues1Widget4.Text =
88 $"{propertyValues1Widget4.Text}{(bestiaryCreatureInfo.CanBeRidden ? LanguageControl.Yes : LanguageControl.No)}\n";
89 m_propertyNames1Widget.Text = m_propertyNames1Widget.Text.TrimEnd();
90 m_propertyValues1Widget.Text = m_propertyValues1Widget.Text.TrimEnd();
91 m_propertyNames2Widget.Text = string.Empty;
92 m_propertyValues2Widget.Text = string.Empty;
93 m_propertyNames2Widget.Text += LanguageControl.Get(fName, "speed");
94 LabelWidget propertyValues2Widget = m_propertyValues2Widget;
95 propertyValues2Widget.Text = propertyValues2Widget.Text
96 + (bestiaryCreatureInfo.MovementSpeed * 3.6).ToString("0")
97 + LanguageControl.Get(fName, "speed unit");
98 m_propertyNames2Widget.Text += LanguageControl.Get(fName, "jump height");
99 LabelWidget propertyValues2Widget2 = m_propertyValues2Widget;
100 propertyValues2Widget2.Text = propertyValues2Widget2.Text
101 + bestiaryCreatureInfo.JumpHeight.ToString("0.0")
102 + LanguageControl.Get(fName, "length unit");
103 m_propertyNames2Widget.Text += LanguageControl.Get(fName, "weight");
104 LabelWidget propertyValues2Widget3 = m_propertyValues2Widget;
105 propertyValues2Widget3.Text = propertyValues2Widget3.Text
106 + bestiaryCreatureInfo.Mass
107 + LanguageControl.Get(fName, "weight unit");
108 m_propertyNames2Widget.Text += $"{LanguageControl.Get("BlocksManager", "Spawner Eggs")}:";
109 LabelWidget propertyValues2Widget4 = m_propertyValues2Widget;
110 propertyValues2Widget4.Text =
111 $"{propertyValues2Widget4.Text}{(bestiaryCreatureInfo.HasSpawnerEgg ? LanguageControl.Exists : LanguageControl.None)}\n";
112 m_propertyNames2Widget.Text = m_propertyNames2Widget.Text.TrimEnd();
113 m_propertyValues2Widget.Text = m_propertyValues2Widget.Text.TrimEnd();
114 m_dropsPanel.Children.Clear();
116 bestiaryCreatureInfo.EntityValuesDictionary,
117 typeof(ComponentLoot)
118 );
119 if (valuesDictionaryLoot != null) {
120 bestiaryCreatureInfo.Loot = ComponentLoot.ParseLootList(valuesDictionaryLoot.GetValue<ValuesDictionary>("Loot"));
121 }
122 if (bestiaryCreatureInfo.Loot.Count > 0) {
123 foreach (ComponentLoot.Loot item in bestiaryCreatureInfo.Loot) {
124 if (item.MaxCount == 0
125 || item.Probability == 0) {
126 continue;
127 }
128 string text = item.MinCount >= item.MaxCount
129 ? $"{item.MinCount}"
130 : string.Format(LanguageControl.Get(fName, "range"), item.MinCount, item.MaxCount);
131 if (item.Probability < 1f) {
132 text += string.Format(LanguageControl.Get(fName, 2), $"{item.Probability * 100f:0}");
133 }
134 m_dropsPanel.Children.Add(
135 new StackPanelWidget {
136 Margin = new Vector2(20f, 0f),
137 Children = {
138 new BlockIconWidget {
139 Size = new Vector2(32f), Scale = 1.2f, VerticalAlignment = WidgetAlignment.Center, Value = item.Value
140 },
141 new CanvasWidget { Size = new Vector2(10f, 0f) },
142 new LabelWidget { VerticalAlignment = WidgetAlignment.Center, Text = text }
143 }
144 }
145 );
146 }
147 }
148 else {
149 m_dropsPanel.Children.Add(new LabelWidget { Margin = new Vector2(20f, 0f), Text = LanguageControl.Nothing });
150 }
152 "UpdateCreaturePropertiesInBestiaryDescriptionScreen",
153 loader => {
154 loader.UpdateCreaturePropertiesInBestiaryDescriptionScreen(
155 this,
156 bestiaryCreatureInfo,
157 bestiaryCreatureInfo.EntityValuesDictionary
158 );
159 return false;
160 }
161 );
162 }
163 }
164 }
165}
Engine.Vector3 Vector3
List< ComponentLoot.Loot > Loot
override void Enter(object[] parameters)
static void SetupBestiaryModelWidget(BestiaryCreatureInfo info, ModelWidget modelWidget, Vector3 offset, bool autoRotate, bool autoAspect)
static List< Loot > ParseLootList(ValuesDictionary lootVd)
readonly WidgetsList Children
static object Get(Type type, string name)
static ValuesDictionary FindValuesDictionaryForComponent(ValuesDictionary entityVd, Type componentType)
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
static Screen PreviousScreen
上一个Screen
static void SwitchScreen(string name, params object[] parameters)
virtual WidgetAlignment VerticalAlignment
virtual Vector2 Margin
virtual void LoadContents(object eventsTarget, XElement node)
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook