Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
ArrowLineWidget.cs
浏览该文件的文档.
1using Engine;
4
5namespace Game {
6 public class ArrowLineWidget : Widget {
7 public string m_pointsString;
8
9 public float m_width;
10
11 public float m_arrowWidth;
12
14
15 public List<Vector2> m_vertices = [];
16
17 public bool m_parsingPending;
18
20
21 public float Width {
22 get => m_width;
23 set {
24 m_width = value;
25 m_parsingPending = true;
26 }
27 }
28
29 public float ArrowWidth {
30 get => m_arrowWidth;
31 set {
32 m_arrowWidth = value;
33 m_parsingPending = true;
34 }
35 }
36
37 public Color Color { get; set; }
38
39 public string PointsString {
40 get => m_pointsString;
41 set {
42 m_pointsString = value;
43 m_parsingPending = true;
44 }
45 }
46
47 public bool AbsoluteCoordinates {
49 set {
51 m_parsingPending = true;
52 }
53 }
54
55 public ArrowLineWidget() {
56 Width = 6f;
57 ArrowWidth = 0f;
58 Color = Color.White;
59 IsHitTestVisible = false;
60 PointsString = "0, 0; 50, 0";
61 }
62
63 public override void Draw(DrawContext dc) {
64 if (m_parsingPending) {
66 }
69 int count = flatBatch2D.TriangleVertices.Count;
70 for (int i = 0; i < m_vertices.Count; i += 3) {
72 Vector2 p2 = m_startOffset + m_vertices[i + 1];
73 Vector2 p3 = m_startOffset + m_vertices[i + 2];
74 flatBatch2D.QueueTriangle(p, p2, p3, 0f, color);
75 }
76 flatBatch2D.TransformTriangles(GlobalTransform, count);
77 }
78
79 public override void MeasureOverride(Vector2 parentAvailableSize) {
80 if (m_parsingPending) {
82 }
83 IsDrawRequired = Color.A > 0 && Width > 0f;
84 }
85
86 public void ParsePoints() {
87 m_parsingPending = false;
88 List<Vector2> list = new();
89 string[] array = m_pointsString.Split([";"], StringSplitOptions.None);
90 foreach (string data in array) {
92 }
93 m_vertices.Clear();
94 for (int j = 0; j < list.Count; j++) {
95 if (j >= 1) {
96 Vector2 vector = list[j - 1];
97 Vector2 vector2 = list[j];
98 Vector2 vector3 = Vector2.Normalize(vector2 - vector);
99 Vector2 vector4 = vector3;
100 Vector2 v = vector3;
101 if (j >= 2) {
102 vector4 = Vector2.Normalize(vector - list[j - 2]);
103 }
104 if (j <= list.Count - 2) {
105 v = Vector2.Normalize(list[j + 1] - vector2);
106 }
107 Vector2 v2 = Vector2.Perpendicular(vector4);
108 Vector2 v3 = Vector2.Perpendicular(vector3);
109 float num = (float)Math.PI - Vector2.Angle(vector4, vector3);
110 float s = 0.5f * Width / MathF.Tan(num / 2f);
111 Vector2 v4 = 0.5f * v2 * Width - vector4 * s;
112 float num2 = (float)Math.PI - Vector2.Angle(vector3, v);
113 float s2 = 0.5f * Width / MathF.Tan(num2 / 2f);
114 Vector2 v5 = 0.5f * v3 * Width - vector3 * s2;
115 m_vertices.Add(vector + v4);
116 m_vertices.Add(vector - v4);
117 m_vertices.Add(vector2 - v5);
118 m_vertices.Add(vector2 - v5);
119 m_vertices.Add(vector2 + v5);
120 m_vertices.Add(vector + v4);
121 if (j == list.Count - 1) {
122 m_vertices.Add(vector2 - 0.5f * ArrowWidth * v3);
123 m_vertices.Add(vector2 + 0.5f * ArrowWidth * v3);
124 m_vertices.Add(vector2 + 0.5f * ArrowWidth * vector3);
125 }
126 }
127 }
128 if (m_vertices.Count > 0) {
129 float? num3 = null;
130 float? num4 = null;
131 float? num5 = null;
132 float? num6 = null;
133 for (int k = 0; k < m_vertices.Count; k++) {
134 if (!num3.HasValue
135 || m_vertices[k].X < num3) {
136 num3 = m_vertices[k].X;
137 }
138 if (!num4.HasValue
139 || m_vertices[k].Y < num4) {
140 num4 = m_vertices[k].Y;
141 }
142 if (!num5.HasValue
143 || m_vertices[k].X > num5) {
144 num5 = m_vertices[k].X;
145 }
146 if (!num6.HasValue
147 || m_vertices[k].Y > num6) {
148 num6 = m_vertices[k].Y;
149 }
150 }
152 DesiredSize = new Vector2(num5.Value, num6.Value);
154 }
155 else {
156 DesiredSize = new Vector2(num5.Value - num3.Value, num6.Value - num4.Value);
157 m_startOffset = -new Vector2(num3.Value, num4.Value);
158 }
159 }
160 else {
163 }
164 }
165 }
166}
readonly DynamicArray< VertexPositionColor > TriangleVertices
void TransformTriangles(Matrix matrix, int start=0, int end=-1)
static readonly DepthStencilState None
void QueueTriangle(Vector2 p1, Vector2 p2, Vector2 p3, float depth, Color color)
FlatBatch2D FlatBatch(int layer=0, DepthStencilState depthStencilState=null, RasterizerState rasterizerState=null, BlendState blendState=null)
static object ConvertFromString(Type type, string data)
override void MeasureOverride(Vector2 parentAvailableSize)
override void Draw(DrawContext dc)
readonly PrimitivesRenderer2D PrimitivesRenderer2D
Color GlobalColorTransform
Vector2 DesiredSize
bool IsDrawRequired
virtual bool IsHitTestVisible
Matrix GlobalTransform
static readonly Vector2 Zero
static Vector2 Normalize(Vector2 v)
static float Angle(Vector2 v1, Vector2 v2)
static Vector2 Perpendicular(Vector2 v)