Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
CampfireBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public class CampfireBlock : Block {
6 public static int Index = 209;
7
8 public BlockMesh[] m_meshesByData = new BlockMesh[16];
9
11
13
14 public override void Initialize() {
15 Model model = ContentManager.Get<Model>("Models/Campfire");
16 Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Wood").ParentBone);
17 Matrix boneAbsoluteTransform2 = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Ashes").ParentBone);
18 for (int i = 0; i < 16; i++) {
19 m_meshesByData[i] = new BlockMesh();
20 if (i == 0) {
22 .AppendModelMeshPart(
23 model.FindMesh("Ashes").MeshParts[0],
24 boneAbsoluteTransform2 * Matrix.CreateScale(3f) * Matrix.CreateTranslation(0.5f, 0f, 0.5f),
25 false,
26 false,
27 false,
28 false,
30 );
31 }
32 else {
33 float scale = MathUtils.Lerp(1.5f, 4f, i / 15f);
34 float radians = i * (float)Math.PI / 2f;
36 .AppendModelMeshPart(
37 model.FindMesh("Wood").MeshParts[0],
38 boneAbsoluteTransform
39 * Matrix.CreateScale(scale)
40 * Matrix.CreateRotationY(radians)
41 * Matrix.CreateTranslation(0.5f, 0f, 0.5f),
42 false,
43 false,
44 false,
45 false,
47 );
49 .AppendModelMeshPart(
50 model.FindMesh("Ashes").MeshParts[0],
51 boneAbsoluteTransform2
52 * Matrix.CreateScale(scale)
53 * Matrix.CreateRotationY(radians)
54 * Matrix.CreateTranslation(0.5f, 0f, 0.5f),
55 false,
56 false,
57 false,
58 false,
60 );
61 }
62 BoundingBox boundingBox = m_meshesByData[i].CalculateBoundingBox();
63 boundingBox.Min.X = 0f;
64 boundingBox.Min.Z = 0f;
65 boundingBox.Max.X = 1f;
66 boundingBox.Max.Z = 1f;
67 m_collisionBoxesByData[i] = [boundingBox];
68 }
69 m_standaloneMesh.AppendModelMeshPart(
70 model.FindMesh("Wood").MeshParts[0],
71 boneAbsoluteTransform * Matrix.CreateScale(3f) * Matrix.CreateTranslation(0f, 0f, 0f),
72 false,
73 false,
74 true,
75 false,
77 );
78 m_standaloneMesh.AppendModelMeshPart(
79 model.FindMesh("Ashes").MeshParts[0],
80 boneAbsoluteTransform2 * Matrix.CreateScale(3f) * Matrix.CreateTranslation(0f, 0f, 0f),
81 false,
82 false,
83 true,
84 false,
86 );
87 base.Initialize();
88 }
89
90 public override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value) {
91 int num = Terrain.ExtractData(value);
92 if (num < m_collisionBoxesByData.Length) {
93 return m_collisionBoxesByData[num];
94 }
95 return null;
96 }
97
98 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
99 int num = Terrain.ExtractData(value);
100 if (num < m_meshesByData.Length) {
101 generator.GenerateMeshVertices(
102 this,
103 x,
104 y,
105 z,
106 m_meshesByData[num],
107 Color.White,
108 null,
109 geometry.SubsetOpaque
110 );
111 }
112 }
113
114 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
115 int value,
116 Color color,
117 float size,
118 ref Matrix matrix,
119 DrawBlockEnvironmentData environmentData) {
120 BlocksManager.DrawMeshBlock(primitivesRenderer, m_standaloneMesh, color, size, ref matrix, environmentData);
121 }
122
123 public override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain,
124 ComponentMiner componentMiner,
125 int value,
126 TerrainRaycastResult raycastResult) {
127 BlockPlacementData result = default;
128 result.CellFace = raycastResult.CellFace;
129 result.Value = Terrain.MakeBlockValue(209, 0, 3);
130 return result;
131 }
132
133 public override bool ShouldAvoid(int value) => Terrain.ExtractData(value) > 0;
134
135 public override int GetEmittedLightAmount(int value) {
136 int num = Terrain.ExtractData(value);
137 if (num > 0) {
138 return MathUtils.Min(8 + num / 2, 15);
139 }
140 return 0;
141 }
142
143 public override float GetHeat(int value) {
144 if (Terrain.ExtractData(value) <= 0) {
145 return 0f;
146 }
147 return base.GetHeat(value);
148 }
149 }
150}
ModelMesh FindMesh(string name, bool throwIfNotFound=true)
ReadOnlyList< ModelMeshPart > MeshParts
static int Min(int x1, int x2)
static float Lerp(float x1, float x2, float f)
virtual void GenerateMeshVertices(Block block, int x, int y, int z, BlockMesh blockMesh, Color color, Matrix? matrix, TerrainGeometrySubset subset)
static Matrix GetBoneAbsoluteTransform(ModelBone modelBone)
static void DrawMeshBlock(PrimitivesRenderer3D primitivesRenderer, BlockMesh blockMesh, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value)
override float GetHeat(int value)
override void Initialize()
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain, ComponentMiner componentMiner, int value, TerrainRaycastResult raycastResult)
方块放置方向
override bool ShouldAvoid(int value)
override int GetEmittedLightAmount(int value)
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
BoundingBox[][] m_collisionBoxesByData
static object Get(Type type, string name)
TerrainGeometrySubset SubsetOpaque
static int MakeBlockValue(int contents)
static int ExtractData(int value)
static Color White
static Matrix CreateTranslation(float x, float y, float z)
static Matrix CreateRotationY(float radians)
static Matrix CreateScale(float scale)