Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
ComponentDiggingCracks.cs
浏览该文件的文档.
1using Engine;
5
6namespace Game {
9
11
13
15
17
18 public Geometry m_geometry;
19
20 DynamicArray<TerrainVertex> m_vertices = [];
21 DynamicArray<int> m_indices = [];
22
24
25 public int m_value;
26
27 public static int[] m_drawOrders = [
28 200 //原版是1
29 ];
30
31 public int[] DrawOrders => m_drawOrders;
32
33 public virtual void Draw(Camera camera, int drawOrder) {
34 if (!m_componentMiner.DigCellFace.HasValue
35 || !(m_componentMiner.DigProgress > 0f)
36 || !(m_componentMiner.DigTime > 0.2f)) {
37 return;
38 }
39 Point3 point = m_componentMiner.DigCellFace.Value.Point;
40 int cellValue = m_subsystemTerrain.Terrain.GetCellValue(point.X, point.Y, point.Z);
42 if (m_geometry == null
43 || cellValue != m_value
44 || point != m_point) {
45 m_geometry = new Geometry(m_textures[0]); //这里随便默认一个纹理就行
46 block.GenerateTerrainVertices(m_subsystemTerrain.BlockGeometryGenerator, m_geometry, cellValue, point.X, point.Y, point.Z);
47 m_point = point;
48 m_value = cellValue;
49 m_vertices.Count = 0;
50 m_indices.Count = 0;
51 foreach (KeyValuePair<Texture2D, TerrainGeometry> drawGroup in m_geometry.Draws) {
52 foreach (TerrainGeometrySubset geometry in drawGroup.Value.Subsets) {
53 foreach (int index in geometry.Indices) {
54 m_indices.Add(index + m_vertices.Count);
55 }
56 foreach (TerrainVertex vertex in geometry.Vertices) {
57 TerrainVertex terrainVertex = block.SetDiggingCrackingTextureTransform(vertex);
58 m_vertices.Add(terrainVertex);
59 }
60 }
61 }
62 }
63 Vector3 viewPosition = camera.InvertedViewMatrix.Translation;
64 Vector3 v = new(MathF.Floor(viewPosition.X), 0f, MathF.Floor(viewPosition.Z));
65 Matrix value = Matrix.CreateTranslation(v - viewPosition) * camera.ViewMatrix.OrientationMatrix * camera.ProjectionMatrix;
66 try {
67 Display.BlendState = BlendState.NonPremultiplied;
68 Display.DepthStencilState = DepthStencilState.Default;
69 Display.RasterizerState = RasterizerState.CullCounterClockwiseScissor;
70 m_shader.GetParameter("u_origin").SetValue(v.XZ);
71 m_shader.GetParameter("u_viewProjectionMatrix").SetValue(value);
72 m_shader.GetParameter("u_viewPosition").SetValue(camera.ViewPosition);
73 m_shader.GetParameter("u_samplerState").SetValue(SamplerState.PointWrap);
74 m_shader.GetParameter("u_fogYMultiplier").SetValue(m_subsystemSky.VisibilityRangeYMultiplier);
75 m_shader.GetParameter("u_fogColor").SetValue(new Vector3(m_subsystemSky.ViewFogColor));
76 m_shader.GetParameter("u_fogBottomTopDensity")
77 .SetValue(new Vector3(m_subsystemSky.ViewFogBottom, m_subsystemSky.ViewFogTop, m_subsystemSky.ViewFogDensity));
78 m_shader.GetParameter("u_hazeStartDensity").SetValue(new Vector2(m_subsystemSky.ViewHazeStart, m_subsystemSky.ViewHazeDensity));
79 m_shader.GetParameter("u_alphaThreshold").SetValue(0.5f);
80 m_shader.GetParameter("u_texture")
81 .SetValue(block.GetDiggingCrackingTexture(m_componentMiner, m_componentMiner.m_digProgress, cellValue, m_textures));
82 Display.DrawUserIndexed(
83 PrimitiveType.TriangleList,
86 m_vertices.Array,
87 0,
88 m_vertices.Count,
89 m_indices.Array,
90 0,
91 m_indices.Count
92 );
93 }
94 catch {
95 // ignored
96 }
97 }
98
99 public override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap) {
100 m_subsystemTerrain = Project.FindSubsystem<SubsystemTerrain>(true);
101 m_subsystemSky = Project.FindSubsystem<SubsystemSky>(true);
102 m_componentMiner = Entity.FindComponent<ComponentMiner>(true);
103 m_shader = ContentManager.Get<Shader>("Shaders/AlphaTested");
104 m_textures = new Texture2D[8];
105 for (int i = 0; i < 8; i++) {
106 m_textures[i] = ContentManager.Get<Texture2D>($"Textures/Cracks{i + 1}");
107 }
108 }
109
110 public class Geometry(Texture2D texture2D) : TerrainGeometry(texture2D);
111 }
112}
Engine.Vector3 Vector3
static readonly BlendState NonPremultiplied
static readonly DepthStencilState Default
static readonly RasterizerState CullCounterClockwiseScissor
void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
生成地形顶点(用于绘制放置的方块)
virtual Texture2D GetDiggingCrackingTexture(ComponentMiner miner, float digProgress, int value, Texture2D[] defaultCrackTextures)
virtual TerrainVertex SetDiggingCrackingTextureTransform(TerrainVertex vertex)
Vector3 ViewPosition
Matrix InvertedViewMatrix
Matrix ProjectionMatrix
virtual void Draw(Camera camera, int drawOrder)
override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap)
DynamicArray< TerrainVertex > m_vertices
static object Get(Type type, string name)
TerrainGeometryDynamicArray< TerrainVertex > Vertices
TerrainGeometryDynamicArray< int > Indices
static int ExtractContents(int value)
ValuesDictionary ValuesDictionary
static Matrix CreateTranslation(float x, float y, float z)
Vector3 Translation
static readonly VertexDeclaration VertexDeclaration