Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
MagnetBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public class MagnetBlock : Block {
6 public static int Index = 167;
7
9
11
13
14 public override void Initialize() {
15 Model model = ContentManager.Get<Model>("Models/Magnet");
16 Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Magnet").ParentBone);
17 for (int i = 0; i < 2; i++) {
18 m_meshesByData[i] = new BlockMesh();
20 .AppendModelMeshPart(
21 model.FindMesh("Magnet").MeshParts[0],
22 boneAbsoluteTransform * Matrix.CreateRotationY((float)Math.PI / 2f * i) * Matrix.CreateTranslation(0.5f, 0f, 0.5f),
23 false,
24 false,
25 true,
26 false,
28 );
29 m_collisionBoxesByData[i] = [m_meshesByData[i].CalculateBoundingBox()];
30 }
31 m_standaloneMesh.AppendModelMeshPart(
32 model.FindMesh("Magnet").MeshParts[0],
33 boneAbsoluteTransform * Matrix.CreateScale(1.5f) * Matrix.CreateTranslation(0f, -0.25f, 0f),
34 false,
35 false,
36 true,
37 false,
39 );
40 base.Initialize();
41 }
42
43 public override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value) {
44 int num = Terrain.ExtractData(value);
45 if (num < m_collisionBoxesByData.Length) {
46 return m_collisionBoxesByData[num];
47 }
48 return null;
49 }
50
51 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
52 int num = Terrain.ExtractData(value);
53 if (num < m_collisionBoxesByData.Length) {
54 generator.GenerateMeshVertices(
55 this,
56 x,
57 y,
58 z,
59 m_meshesByData[num],
61 null,
62 geometry.SubsetOpaque
63 );
64 }
65 }
66
67 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
68 int value,
69 Color color,
70 float size,
71 ref Matrix matrix,
72 DrawBlockEnvironmentData environmentData) {
73 BlocksManager.DrawMeshBlock(primitivesRenderer, m_standaloneMesh, color, size, ref matrix, environmentData);
74 }
75
76 public override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain,
77 ComponentMiner componentMiner,
78 int value,
79 TerrainRaycastResult raycastResult) {
80 BlockPlacementData result;
81 if (componentMiner.Project.FindSubsystem<SubsystemMagnetBlockBehavior>(true).MagnetsCount < 8) {
83 int data = !(MathF.Abs(forward.X) > MathF.Abs(forward.Z)) ? 1 : 0;
84 result = default;
85 result.CellFace = raycastResult.CellFace;
86 result.Value = Terrain.ReplaceData(value, data);
87 return result;
88 }
89 componentMiner.ComponentPlayer?.ComponentGui.DisplaySmallMessage("Too many magnets", Color.White, true, false);
90 result = default;
91 return result;
92 }
93 }
94}
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)
static Matrix GetBoneAbsoluteTransform(ModelBone modelBone)
static void DrawMeshBlock(PrimitivesRenderer3D primitivesRenderer, BlockMesh blockMesh, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
ComponentCreatureModel ComponentCreatureModel
virtual void DisplaySmallMessage(string text, Color color, bool blinking, bool playNotificationSound)
ComponentPlayer ComponentPlayer
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 Initialize()
BlockMesh[] m_meshesByData
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
BoundingBox[][] m_collisionBoxesByData
override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value)
TerrainGeometrySubset SubsetOpaque
static int ReplaceData(int value, int data)
static int ExtractData(int value)
virtual Subsystem FindSubsystem(Type type, string name, bool throwOnError)
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 Matrix CreateScale(float scale)