Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
BatteryBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
6 public static int Index = 138;
7
9
10 public BlockMesh m_blockMesh = new();
11
13
14 public override void Initialize() {
15 Model model = ContentManager.Get<Model>("Models/Battery");
16 Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Battery").ParentBone);
17 m_standaloneBlockMesh.AppendModelMeshPart(
18 model.FindMesh("Battery").MeshParts[0],
19 boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.5f, 0f),
20 false,
21 false,
22 false,
23 false,
25 );
26 m_blockMesh.AppendModelMeshPart(
27 model.FindMesh("Battery").MeshParts[0],
28 boneAbsoluteTransform * Matrix.CreateTranslation(0.5f, 0f, 0.5f),
29 false,
30 false,
31 false,
32 false,
34 );
35 m_collisionBoxes[0] = m_blockMesh.CalculateBoundingBox();
36 }
37
38 public override void GetDropValues(SubsystemTerrain subsystemTerrain,
39 int oldValue,
40 int newValue,
41 int toolLevel,
42 List<BlockDropValue> dropValues,
43 out bool showDebris) {
44 showDebris = true;
45 if (toolLevel >= RequiredToolLevel) {
46 int data = Terrain.ExtractData(oldValue);
47 dropValues.Add(new BlockDropValue { Value = Terrain.MakeBlockValue(138, 0, data), Count = 1 });
48 }
49 }
50
51 public override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value) => m_collisionBoxes;
52
53 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
54 generator.GenerateMeshVertices(
55 this,
56 x,
57 y,
58 z,
61 null,
62 geometry.SubsetOpaque
63 );
64 generator.GenerateWireVertices(
65 value,
66 x,
67 y,
68 z,
69 4,
70 0.72f,
72 geometry.SubsetOpaque
73 );
74 }
75
76 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
77 int value,
78 Color color,
79 float size,
80 ref Matrix matrix,
81 DrawBlockEnvironmentData environmentData) {
82 BlocksManager.DrawMeshBlock(primitivesRenderer, m_standaloneBlockMesh, color, 1f * size, ref matrix, environmentData);
83 }
84
85 public ElectricElement CreateElectricElement(SubsystemElectricity subsystemElectricity, int value, int x, int y, int z) =>
86 new BatteryElectricElement(subsystemElectricity, new CellFace(x, y, z, 4));
87
89 int value,
90 int face,
91 int connectorFace,
92 int x,
93 int y,
94 int z) {
95 if (face == 4
96 && SubsystemElectricity.GetConnectorDirection(4, 0, connectorFace).HasValue) {
97 return ElectricConnectorType.Output;
98 }
99 return null;
100 }
101
102 public int GetConnectionMask(int value) => int.MaxValue;
103
104 public static int GetVoltageLevel(int data) => 15 - (data & 0xF);
105
106 public static int SetVoltageLevel(int data, int voltageLevel) => (data & -16) | (15 - (voltageLevel & 0xF));
107 }
108}
ModelMesh FindMesh(string name, bool throwIfNotFound=true)
ReadOnlyList< ModelMeshPart > MeshParts
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
BlockMesh m_standaloneBlockMesh
ElectricConnectorType? GetConnectorType(SubsystemTerrain terrain, int value, int face, int connectorFace, int x, int y, int z)
override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value)
override void Initialize()
static int SetVoltageLevel(int data, int voltageLevel)
override void GetDropValues(SubsystemTerrain subsystemTerrain, int oldValue, int newValue, int toolLevel, List< BlockDropValue > dropValues, out bool showDebris)
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
BoundingBox[] m_collisionBoxes
ElectricElement CreateElectricElement(SubsystemElectricity subsystemElectricity, int value, int x, int y, int z)
static int GetVoltageLevel(int data)
int GetConnectionMask(int value)
virtual void GenerateMeshVertices(Block block, int x, int y, int z, BlockMesh blockMesh, Color color, Matrix? matrix, TerrainGeometrySubset subset)
virtual void GenerateWireVertices(int value, int x, int y, int z, int mountingFace, float centerBoxSize, Vector2 centerOffset, TerrainGeometrySubset subset)
int RequiredToolLevel
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 ? ElectricConnectorDirection GetConnectorDirection(int mountingFace, int rotation, int connectorFace)
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 readonly Vector2 Zero