Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
StarfishBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
6 public new const int Index = 229;
7
8 public BlockMesh[] m_blockMeshes = new BlockMesh[24];
9
11
13
14 public static Color[] m_colors = [new(100, 40, 20), new(90, 30, 20), new(100, 30, 30), new(80, 20, 10)];
15
16 public static Vector2[] m_offsets = [
17 0.15f * new Vector2(-0.8f, -1f), 0.15f * new Vector2(1f, -0.75f), 0.15f * new Vector2(-0.65f, 1f), 0.15f * new Vector2(0.9f, 0.7f)
18 ];
19
20 public override void Initialize() {
21 int num = 63;
22 Model model = ContentManager.Get<Model>("Models/Starfish");
23 Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Starfish").ParentBone);
24 Matrix boneAbsoluteTransform2 = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Bottom").ParentBone);
25 for (int i = 0; i < 6; i++) {
26 for (int j = 0; j < 4; j++) {
27 Vector2 zero = Vector2.Zero;
28 if (i < 4) {
29 zero.Y = i * (float)Math.PI / 2f;
30 }
31 else {
32 zero.X = i == 4 ? -(float)Math.PI / 2f : (float)Math.PI / 2f;
33 }
34 Matrix m = Matrix.CreateRotationX((float)Math.PI / 2f)
35 * Matrix.CreateRotationZ(0.3f + 2f * j)
36 * Matrix.CreateTranslation(m_offsets[j].X, m_offsets[j].Y, -0.49f)
39 * Matrix.CreateTranslation(0.5f, 0.5f, 0.5f);
40 int num2 = 4 * i + j;
41 m_blockMeshes[num2] = new BlockMesh();
42 m_blockMeshes[num2]
43 .AppendModelMeshPart(
44 model.FindMesh("Starfish").MeshParts[0],
45 boneAbsoluteTransform * m,
46 false,
47 false,
48 false,
49 false,
51 );
52 m_blockMeshes[num2].TransformTextureCoordinates(Matrix.CreateTranslation(num % 16 / 16f, num / 16 / 16f, 0f));
53 m_collisionBoxes[num2] = [m_blockMeshes[num2].CalculateBoundingBox()];
54 }
55 }
57 m_standaloneBlockMesh.AppendModelMeshPart(
58 model.FindMesh("Starfish").MeshParts[0],
59 boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.1f, 0f),
60 false,
61 false,
62 false,
63 false,
65 );
66 m_standaloneBlockMesh.AppendModelMeshPart(
67 model.FindMesh("Bottom").MeshParts[0],
68 boneAbsoluteTransform2 * Matrix.CreateTranslation(0f, -0.1f, 0f),
69 false,
70 false,
71 false,
72 false,
74 );
75 m_standaloneBlockMesh.TransformTextureCoordinates(Matrix.CreateTranslation(num % 16 / 16f, num / 16 / 16f, 0f));
76 base.Initialize();
77 }
78
79 public override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value) {
80 int data = Terrain.ExtractData(value);
81 int face = GetFace(data);
82 int subvariant = GetSubvariant(data);
83 return m_collisionBoxes[4 * face + subvariant];
84 }
85
86 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
87 int data = Terrain.ExtractData(value);
88 int face = GetFace(data);
89 int subvariant = GetSubvariant(data);
90 Color color = m_colors[subvariant];
91 generator.GenerateMeshVertices(
92 this,
93 x,
94 y,
95 z,
96 m_blockMeshes[4 * face + subvariant],
97 color,
98 null,
99 geometry.SubsetOpaque
100 );
101 base.GenerateTerrainVertices(generator, geometry, value, x, y, z);
102 }
103
104 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
105 int value,
106 Color color,
107 float size,
108 ref Matrix matrix,
109 DrawBlockEnvironmentData environmentData) {
110 BlocksManager.DrawMeshBlock(primitivesRenderer, m_standaloneBlockMesh, color * m_colors[0], 3f * size, ref matrix, environmentData);
111 }
112
114 Vector3 position,
115 int value,
116 float strength) => new(subsystemTerrain, position, 0.75f * strength, DestructionDebrisScale, new Color(64, 64, 64), DefaultTextureSlot);
117 }
118}
Engine.Color Color
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)
float DestructionDebrisScale
int DefaultTextureSlot
static Matrix GetBoneAbsoluteTransform(ModelBone modelBone)
static void DrawMeshBlock(PrimitivesRenderer3D primitivesRenderer, BlockMesh blockMesh, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
static int GetSubvariant(int data)
static object Get(Type type, string name)
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
override BlockDebrisParticleSystem CreateDebrisParticleSystem(SubsystemTerrain subsystemTerrain, Vector3 position, int value, float strength)
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
static Vector2[] m_offsets
override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value)
BoundingBox[][] m_collisionBoxes
override void Initialize()
TerrainGeometrySubset SubsetOpaque
static int ExtractData(int value)
static Color White
static Matrix CreateRotationX(float radians)
static Matrix CreateTranslation(float x, float y, float z)
static Matrix CreateRotationZ(float radians)
static Matrix CreateRotationY(float radians)
static readonly Vector2 Zero