Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
MessageWidget.cs
浏览该文件的文档.
1using System.Xml.Linq;
2using Engine;
4using Engine.Media;
5
6namespace Game {
8 public class Message {
10
11 public double StartTime;
12
13 public float Duration;
14
15 public Color Color;
16
17 public bool Blinking;
18
19 public Message(string text, Color color, bool blinking, float fontScale = 1f) {
21 Text = text,
22 Font = ContentManager.Get<BitmapFont>("Fonts/Pericles"),
23 FontScale = fontScale,
25 TextAnchor = TextAnchor.Center,
26 DropShadow = true,
27 WordWrap = true
28 };
30 Duration = blinking ? 6f : 4f + MathUtils.Min(1f * text.Count(c => c == '\n'), 4f);
31 Color = color;
32 Blinking = blinking;
33 }
34
35 public virtual void Update() {
36 float num;
37 if (Blinking) {
38 num = MathUtils.Saturate(1f * (float)(StartTime + Duration - Time.FrameStartTime));
39 if (Time.FrameStartTime - StartTime < 0.417) {
40 num *= MathUtils.Lerp(0.25f, 1f, 0.5f * (1f - MathF.Cos((float)Math.PI * 12f * (float)(Time.FrameStartTime - StartTime))));
41 }
42 }
43 else {
44 num = MathUtils.Saturate(
46 );
47 }
49 }
50 }
51
52 public const int MaxMessages = 3;
53
54 public DynamicArray<Message> m_messages = new();
55
56 public MessageWidget() {
57 XElement node = ContentManager.Get<XElement>("Widgets/MessageWidget");
58 LoadContents(this, node);
59 }
60
61 public void DisplayMessage(string text, Color color, bool blinking, float fontScale = 1f) {
62 if (!string.IsNullOrEmpty(text)) {
63 DisplayMessage(new Message(text, color, blinking, fontScale));
64 }
65 }
66
67 public void DisplayMessage(Message message) {
68 AddMessage(message);
70 }
71
72 public override void Update() {
73 for (int num = m_messages.Count - 1; num >= 0; num--) {
74 m_messages[num].Update();
75 }
77 }
78
79 public void AddMessage(Message message) {
80 m_messages.Add(message);
81 Children.Add(message.LabelWidget);
82 }
83
84 public void RemoveMessage(Message message) {
85 m_messages.Remove(message);
86 Children.Remove(message.LabelWidget);
87 }
88
89 public void RemoveOldMessages() {
90 for (int num = m_messages.Count - 1; num >= 0; num--) {
91 Message message = m_messages[num];
92 int num2 = m_messages.Count - num - 1;
93 if (Time.FrameStartTime >= message.StartTime + message.Duration
94 || num2 >= 3
95 || (num2 > 0 && !message.Blinking)) {
96 RemoveMessage(message);
97 }
98 }
99 }
100 }
101}
static int Min(int x1, int x2)
static float Saturate(float x)
static float Lerp(float x1, float x2, float f)
static double FrameStartTime
定义 Time.cs:42
readonly WidgetsList Children
static object Get(Type type, string name)
Message(string text, Color color, bool blinking, float fontScale=1f)
DynamicArray< Message > m_messages
void DisplayMessage(string text, Color color, bool blinking, float fontScale=1f)
void RemoveMessage(Message message)
void DisplayMessage(Message message)
void AddMessage(Message message)
virtual WidgetAlignment HorizontalAlignment
virtual void LoadContents(object eventsTarget, XElement node)