Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
FireBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public class FireBlock : Block {
6 public static int Index = 104;
7
8 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
9 TerrainGeometrySubset[] alphaTestSubsetsByFace = geometry.AlphaTestSubsetsByFace;
10 int data = Terrain.ExtractData(value);
11 int value2 = y + 1 < TerrainChunk.Height ? generator.Terrain.GetCellValueFast(x, y + 1, z) : 0;
12 int num = Terrain.ExtractContents(value2);
13 int data2 = Terrain.ExtractData(value2);
14 int value3 = y + 2 < TerrainChunk.Height ? generator.Terrain.GetCellValueFast(x, y + 2, z) : 0;
15 int num2 = Terrain.ExtractContents(value3);
16 int data3 = Terrain.ExtractData(value3);
17 if (HasFireOnFace(data, 0)) {
18 int value4 = y + 1 < TerrainChunk.Height ? generator.Terrain.GetCellValueFast(x, y + 1, z + 1) : 0;
19 int num3 = Terrain.ExtractContents(value4);
20 int data4 = Terrain.ExtractData(value4);
21 int value5 = y + 2 < TerrainChunk.Height ? generator.Terrain.GetCellValueFast(x, y + 2, z + 1) : 0;
22 int num4 = Terrain.ExtractContents(value5);
23 int data5 = Terrain.ExtractData(value5);
24 int num5 = DefaultTextureSlot;
25 if ((num == 104 && HasFireOnFace(data2, 0))
26 || (num3 == 104 && HasFireOnFace(data4, 2))) {
27 num5 += 16;
28 if ((num2 == 104 && HasFireOnFace(data3, 0))
29 || (num4 == 104 && HasFireOnFace(data5, 2))) {
30 num5 += 16;
31 }
32 }
33 DynamicArray<TerrainVertex> vertices = alphaTestSubsetsByFace[0].Vertices;
34 TerrainGeometryDynamicArray<int> indices = alphaTestSubsetsByFace[0].Indices;
35 int count = vertices.Count;
36 vertices.Count += 4;
38 x,
39 y,
40 z + 1,
42 num5,
43 0,
44 ref vertices.Array[count]
45 );
47 x + 1,
48 y,
49 z + 1,
51 num5,
52 1,
53 ref vertices.Array[count + 1]
54 );
56 x + 1,
57 y + 1,
58 z + 1,
60 num5,
61 2,
62 ref vertices.Array[count + 2]
63 );
65 x,
66 y + 1,
67 z + 1,
69 num5,
70 3,
71 ref vertices.Array[count + 3]
72 );
73 indices.Add(count);
74 indices.Add(count + 1);
75 indices.Add(count + 2);
76 indices.Add(count + 2);
77 indices.Add(count + 1);
78 indices.Add(count);
79 indices.Add(count + 2);
80 indices.Add(count + 3);
81 indices.Add(count);
82 indices.Add(count);
83 indices.Add(count + 3);
84 indices.Add(count + 2);
85 }
86 if (HasFireOnFace(data, 1)) {
87 int value6 = y + 1 < TerrainChunk.Height ? generator.Terrain.GetCellValueFast(x + 1, y + 1, z) : 0;
88 int num6 = Terrain.ExtractContents(value6);
89 int data6 = Terrain.ExtractData(value6);
90 int value7 = y + 2 < TerrainChunk.Height ? generator.Terrain.GetCellValueFast(x + 1, y + 2, z) : 0;
91 int num7 = Terrain.ExtractContents(value7);
92 int data7 = Terrain.ExtractData(value7);
93 int num8 = DefaultTextureSlot;
94 if ((num == 104 && HasFireOnFace(data2, 1))
95 || (num6 == 104 && HasFireOnFace(data6, 3))) {
96 num8 += 16;
97 if ((num2 == 104 && HasFireOnFace(data3, 1))
98 || (num7 == 104 && HasFireOnFace(data7, 3))) {
99 num8 += 16;
100 }
101 }
102 DynamicArray<TerrainVertex> vertices2 = alphaTestSubsetsByFace[1].Vertices;
103 TerrainGeometryDynamicArray<int> indices2 = alphaTestSubsetsByFace[1].Indices;
104 int count2 = vertices2.Count;
105 vertices2.Count += 4;
107 x + 1,
108 y,
109 z,
110 Color.White,
111 num8,
112 0,
113 ref vertices2.Array[count2]
114 );
116 x + 1,
117 y + 1,
118 z,
119 Color.White,
120 num8,
121 3,
122 ref vertices2.Array[count2 + 1]
123 );
125 x + 1,
126 y + 1,
127 z + 1,
128 Color.White,
129 num8,
130 2,
131 ref vertices2.Array[count2 + 2]
132 );
134 x + 1,
135 y,
136 z + 1,
137 Color.White,
138 num8,
139 1,
140 ref vertices2.Array[count2 + 3]
141 );
142 indices2.Add(count2);
143 indices2.Add(count2 + 1);
144 indices2.Add(count2 + 2);
145 indices2.Add(count2 + 2);
146 indices2.Add(count2 + 1);
147 indices2.Add(count2);
148 indices2.Add(count2 + 2);
149 indices2.Add(count2 + 3);
150 indices2.Add(count2);
151 indices2.Add(count2);
152 indices2.Add(count2 + 3);
153 indices2.Add(count2 + 2);
154 }
155 if (HasFireOnFace(data, 2)) {
156 int value8 = y + 1 < TerrainChunk.Height ? generator.Terrain.GetCellValueFast(x, y + 1, z - 1) : 0;
157 int num9 = Terrain.ExtractContents(value8);
158 int data8 = Terrain.ExtractData(value8);
159 int value9 = y + 2 < TerrainChunk.Height ? generator.Terrain.GetCellValueFast(x, y + 2, z - 1) : 0;
160 int num10 = Terrain.ExtractContents(value9);
161 int data9 = Terrain.ExtractData(value9);
162 int num11 = DefaultTextureSlot;
163 if ((num == 104 && HasFireOnFace(data2, 2))
164 || (num9 == 104 && HasFireOnFace(data8, 0))) {
165 num11 += 16;
166 if ((num2 == 104 && HasFireOnFace(data3, 2))
167 || (num10 == 104 && HasFireOnFace(data9, 0))) {
168 num11 += 16;
169 }
170 }
171 DynamicArray<TerrainVertex> vertices3 = alphaTestSubsetsByFace[2].Vertices;
172 TerrainGeometryDynamicArray<int> indices3 = alphaTestSubsetsByFace[2].Indices;
173 int count3 = vertices3.Count;
174 vertices3.Count += 4;
176 x,
177 y,
178 z,
179 Color.White,
180 num11,
181 0,
182 ref vertices3.Array[count3]
183 );
185 x + 1,
186 y,
187 z,
188 Color.White,
189 num11,
190 1,
191 ref vertices3.Array[count3 + 1]
192 );
194 x + 1,
195 y + 1,
196 z,
197 Color.White,
198 num11,
199 2,
200 ref vertices3.Array[count3 + 2]
201 );
203 x,
204 y + 1,
205 z,
206 Color.White,
207 num11,
208 3,
209 ref vertices3.Array[count3 + 3]
210 );
211 indices3.Add(count3);
212 indices3.Add(count3 + 2);
213 indices3.Add(count3 + 1);
214 indices3.Add(count3 + 1);
215 indices3.Add(count3 + 2);
216 indices3.Add(count3);
217 indices3.Add(count3 + 2);
218 indices3.Add(count3);
219 indices3.Add(count3 + 3);
220 indices3.Add(count3 + 3);
221 indices3.Add(count3);
222 indices3.Add(count3 + 2);
223 }
224 if (!HasFireOnFace(data, 3)) {
225 return;
226 }
227 int value10 = y + 1 < TerrainChunk.Height ? generator.Terrain.GetCellValueFast(x - 1, y + 1, z) : 0;
228 int num12 = Terrain.ExtractContents(value10);
229 int data10 = Terrain.ExtractData(value10);
230 int value11 = y + 2 < TerrainChunk.Height ? generator.Terrain.GetCellValueFast(x - 1, y + 2, z) : 0;
231 int num13 = Terrain.ExtractContents(value11);
232 int data11 = Terrain.ExtractData(value11);
233 int num14 = DefaultTextureSlot;
234 if ((num == 104 && HasFireOnFace(data2, 3))
235 || (num12 == 104 && HasFireOnFace(data10, 1))) {
236 num14 += 16;
237 if ((num2 == 104 && HasFireOnFace(data3, 3))
238 || (num13 == 104 && HasFireOnFace(data11, 1))) {
239 num14 += 16;
240 }
241 }
242 DynamicArray<TerrainVertex> vertices4 = alphaTestSubsetsByFace[3].Vertices;
243 TerrainGeometryDynamicArray<int> indices4 = alphaTestSubsetsByFace[3].Indices;
244 int count4 = vertices4.Count;
245 vertices4.Count += 4;
247 x,
248 y,
249 z,
250 Color.White,
251 num14,
252 0,
253 ref vertices4.Array[count4]
254 );
256 x,
257 y + 1,
258 z,
259 Color.White,
260 num14,
261 3,
262 ref vertices4.Array[count4 + 1]
263 );
265 x,
266 y + 1,
267 z + 1,
268 Color.White,
269 num14,
270 2,
271 ref vertices4.Array[count4 + 2]
272 );
274 x,
275 y,
276 z + 1,
277 Color.White,
278 num14,
279 1,
280 ref vertices4.Array[count4 + 3]
281 );
282 indices4.Add(count4);
283 indices4.Add(count4 + 2);
284 indices4.Add(count4 + 1);
285 indices4.Add(count4 + 1);
286 indices4.Add(count4 + 2);
287 indices4.Add(count4);
288 indices4.Add(count4 + 2);
289 indices4.Add(count4);
290 indices4.Add(count4 + 3);
291 indices4.Add(count4 + 3);
292 indices4.Add(count4);
293 indices4.Add(count4 + 2);
294 }
295
296 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
297 int value,
298 Color color,
299 float size,
300 ref Matrix matrix,
301 DrawBlockEnvironmentData environmentData) { }
302
303 public override bool ShouldAvoid(int value) => true;
304
305 public static bool HasFireOnFace(int data, int face) {
306 if (data == 0) {
307 return true;
308 }
309 if ((data & (1 << face)) != 0) {
310 return true;
311 }
312 return false;
313 }
314 }
315}
static void SetupLitCornerVertex(float x, float y, float z, Color color, int textureSlot, int corner, ref TerrainVertex vertex)
int DefaultTextureSlot
static int Index
static bool HasFireOnFace(int data, int face)
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
override bool ShouldAvoid(int value)
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
TerrainGeometrySubset[] AlphaTestSubsetsByFace
TerrainGeometryDynamicArray< TerrainVertex > Vertices
TerrainGeometryDynamicArray< int > Indices
static int ExtractContents(int value)
virtual int GetCellValueFast(int x, int y, int z)
static int ExtractData(int value)
static Color White