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