Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
TorchBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public class TorchBlock : Block {
6 public static int Index = 31;
7
9
11
13
15
16 public override void Initialize() {
17 for (int i = 0; i < m_blockMeshesByVariant.Length; i++) {
19 }
20 Model model = ContentManager.Get<Model>("Models/Torch");
21 Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Torch").ParentBone);
22 Matrix boneAbsoluteTransform2 = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Flame").ParentBone);
23 Matrix m = Matrix.CreateRotationX(0.6f) * Matrix.CreateRotationY(0f) * Matrix.CreateTranslation(0.5f, 0.15f, -0.05f);
25 .AppendModelMeshPart(
26 model.FindMesh("Torch").MeshParts[0],
27 boneAbsoluteTransform * m,
28 false,
29 false,
30 false,
31 false,
33 );
35 .AppendModelMeshPart(
36 model.FindMesh("Flame").MeshParts[0],
37 boneAbsoluteTransform2 * m,
38 true,
39 false,
40 false,
41 false,
43 );
44 m = Matrix.CreateRotationX(0.6f) * Matrix.CreateRotationY((float)Math.PI / 2f) * Matrix.CreateTranslation(-0.05f, 0.15f, 0.5f);
46 .AppendModelMeshPart(
47 model.FindMesh("Torch").MeshParts[0],
48 boneAbsoluteTransform * m,
49 false,
50 false,
51 false,
52 false,
54 );
56 .AppendModelMeshPart(
57 model.FindMesh("Flame").MeshParts[0],
58 boneAbsoluteTransform2 * m,
59 true,
60 false,
61 false,
62 false,
64 );
65 m = Matrix.CreateRotationX(0.6f) * Matrix.CreateRotationY((float)Math.PI) * Matrix.CreateTranslation(0.5f, 0.15f, 1.05f);
67 .AppendModelMeshPart(
68 model.FindMesh("Torch").MeshParts[0],
69 boneAbsoluteTransform * m,
70 false,
71 false,
72 false,
73 false,
75 );
77 .AppendModelMeshPart(
78 model.FindMesh("Flame").MeshParts[0],
79 boneAbsoluteTransform2 * m,
80 true,
81 false,
82 false,
83 false,
85 );
86 m = Matrix.CreateRotationX(0.6f) * Matrix.CreateRotationY(4.712389f) * Matrix.CreateTranslation(1.05f, 0.15f, 0.5f);
88 .AppendModelMeshPart(
89 model.FindMesh("Torch").MeshParts[0],
90 boneAbsoluteTransform * m,
91 false,
92 false,
93 false,
94 false,
96 );
98 .AppendModelMeshPart(
99 model.FindMesh("Flame").MeshParts[0],
100 boneAbsoluteTransform2 * m,
101 true,
102 false,
103 false,
104 false,
106 );
107 m = Matrix.CreateTranslation(0.5f, 0f, 0.5f);
109 .AppendModelMeshPart(
110 model.FindMesh("Torch").MeshParts[0],
111 boneAbsoluteTransform * m,
112 false,
113 false,
114 false,
115 false,
117 );
119 .AppendModelMeshPart(
120 model.FindMesh("Flame").MeshParts[0],
121 boneAbsoluteTransform2 * m,
122 true,
123 false,
124 false,
125 false,
127 );
128 m_standaloneBlockMesh.AppendModelMeshPart(
129 model.FindMesh("Torch").MeshParts[0],
130 boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.25f, 0f),
131 false,
132 false,
133 false,
134 false,
136 );
137 for (int j = 0; j < 5; j++) {
138 m_collisionBoxes[j] = [m_blockMeshesByVariant[j].CalculateBoundingBox()];
139 }
140 base.Initialize();
141 }
142
143 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
144 int num = Terrain.ExtractData(value);
145 if (num < m_blockMeshesByVariant.Length) {
146 generator.GenerateMeshVertices(
147 this,
148 x,
149 y,
150 z,
152 Color.White,
153 null,
154 geometry.SubsetOpaque
155 );
156 }
157 }
158
159 public override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain,
160 ComponentMiner componentMiner,
161 int value,
162 TerrainRaycastResult raycastResult) {
163 int value2 = 0;
164 if (raycastResult.CellFace.Face == 0) {
166 }
167 if (raycastResult.CellFace.Face == 1) {
169 }
170 if (raycastResult.CellFace.Face == 2) {
172 }
173 if (raycastResult.CellFace.Face == 3) {
175 }
176 if (raycastResult.CellFace.Face == 4) {
178 }
179 BlockPlacementData result = default;
180 result.Value = value2;
181 result.CellFace = raycastResult.CellFace;
182 return result;
183 }
184
185 public override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value) {
186 int num = Terrain.ExtractData(value);
187 if (num < m_collisionBoxes.Length) {
188 return m_collisionBoxes[num];
189 }
190 return null;
191 }
192
193 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
194 int value,
195 Color color,
196 float size,
197 ref Matrix matrix,
198 DrawBlockEnvironmentData environmentData) {
199 BlocksManager.DrawMeshBlock(primitivesRenderer, m_standaloneBlockMesh, color, 2f * size, ref matrix, environmentData);
200 }
201 }
202}
ModelMesh FindMesh(string name, bool throwIfNotFound=true)
ReadOnlyList< ModelMeshPart > MeshParts
virtual void GenerateMeshVertices(Block block, int x, int y, int z, BlockMesh blockMesh, Color color, Matrix? matrix, TerrainGeometrySubset subset)
bool CanBeBuiltIntoFurniture
static Matrix GetBoneAbsoluteTransform(ModelBone modelBone)
static void DrawMeshBlock(PrimitivesRenderer3D primitivesRenderer, BlockMesh blockMesh, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
static object Get(Type type, string name)
TerrainGeometrySubset SubsetOpaque
static int ReplaceData(int value, int data)
static int ReplaceContents(int value, int contents)
方块值的最低10位,替换为目标Content
static int ExtractData(int value)
BoundingBox[][] m_collisionBoxes
BlockMesh[] m_blockMeshesByVariant
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain, ComponentMiner componentMiner, int value, TerrainRaycastResult raycastResult)
方块放置方向
BlockMesh m_standaloneBlockMesh
override void Initialize()
override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value)
static Color White
static Matrix CreateRotationX(float radians)
static Matrix CreateTranslation(float x, float y, float z)
static Matrix CreateRotationY(float radians)