Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
CompassBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public class CompassBlock : Block {
6 public static int Index = 117;
7
8 public BlockMesh m_caseMesh = new();
9
10 public BlockMesh m_pointerMesh = new();
11
12 public override void Initialize() {
13 Model model = ContentManager.Get<Model>("Models/Compass");
14 Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Case").ParentBone);
15 Matrix boneAbsoluteTransform2 = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Pointer").ParentBone);
16 m_caseMesh.AppendModelMeshPart(
17 model.FindMesh("Case").MeshParts[0],
18 boneAbsoluteTransform * Matrix.CreateTranslation(0f, -0.01f, 0f),
19 false,
20 false,
21 true,
22 false,
24 );
25 m_pointerMesh.AppendModelMeshPart(
26 model.FindMesh("Pointer").MeshParts[0],
27 boneAbsoluteTransform2 * Matrix.CreateTranslation(0f, -0.01f, 0f),
28 false,
29 false,
30 false,
31 false,
33 );
34 base.Initialize();
35 }
36
37 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) { }
38
39 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
40 int value,
41 Color color,
42 float size,
43 ref Matrix matrix,
44 DrawBlockEnvironmentData environmentData) {
45 float radians = 0f;
46 if (environmentData != null
47 && environmentData.SubsystemTerrain != null) {
48 Vector3 forward = environmentData.InWorldMatrix.Forward;
49 Vector3 translation = environmentData.InWorldMatrix.Translation;
51 .FindNearestCompassTarget(translation);
52 Vector3 vector = translation - v;
53 radians = Vector2.Angle(v2: new Vector2(forward.X, forward.Z), v1: new Vector2(vector.X, vector.Z));
54 }
55 Matrix matrix2 = matrix;
56 Matrix matrix3 = Matrix.CreateRotationY(radians) * matrix;
57 BlocksManager.DrawMeshBlock(primitivesRenderer, m_caseMesh, color, size * 6f, ref matrix2, environmentData);
58 BlocksManager.DrawMeshBlock(primitivesRenderer, m_pointerMesh, color, size * 6f, ref matrix3, environmentData);
59 }
60 }
61}
ModelMesh FindMesh(string name, bool throwIfNotFound=true)
ReadOnlyList< ModelMeshPart > MeshParts
static Matrix GetBoneAbsoluteTransform(ModelBone modelBone)
static void DrawMeshBlock(PrimitivesRenderer3D primitivesRenderer, BlockMesh blockMesh, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
override void Initialize()
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
static object Get(Type type, string name)
virtual Subsystem FindSubsystem(Type type, string name, bool throwOnError)
static Color White
static Matrix CreateTranslation(float x, float y, float z)
static Matrix CreateRotationY(float radians)
Vector3 Translation
Vector3 Forward
static float Angle(Vector2 v1, Vector2 v2)