Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
DialogsManager.cs
浏览该文件的文档.
1using Engine;
2
3namespace Game {
4 public static class DialogsManager {
5 public class CoverWidget : RectangleWidget { }
6
7 public class AnimationData {
8 public float Factor;
9
10 public int Direction;
11
12 public CoverWidget CoverWidget = new() { OutlineColor = Color.Transparent, FillColor = new Color(0, 0, 0, 192), IsHitTestVisible = true };
13 }
14
15 public static Dictionary<Dialog, AnimationData> m_animationData = [];
16
17 public static List<Dialog> m_dialogs = [];
18
19 public static List<Dialog> m_toRemove = [];
20
21 public static ReadOnlyList<Dialog> Dialogs => new(m_dialogs);
22
23 public static bool HasDialogs(Widget parentWidget) {
24 if (parentWidget == null) {
26 }
27 foreach (Dialog dialog in m_dialogs) {
28 if (dialog.ParentWidget == parentWidget) {
29 return true;
30 }
31 }
32 return false;
33 }
34
35 public static void ShowDialog(ContainerWidget parentWidget, Dialog dialog) {
37 delegate {
38 if (!m_dialogs.Contains(dialog)) {
39 if (parentWidget == null) {
41 }
42 dialog.WidgetsHierarchyInput = null;
43 m_dialogs.Add(dialog);
44 AnimationData animationData = new() { Direction = 1 };
45 m_animationData[dialog] = animationData;
46 parentWidget.Children.Add(animationData.CoverWidget);
47 if (dialog.ParentWidget != null) {
48 dialog.ParentWidget.Children.Remove(dialog);
49 }
50 parentWidget.Children.Add(dialog);
51 UpdateDialog(dialog, animationData);
52 dialog.Input.Clear();
53 }
54 }
55 );
56 }
57
58 public static void HideDialog(Dialog dialog) {
60 delegate {
61 if (m_dialogs.Contains(dialog)) {
62 dialog.ParentWidget.Input.Clear();
63 dialog.WidgetsHierarchyInput = new WidgetInput(WidgetInputDevice.None);
64 m_dialogs.Remove(dialog);
65 m_animationData[dialog].Direction = -1;
66 }
67 }
68 );
69 }
70
71 public static void HideAllDialogs() {
72 Dialog[] array = m_dialogs.ToArray();
73 for (int i = 0; i < array.Length; i++) {
74 HideDialog(array[i]);
75 }
76 }
77
78 public static void Update() {
79 foreach (KeyValuePair<Dialog, AnimationData> animationDatum in m_animationData) {
80 Dialog key = animationDatum.Key;
81 AnimationData value = animationDatum.Value;
82 if (value.Direction > 0) {
83 value.Factor = MathUtils.Min(value.Factor + 6f * Time.FrameDuration, 1f);
84 }
85 else if (value.Direction < 0) {
86 value.Factor = MathUtils.Max(value.Factor - 6f * Time.FrameDuration, 0f);
87 if (value.Factor <= 0f) {
88 m_toRemove.Add(key);
89 }
90 }
91 UpdateDialog(key, value);
92 }
93 foreach (Dialog item in m_toRemove) {
94 AnimationData animationData = m_animationData[item];
95 m_animationData.Remove(item);
96 item.ParentWidget.Children.Remove(item);
97 animationData.CoverWidget.ParentWidget.Children.Remove(animationData.CoverWidget);
98 }
99 m_toRemove.Clear();
100 }
101
102 public static void UpdateDialog(Dialog dialog, AnimationData animationData) {
103 if (animationData.Factor < 1f) {
104 float factor = animationData.Factor;
105 float num = 0.75f + 0.25f * MathF.Pow(animationData.Factor, 0.25f);
106 dialog.RenderTransform = Matrix.CreateTranslation((0f - dialog.ActualSize.X) / 2f, (0f - dialog.ActualSize.Y) / 2f, 0f)
107 * Matrix.CreateScale(num, num, 1f)
108 * Matrix.CreateTranslation(dialog.ActualSize.X / 2f, dialog.ActualSize.Y / 2f, 0f);
109 dialog.ColorTransform = Color.White * factor;
110 animationData.CoverWidget.ColorTransform = Color.White * factor;
111 }
112 else {
113 dialog.RenderTransform = Matrix.Identity;
114 dialog.ColorTransform = Color.White;
115 animationData.CoverWidget.ColorTransform = Color.White;
116 }
117 }
118 }
119}
Engine.Color Color
static void Dispatch(Action action, bool waitUntilCompleted=false)
static int Min(int x1, int x2)
static int Max(int x1, int x2)
static float FrameDuration
定义 Time.cs:46
readonly WidgetsList Children
static void HideDialog(Dialog dialog)
static bool HasDialogs(Widget parentWidget)
static Dictionary< Dialog, AnimationData > m_animationData
static void UpdateDialog(Dialog dialog, AnimationData animationData)
static List< Dialog > m_toRemove
static List< Dialog > m_dialogs
static ReadOnlyList< Dialog > Dialogs
static void ShowDialog(ContainerWidget parentWidget, Dialog dialog)
static ContainerWidget RootWidget
WidgetInput Input
ContainerWidget ParentWidget
Vector2 ActualSize
void Add(Widget widget)
void Remove(Widget widget)
static Color Transparent
定义 Color.cs:5
static Color White
static Matrix CreateTranslation(float x, float y, float z)
static readonly Matrix Identity
static Matrix CreateScale(float scale)