Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
PaintedCubeBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public abstract class PaintedCubeBlock : CubeBlock, IPaintableBlock {
7
8 public PaintedCubeBlock(int coloredTextureSlot) => m_coloredTextureSlot = coloredTextureSlot;
9
10 public override int GetFaceTextureSlot(int face, int value) {
11 if (!IsColored(Terrain.ExtractData(value))) {
12 return DefaultTextureSlot;
13 }
15 }
16
17 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) {
18 int data = Terrain.ExtractData(value);
19 Color color = SubsystemPalette.GetColor(generator, GetColor(data));
20 generator.GenerateCubeVertices(
21 this,
22 value,
23 x,
24 y,
25 z,
26 color,
27 geometry.OpaqueSubsetsByFace
28 );
29 }
30
31 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
32 int value,
33 Color color,
34 float size,
35 ref Matrix matrix,
36 DrawBlockEnvironmentData environmentData) {
37 int data = Terrain.ExtractData(value);
38 color *= SubsystemPalette.GetColor(environmentData, GetColor(data));
40 primitivesRenderer,
41 value,
42 new Vector3(size),
43 ref matrix,
44 color,
45 color,
46 environmentData
47 );
48 }
49
50 public override IEnumerable<int> GetCreativeValues() {
51 yield return Terrain.MakeBlockValue(BlockIndex, 0, SetColor(0, null));
52 int i = 0;
53 while (i < 16) {
54 yield return Terrain.MakeBlockValue(BlockIndex, 0, SetColor(0, i));
55 int num = i + 1;
56 i = num;
57 }
58 }
59
60 public override void GetDropValues(SubsystemTerrain subsystemTerrain,
61 int oldValue,
62 int newValue,
63 int toolLevel,
64 List<BlockDropValue> dropValues,
65 out bool showDebris) {
66 int data = Terrain.ExtractData(oldValue);
67 if (GetColor(data).HasValue) {
68 showDebris = true;
69 if (toolLevel >= RequiredToolLevel) {
70 dropValues.Add(new BlockDropValue { Value = Terrain.MakeBlockValue(DefaultDropContent, 0, data), Count = (int)DefaultDropCount });
71 }
72 }
73 else {
74 base.GetDropValues(subsystemTerrain, oldValue, newValue, toolLevel, dropValues, out showDebris);
75 }
76 }
77
79 Vector3 position,
80 int value,
81 float strength) {
82 int data = Terrain.ExtractData(value);
83 Color color = SubsystemPalette.GetColor(subsystemTerrain, GetColor(data));
84 return new BlockDebrisParticleSystem(subsystemTerrain, position, strength, DestructionDebrisScale, color, GetFaceTextureSlot(0, value));
85 }
86
87 public override string GetDisplayName(SubsystemTerrain subsystemTerrain, int value) {
88 int data = Terrain.ExtractData(value);
90 subsystemTerrain,
91 GetColor(data),
92 LanguageControl.GetBlock($"{GetType().Name}:{data.ToString()}", "DisplayName")
93 );
94 }
95
96 public override string GetCategory(int value) {
97 if (!GetColor(Terrain.ExtractData(value)).HasValue) {
98 return base.GetCategory(value);
99 }
100 return "Painted";
101 }
102
103 public int? GetPaintColor(int value) => GetColor(Terrain.ExtractData(value));
104
105 public int Paint(SubsystemTerrain terrain, int value, int? color) {
106 int data = Terrain.ExtractData(value);
107 return Terrain.ReplaceData(value, SetColor(data, color));
108 }
109
110 public static bool IsColored(int data) => (data & 1) != 0;
111
112 public static int? GetColor(int data) {
113 if ((data & 1) != 0) {
114 return (data >> 1) & 0xF;
115 }
116 return null;
117 }
118
119 public static int SetColor(int data, int? color) {
120 if (color.HasValue) {
121 return (data & -32) | 1 | (color.Value << 1);
122 }
123 return data & -32;
124 }
125 }
126}
Engine.Vector3 Vector3
virtual void GenerateCubeVertices(Block block, int value, int x, int y, int z, Color color, TerrainGeometrySubset[] subsetsByFace)
int BlockIndex
定义 Block.cs:6
float DefaultDropCount
int DefaultDropContent
float DestructionDebrisScale
int DefaultTextureSlot
int RequiredToolLevel
static void DrawCubeBlock(PrimitivesRenderer3D primitivesRenderer, int value, Vector3 size, ref Matrix matrix, Color color, Color topColor, DrawBlockEnvironmentData environmentData)
static string GetBlock(string blockName, string prop)
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
static bool IsColored(int data)
override BlockDebrisParticleSystem CreateDebrisParticleSystem(SubsystemTerrain subsystemTerrain, Vector3 position, int value, float strength)
override int GetFaceTextureSlot(int face, int value)
override string GetDisplayName(SubsystemTerrain subsystemTerrain, int value)
override void GetDropValues(SubsystemTerrain subsystemTerrain, int oldValue, int newValue, int toolLevel, List< BlockDropValue > dropValues, out bool showDebris)
static ? int GetColor(int data)
PaintedCubeBlock(int coloredTextureSlot)
static int SetColor(int data, int? color)
override string GetCategory(int value)
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
int Paint(SubsystemTerrain terrain, int value, int? color)
override IEnumerable< int > GetCreativeValues()
TerrainGeometrySubset[] OpaqueSubsetsByFace
static int ReplaceData(int value, int data)
static int MakeBlockValue(int contents)
static int ExtractData(int value)