Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
OneLedBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
6 public static int Index = 253;
7
9
11
13
14 public override void Initialize() {
15 ModelMesh modelMesh = ContentManager.Get<Model>("Models/Leds").FindMesh("OneLed");
16 Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(modelMesh.ParentBone);
17 for (int i = 0; i < 6; i++) {
18 Matrix m = i >= 4
19 ? i != 4
20 ? Matrix.CreateRotationX((float)Math.PI) * Matrix.CreateTranslation(0.5f, 1f, 0.5f)
21 : Matrix.CreateTranslation(0.5f, 0f, 0.5f)
22 : Matrix.CreateRotationX((float)Math.PI / 2f)
23 * Matrix.CreateTranslation(0f, 0f, -0.5f)
24 * Matrix.CreateRotationY(i * (float)Math.PI / 2f)
25 * Matrix.CreateTranslation(0.5f, 0.5f, 0.5f);
28 .AppendModelMeshPart(
29 modelMesh.MeshParts[0],
30 boneAbsoluteTransform * m,
31 false,
32 false,
33 false,
34 false,
36 );
37 m_collisionBoxesByFace[i] = [m_blockMeshesByFace[i].CalculateBoundingBox()];
38 }
39 Matrix m2 = Matrix.CreateRotationY(-(float)Math.PI / 2f) * Matrix.CreateRotationZ((float)Math.PI / 2f);
41 m_standaloneBlockMesh.AppendModelMeshPart(
42 modelMesh.MeshParts[0],
43 boneAbsoluteTransform * m2,
44 false,
45 false,
46 false,
47 false,
49 );
50 }
51
52 public override IEnumerable<CraftingRecipe> GetProceduralCraftingRecipes() {
53 CraftingRecipe craftingRecipe = new() {
54 ResultCount = 4,
55 ResultValue = Terrain.MakeBlockValue(253, 0, 0),
56 RequiredHeatLevel = 0f,
57 Description = LanguageControl.Get("OneLedBlock", 1),
58 Ingredients = {
59 [0] = "glass",
60 [1] = "glass",
61 [2] = "glass",
62 [4] = "wire",
63 [6] = "copperingot",
64 [7] = "copperingot",
65 [8] = "copperingot"
66 }
67 };
68 yield return craftingRecipe;
69 }
70
71 public override bool IsFaceTransparent(SubsystemTerrain subsystemTerrain, int face, int value) {
72 int mountingFace = GetMountingFace(Terrain.ExtractData(value));
73 return face != CellFace.OppositeFace(mountingFace);
74 }
75
76 public override int GetFace(int value) => GetMountingFace(Terrain.ExtractData(value));
77
78 public override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain,
79 ComponentMiner componentMiner,
80 int value,
81 TerrainRaycastResult raycastResult) {
82 int data = SetMountingFace(Terrain.ExtractData(value), raycastResult.CellFace.Face);
83 int value2 = Terrain.ReplaceData(value, data);
84 BlockPlacementData result = default;
85 result.Value = value2;
86 result.CellFace = raycastResult.CellFace;
87 return result;
88 }
89
90 public override void GetDropValues(SubsystemTerrain subsystemTerrain,
91 int oldValue,
92 int newValue,
93 int toolLevel,
94 List<BlockDropValue> dropValues,
95 out bool showDebris) {
96 dropValues.Add(new BlockDropValue { Value = Terrain.MakeBlockValue(253, 0, 0), Count = 1 });
97 showDebris = true;
98 }
99
100 public override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value) {
101 int mountingFace = GetMountingFace(Terrain.ExtractData(value));
102 if (mountingFace >= m_collisionBoxesByFace.Length) {
103 return null;
104 }
105 return m_collisionBoxesByFace[mountingFace];
106 }
107
108 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
109 int mountingFace = GetMountingFace(Terrain.ExtractData(value));
110 if (mountingFace < m_blockMeshesByFace.Length) {
111 generator.GenerateMeshVertices(
112 this,
113 x,
114 y,
115 z,
116 m_blockMeshesByFace[mountingFace],
117 Color.White,
118 null,
119 geometry.SubsetOpaque
120 );
121 generator.GenerateWireVertices(
122 value,
123 x,
124 y,
125 z,
126 mountingFace,
127 1f,
129 geometry.SubsetOpaque
130 );
131 }
132 }
133
134 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
135 int value,
136 Color color,
137 float size,
138 ref Matrix matrix,
139 DrawBlockEnvironmentData environmentData) {
140 BlocksManager.DrawMeshBlock(primitivesRenderer, m_standaloneBlockMesh, color, 2f * size, ref matrix, environmentData);
141 }
142
143 public override ElectricElement CreateElectricElement(SubsystemElectricity subsystemElectricity, int value, int x, int y, int z) =>
144 new OneLedElectricElement(subsystemElectricity, new CellFace(x, y, z, GetFace(value)));
145
147 int value,
148 int face,
149 int connectorFace,
150 int x,
151 int y,
152 int z) {
153 int face2 = GetFace(value);
154 if (face == face2
155 && SubsystemElectricity.GetConnectorDirection(face2, 0, connectorFace).HasValue) {
156 return ElectricConnectorType.Input;
157 }
158 return null;
159 }
160
161 public static int GetMountingFace(int data) => data & 7;
162
163 public static int SetMountingFace(int data, int face) => (data & -8) | (face & 7);
164 }
165}
ReadOnlyList< ModelMeshPart > MeshParts
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)
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 string Get(string className, int key)
获取在当前语言类名键对应的字符串
static int SetMountingFace(int data, int face)
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
override void Initialize()
override? ElectricConnectorType GetConnectorType(SubsystemTerrain terrain, int value, int face, int connectorFace, int x, int y, int z)
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_collisionBoxesByFace
override IEnumerable< CraftingRecipe > GetProceduralCraftingRecipes()
BlockMesh[] m_blockMeshesByFace
override ElectricElement CreateElectricElement(SubsystemElectricity subsystemElectricity, int value, int x, int y, int z)
override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain terrain, int value)
override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain, ComponentMiner componentMiner, int value, TerrainRaycastResult raycastResult)
方块放置方向
BlockMesh m_standaloneBlockMesh
override int GetFace(int value)
override bool IsFaceTransparent(SubsystemTerrain subsystemTerrain, int face, int value)
static int GetMountingFace(int data)
static ? ElectricConnectorDirection GetConnectorDirection(int mountingFace, int rotation, int connectorFace)
TerrainGeometrySubset SubsetOpaque
static int ReplaceData(int value, int data)
static int MakeBlockValue(int contents)
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
static int OppositeFace(int face)