Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
TargetBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
6 public static int Index = 199;
7
9 new BoundingBox[]
10 [] { [
11 new BoundingBox(new Vector3(0f, 0f, 0f), new Vector3(1f, 1f, 0.0625f))
12 ], [new BoundingBox(new Vector3(0f, 0f, 0f), new Vector3(0.0625f, 1f, 1f))], [
13 new BoundingBox(new Vector3(0f, 0f, 0.9375f), new Vector3(1f, 1f, 1f))
14 ], [new BoundingBox(new Vector3(0.9375f, 0f, 0f), new Vector3(1f, 1f, 1f))]
15 };
16
17 public override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value) {
18 int mountingFace = GetMountingFace(Terrain.ExtractData(value));
19 if (mountingFace >= 0
20 && mountingFace < 4) {
21 return m_boundingBoxes[mountingFace];
22 }
23 return base.GetCustomCollisionBoxes(terrain, value);
24 }
25
26 public override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain,
27 ComponentMiner componentMiner,
28 int value,
29 TerrainRaycastResult raycastResult) {
30 BlockPlacementData result = default;
31 if (raycastResult.CellFace.Face < 4) {
32 result.CellFace = raycastResult.CellFace;
33 result.Value = Terrain.MakeBlockValue(199, 0, SetMountingFace(0, raycastResult.CellFace.Face));
34 }
35 return result;
36 }
37
38 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
39 TerrainGeometrySubset subsetAlphaTest = geometry.SubsetAlphaTest;
40 DynamicArray<TerrainVertex> vertices = subsetAlphaTest.Vertices;
41 TerrainGeometryDynamicArray<int> indices = subsetAlphaTest.Indices;
42 int count = vertices.Count;
43 int data = Terrain.ExtractData(value);
44 int num = Terrain.ExtractLight(value);
45 int mountingFace = GetMountingFace(data);
46 float s = LightingManager.LightIntensityByLightValueAndFace[num + 16 * mountingFace];
48 switch (mountingFace) {
49 case 2:
50 vertices.Count += 4;
52 x,
53 y,
54 z + 1,
55 color,
57 0,
58 ref vertices.Array[count]
59 );
61 x + 1,
62 y,
63 z + 1,
64 color,
66 1,
67 ref vertices.Array[count + 1]
68 );
70 x + 1,
71 y + 1,
72 z + 1,
73 color,
75 2,
76 ref vertices.Array[count + 2]
77 );
79 x,
80 y + 1,
81 z + 1,
82 color,
84 3,
85 ref vertices.Array[count + 3]
86 );
87 indices.Add(count);
88 indices.Add(count + 1);
89 indices.Add(count + 2);
90 indices.Add(count + 2);
91 indices.Add(count + 1);
92 indices.Add(count);
93 indices.Add(count + 2);
94 indices.Add(count + 3);
95 indices.Add(count);
96 indices.Add(count);
97 indices.Add(count + 3);
98 indices.Add(count + 2);
99 break;
100 case 3:
101 vertices.Count += 4;
103 x + 1,
104 y,
105 z,
106 color,
108 0,
109 ref vertices.Array[count]
110 );
112 x + 1,
113 y + 1,
114 z,
115 color,
117 3,
118 ref vertices.Array[count + 1]
119 );
121 x + 1,
122 y + 1,
123 z + 1,
124 color,
126 2,
127 ref vertices.Array[count + 2]
128 );
130 x + 1,
131 y,
132 z + 1,
133 color,
135 1,
136 ref vertices.Array[count + 3]
137 );
138 indices.Add(count);
139 indices.Add(count + 1);
140 indices.Add(count + 2);
141 indices.Add(count + 2);
142 indices.Add(count + 1);
143 indices.Add(count);
144 indices.Add(count + 2);
145 indices.Add(count + 3);
146 indices.Add(count);
147 indices.Add(count);
148 indices.Add(count + 3);
149 indices.Add(count + 2);
150 break;
151 case 0:
152 vertices.Count += 4;
154 x,
155 y,
156 z,
157 color,
159 0,
160 ref vertices.Array[count]
161 );
163 x + 1,
164 y,
165 z,
166 color,
168 1,
169 ref vertices.Array[count + 1]
170 );
172 x + 1,
173 y + 1,
174 z,
175 color,
177 2,
178 ref vertices.Array[count + 2]
179 );
181 x,
182 y + 1,
183 z,
184 color,
186 3,
187 ref vertices.Array[count + 3]
188 );
189 indices.Add(count);
190 indices.Add(count + 2);
191 indices.Add(count + 1);
192 indices.Add(count + 1);
193 indices.Add(count + 2);
194 indices.Add(count);
195 indices.Add(count + 2);
196 indices.Add(count);
197 indices.Add(count + 3);
198 indices.Add(count + 3);
199 indices.Add(count);
200 indices.Add(count + 2);
201 break;
202 case 1:
203 vertices.Count += 4;
205 x,
206 y,
207 z,
208 color,
210 0,
211 ref vertices.Array[count]
212 );
214 x,
215 y + 1,
216 z,
217 color,
219 3,
220 ref vertices.Array[count + 1]
221 );
223 x,
224 y + 1,
225 z + 1,
226 color,
228 2,
229 ref vertices.Array[count + 2]
230 );
232 x,
233 y,
234 z + 1,
235 color,
237 1,
238 ref vertices.Array[count + 3]
239 );
240 indices.Add(count);
241 indices.Add(count + 2);
242 indices.Add(count + 1);
243 indices.Add(count + 1);
244 indices.Add(count + 2);
245 indices.Add(count);
246 indices.Add(count + 2);
247 indices.Add(count);
248 indices.Add(count + 3);
249 indices.Add(count + 3);
250 indices.Add(count);
251 indices.Add(count + 2);
252 break;
253 }
254 }
255
256 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
257 int value,
258 Color color,
259 float size,
260 ref Matrix matrix,
261 DrawBlockEnvironmentData environmentData) {
263 primitivesRenderer,
264 value,
265 size,
266 ref matrix,
267 null,
268 color,
269 false,
270 environmentData
271 );
272 }
273
274 public static int GetMountingFace(int data) => data & 3;
275
276 public static int SetMountingFace(int data, int face) => (data & -4) | (face & 3);
277
278 public override int GetFace(int value) => GetMountingFace(Terrain.ExtractData(value));
279
280 public override ElectricElement CreateElectricElement(SubsystemElectricity subsystemElectricity, int value, int x, int y, int z) =>
281 new TargetElectricElement(subsystemElectricity, new CellFace(x, y, z, GetFace(value)));
282
284 int value,
285 int face,
286 int connectorFace,
287 int x,
288 int y,
289 int z) {
290 int face2 = GetFace(value);
291 if (face == face2
292 && SubsystemElectricity.GetConnectorDirection(face2, 0, connectorFace).HasValue) {
293 return ElectricConnectorType.Output;
294 }
295 return null;
296 }
297 }
298}
Engine.Vector3 Vector3
static void SetupLitCornerVertex(float x, float y, float z, Color color, int textureSlot, int corner, ref TerrainVertex vertex)
int DefaultTextureSlot
static void DrawFlatOrImageExtrusionBlock(PrimitivesRenderer3D primitivesRenderer, int value, float size, ref Matrix matrix, Texture2D texture, Color color, bool isEmissive, DrawBlockEnvironmentData environmentData)
static readonly float[] LightIntensityByLightValueAndFace
static ? ElectricConnectorDirection GetConnectorDirection(int mountingFace, int rotation, int connectorFace)
static int SetMountingFace(int data, int face)
BoundingBox[][] m_boundingBoxes
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value)
override ElectricElement CreateElectricElement(SubsystemElectricity subsystemElectricity, int value, int x, int y, int z)
override int GetFace(int value)
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
static int GetMountingFace(int data)
override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain, ComponentMiner componentMiner, int value, TerrainRaycastResult raycastResult)
方块放置方向
override? ElectricConnectorType GetConnectorType(SubsystemTerrain terrain, int value, int face, int connectorFace, int x, int y, int z)
TerrainGeometrySubset SubsetAlphaTest
TerrainGeometryDynamicArray< TerrainVertex > Vertices
TerrainGeometryDynamicArray< int > Indices
static int ExtractLight(int value)
static int MakeBlockValue(int contents)
static int ExtractData(int value)
static Color White
static Color MultiplyColorOnly(Color c, float s)