Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
PaintBucketBlock.cs
浏览该文件的文档.
1using System.Globalization;
2using Engine;
4
5namespace Game {
7 public static int Index = 129;
8
10
12
13 public const string fName = "PaintBucketBlock";
14
15 public override void Initialize() {
16 Model model = ContentManager.Get<Model>("Models/FullBucket");
17 Matrix boneAbsoluteTransform = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Bucket").ParentBone);
18 Matrix boneAbsoluteTransform2 = BlockMesh.GetBoneAbsoluteTransform(model.FindMesh("Contents").ParentBone);
19 m_standaloneBucketBlockMesh.AppendModelMeshPart(
20 model.FindMesh("Bucket").MeshParts[0],
21 boneAbsoluteTransform * Matrix.CreateRotationY(MathUtils.DegToRad(180f)) * Matrix.CreateTranslation(0f, -0.3f, 0f),
22 false,
23 false,
24 false,
25 false,
27 );
28 m_standalonePaintBlockMesh.AppendModelMeshPart(
29 model.FindMesh("Contents").MeshParts[0],
30 boneAbsoluteTransform2 * Matrix.CreateRotationY(MathUtils.DegToRad(180f)) * Matrix.CreateTranslation(0f, -0.3f, 0f),
31 false,
32 false,
33 false,
34 false,
36 );
37 m_standalonePaintBlockMesh.TransformTextureCoordinates(Matrix.CreateTranslation(0.9375f, 0f, 0f));
38 base.Initialize();
39 }
40
41 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
42 int value,
43 Color color,
44 float size,
45 ref Matrix matrix,
46 DrawBlockEnvironmentData environmentData) {
47 int color2 = GetColor(Terrain.ExtractData(value));
48 BlocksManager.DrawMeshBlock(primitivesRenderer, m_standaloneBucketBlockMesh, color, 2f * size, ref matrix, environmentData);
50 primitivesRenderer,
52 color * SubsystemPalette.GetColor(environmentData, color2),
53 2f * size,
54 ref matrix,
55 environmentData
56 );
57 }
58
59 public override IEnumerable<int> GetCreativeValues() {
60 int i = 0;
61 while (i < 16) {
62 yield return Terrain.MakeBlockValue(129, 0, SetColor(0, i));
63 int num = i + 1;
64 i = num;
65 }
66 }
67
68 public override IEnumerable<CraftingRecipe> GetProceduralCraftingRecipes() {
69 string[] additives = [
74 ];
75 int color = 0;
76 while (color < 16) {
77 int num2;
78 for (int additive = 0; additive < 4; additive = num2) {
79 int num = CombineColors(color, 1 << additive);
80 if (num != color) {
81 CraftingRecipe craftingRecipe = new() {
82 Description = string.Format(LanguageControl.Get(fName, "1"), SubsystemPalette.GetName(null, num, null)),
83 ResultValue = Terrain.MakeBlockValue(129, 0, num),
84 ResultCount = 1,
85 RequiredHeatLevel = 1f,
86 Ingredients = {
87 [0] = $"{BlocksManager.Blocks[129].CraftingId}:{color.ToString(CultureInfo.InvariantCulture)}",
88 [1] = additives[additive]
89 }
90 };
91 yield return craftingRecipe;
92 }
93 num2 = additive + 1;
94 }
95 num2 = color + 1;
96 color = num2;
97 }
98 }
99
100 public override string GetDisplayName(SubsystemTerrain subsystemTerrain, int value) {
101 int color = GetColor(Terrain.ExtractData(value));
102 return SubsystemPalette.GetName(subsystemTerrain, color, LanguageControl.GetBlock("PaintBucketBlock", "DisplayName"));
103 }
104
105 public override int GetDamageDestructionValue(int value) => Terrain.MakeBlockValue(90);
106
107 public static int GetColor(int data) => data & 0xF;
108
109 public static int SetColor(int data, int color) => (data & -16) | (color & 0xF);
110
111 public static Vector4 ColorToCmyk(int color) {
112 int num = color & 1;
113 int num2 = (color >> 1) & 1;
114 int num3 = (color >> 2) & 1;
115 int num4 = (color >> 3) & 1;
116 return new Vector4(num, num2, num3, num4);
117 }
118
119 public static int CmykToColor(Vector4 cmyk) {
120 if (cmyk.W <= 1f) {
121 int num = (int)MathF.Round(MathUtils.Saturate(cmyk.X));
122 int num2 = (int)MathF.Round(MathUtils.Saturate(cmyk.Y));
123 int num3 = (int)MathF.Round(MathUtils.Saturate(cmyk.Z));
124 int num4 = (int)MathF.Round(MathUtils.Saturate(cmyk.W));
125 return num | (num2 << 1) | (num3 << 2) | (num4 << 3);
126 }
127 return 15;
128 }
129
130 public static int CombineColors(int color1, int color2) => CmykToColor(ColorToCmyk(color1) + ColorToCmyk(color2));
131 }
132}
ModelMesh FindMesh(string name, bool throwIfNotFound=true)
ReadOnlyList< ModelMeshPart > MeshParts
static float Saturate(float x)
static float DegToRad(float degrees)
string CraftingId
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 GetBlock(string blockName, string prop)
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
static int GetColor(int data)
static int CmykToColor(Vector4 cmyk)
static int SetColor(int data, int color)
static Vector4 ColorToCmyk(int color)
override IEnumerable< int > GetCreativeValues()
override int GetDamageDestructionValue(int value)
override IEnumerable< CraftingRecipe > GetProceduralCraftingRecipes()
static int CombineColors(int color1, int color2)
override string GetDisplayName(SubsystemTerrain subsystemTerrain, int value)
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
static int MakeBlockValue(int contents)
static int ExtractData(int value)
static Color White
static Matrix CreateTranslation(float x, float y, float z)
static Matrix CreateRotationY(float radians)