Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
JackOLanternBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public class JackOLanternBlock : Block {
6 public static int Index = 132;
7
9
11
13
14 public override void Initialize() {
15 Model model = ContentManager.Get<Model>("Models/Pumpkins");
16 Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("JackOLantern").ParentBone);
17 for (int i = 0; i < 4; i++) {
18 float radians = i * (float)Math.PI / 2f;
19 BlockMesh blockMesh = new();
20 blockMesh.AppendModelMeshPart(
21 model.FindMesh("JackOLantern").MeshParts[0],
22 boneAbsoluteTransform * Matrix.CreateRotationY(radians) * Matrix.CreateTranslation(0.5f, 0f, 0.5f),
23 false,
24 false,
25 false,
26 false,
27 new Color(232, 232, 232)
28 );
29 blockMesh.AppendModelMeshPart(
30 model.FindMesh("JackOLantern").MeshParts[0],
31 boneAbsoluteTransform * Matrix.CreateRotationY(radians) * Matrix.CreateTranslation(0.5f, 0f, 0.5f),
32 true,
33 true,
34 false,
35 false,
37 );
38 m_blockMeshesByData[i] = blockMesh;
39 }
40 m_standaloneBlockMesh.AppendModelMeshPart(
41 model.FindMesh("JackOLantern").MeshParts[0],
42 boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.23f, 0f),
43 false,
44 false,
45 false,
46 false,
47 new Color(232, 232, 232)
48 );
49 m_standaloneBlockMesh.AppendModelMeshPart(
50 model.FindMesh("JackOLantern").MeshParts[0],
51 boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.23f, 0f),
52 true,
53 true,
54 false,
55 false,
57 );
58 m_collisionBoxes[0] = m_blockMeshesByData[0].CalculateBoundingBox();
59 base.Initialize();
60 }
61
62 public override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain,
63 ComponentMiner componentMiner,
64 int value,
65 TerrainRaycastResult raycastResult) {
67 float num = Vector3.Dot(forward, Vector3.UnitZ);
68 float num2 = Vector3.Dot(forward, Vector3.UnitX);
69 float num3 = Vector3.Dot(forward, -Vector3.UnitZ);
70 float num4 = Vector3.Dot(forward, -Vector3.UnitX);
71 int data = 0;
72 if (num == MathUtils.Max(num, num2, num3, num4)) {
73 data = 0;
74 }
75 else if (num2 == MathUtils.Max(num, num2, num3, num4)) {
76 data = 1;
77 }
78 else if (num3 == MathUtils.Max(num, num2, num3, num4)) {
79 data = 2;
80 }
81 else if (num4 == MathUtils.Max(num, num2, num3, num4)) {
82 data = 3;
83 }
84 BlockPlacementData result = default;
85 result.Value = Terrain.ReplaceData(Terrain.ReplaceContents(132), data);
86 result.CellFace = raycastResult.CellFace;
87 return result;
88 }
89
90 public override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value) => m_collisionBoxes;
91
92 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
93 int num = Terrain.ExtractData(value);
94 if (num < m_blockMeshesByData.Length) {
95 generator.GenerateMeshVertices(
96 this,
97 x,
98 y,
99 z,
101 Color.White,
102 null,
103 geometry.SubsetAlphaTest
104 );
105 }
106 }
107
108 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
109 int value,
110 Color color,
111 float size,
112 ref Matrix matrix,
113 DrawBlockEnvironmentData environmentData) {
114 BlocksManager.DrawMeshBlock(primitivesRenderer, m_standaloneBlockMesh, color, 2f * size, ref matrix, environmentData);
115 }
116
117 public override bool IsMovableByPiston(int value, int pistonFace, int y, out bool isEnd) {
118 isEnd = false;
119 return false;
120 }
121 }
122}
ModelMesh FindMesh(string name, bool throwIfNotFound=true)
ReadOnlyList< ModelMeshPart > MeshParts
static int Max(int x1, int x2)
virtual void GenerateMeshVertices(Block block, int x, int y, int z, BlockMesh blockMesh, Color color, Matrix? matrix, TerrainGeometrySubset subset)
static Matrix GetBoneAbsoluteTransform(ModelBone modelBone)
virtual void AppendModelMeshPart(ModelMeshPart meshPart, Matrix matrix, bool makeEmissive, bool flipWindingOrder, bool doubleSided, bool flipNormals, Color color)
static void DrawMeshBlock(PrimitivesRenderer3D primitivesRenderer, BlockMesh blockMesh, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
ComponentCreatureModel ComponentCreatureModel
ComponentCreature ComponentCreature
static object Get(Type type, string name)
override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain, ComponentMiner componentMiner, int value, TerrainRaycastResult raycastResult)
方块放置方向
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
override bool IsMovableByPiston(int value, int pistonFace, int y, out bool isEnd)
override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value)
TerrainGeometrySubset SubsetAlphaTest
static int ReplaceData(int value, int data)
static int ReplaceContents(int value, int contents)
方块值的最低10位,替换为目标Content
static int ExtractData(int value)
static Color White
static Matrix CreateFromQuaternion(Quaternion quaternion)
static Matrix CreateTranslation(float x, float y, float z)
static Matrix CreateRotationY(float radians)
Vector3 Forward
static readonly Vector3 UnitX
static readonly Vector3 UnitZ
static float Dot(Vector3 v1, Vector3 v2)