Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
LadderBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public abstract class LadderBlock : Block {
6 public string m_modelName;
7
8 public float m_offset;
9
11
13
15
16 public LadderBlock(string modelName, float offset) {
17 m_modelName = modelName;
18 m_offset = offset;
19 }
20
21 public override void Initialize() {
23 Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Ladder").ParentBone);
24 for (int i = 0; i < 4; i++) {
26 Matrix m = Matrix.CreateTranslation(0f, 0f, 0f - (0.5f - m_offset))
27 * Matrix.CreateRotationY(i * (float)Math.PI / 2f)
28 * Matrix.CreateTranslation(0.5f, 0f, 0.5f);
30 .AppendModelMeshPart(
31 model.FindMesh("Ladder").MeshParts[0],
32 boneAbsoluteTransform * m,
33 false,
34 false,
35 false,
36 false,
38 );
39 m_blockMeshesByData[i].GenerateSidesData();
40 m_collisionBoxesByData[i] = [m_blockMeshesByData[i].CalculateBoundingBox()];
41 }
42 m_standaloneBlockMesh.AppendModelMeshPart(
43 model.FindMesh("Ladder").MeshParts[0],
44 boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.5f, 0f),
45 false,
46 false,
47 false,
48 false,
50 );
51 base.Initialize();
52 }
53
54 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
55 int num = Terrain.ExtractData(value);
56 if (num < m_blockMeshesByData.Length) {
57 generator.GenerateMeshVertices(
58 this,
59 x,
60 y,
61 z,
64 null,
65 geometry.SubsetOpaque
66 );
67 }
68 }
69
70 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
71 int value,
72 Color color,
73 float size,
74 ref Matrix matrix,
75 DrawBlockEnvironmentData environmentData) {
76 BlocksManager.DrawMeshBlock(primitivesRenderer, m_standaloneBlockMesh, color, size, ref matrix, environmentData);
77 }
78
79 public override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain,
80 ComponentMiner componentMiner,
81 int value,
82 TerrainRaycastResult raycastResult) {
83 BlockPlacementData result = default;
84 result.Value = raycastResult.CellFace.Face < 4 ? Terrain.MakeBlockValue(BlockIndex, 0, SetFace(0, raycastResult.CellFace.Face)) : 0;
85 result.CellFace = raycastResult.CellFace;
86 return result;
87 }
88
89 public override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value) {
90 int num = Terrain.ExtractData(value);
91 if (num < m_collisionBoxesByData.Length) {
92 return m_collisionBoxesByData[num];
93 }
94 return base.GetCustomCollisionBoxes(terrain, value);
95 }
96
97 public static int GetFace(int data) => data & 3;
98
99 public static int SetFace(int data, int face) => (data & -4) | (face & 3);
100
101 public override bool IsMovableByPiston(int value, int pistonFace, int y, out bool isEnd) {
102 isEnd = true;
103 int data = Terrain.ExtractData(value);
104 return pistonFace == GetFace(data);
105 }
106 }
107}
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)
int BlockIndex
定义 Block.cs:6
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)
static int GetFace(int data)
BlockMesh m_standaloneBlockMesh
override bool IsMovableByPiston(int value, int pistonFace, int y, out bool isEnd)
override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain, ComponentMiner componentMiner, int value, TerrainRaycastResult raycastResult)
方块放置方向
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 BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value)
override void Initialize()
BlockMesh[] m_blockMeshesByData
static int SetFace(int data, int face)
LadderBlock(string modelName, float offset)
BoundingBox[][] m_collisionBoxesByData
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)