Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
BulletBlock.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public class BulletBlock : FlatBlock {
6 [Flags]
12
13 public static int Index = 214;
14
15 public static float[] m_sizes = [1f, 1f, 0.33f];
16
17 public static int[] m_textureSlots = [229, 231, 229];
18
19 public static float[] m_weaponPowers = [80f, 0f, 3.6f];
20
21 public static float[] m_explosionPressures = new float[3];
22
23 public override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z) { }
24
25 public override void DrawBlock(PrimitivesRenderer3D primitivesRenderer,
26 int value,
27 Color color,
28 float size,
29 ref Matrix matrix,
30 DrawBlockEnvironmentData environmentData) {
31 int bulletType = (int)GetBulletType(Terrain.ExtractData(value));
32 float size2 = bulletType >= 0 && bulletType < m_sizes.Length ? size * m_sizes[bulletType] : size;
34 primitivesRenderer,
35 value,
36 size2,
37 ref matrix,
38 null,
39 color,
40 false,
41 environmentData
42 );
43 }
44
45 public override float GetProjectilePower(int value) {
46 int bulletType = (int)GetBulletType(Terrain.ExtractData(value));
47 if (bulletType < 0
48 || bulletType >= m_weaponPowers.Length) {
49 return 0f;
50 }
51 return m_weaponPowers[bulletType];
52 }
53
54 public override float GetExplosionPressure(int value) {
55 int bulletType = (int)GetBulletType(Terrain.ExtractData(value));
56 if (bulletType < 0
57 || bulletType >= m_explosionPressures.Length) {
58 return 0f;
59 }
60 return m_explosionPressures[bulletType];
61 }
62
63 public override IEnumerable<int> GetCreativeValues() {
64 foreach (int enumValue in EnumUtils.GetEnumValues<BulletType>()) {
65 yield return Terrain.MakeBlockValue(BlockIndex, 0, SetBulletType(0, (BulletType)enumValue));
66 }
67 }
68
69 public override string GetDisplayName(SubsystemTerrain subsystemTerrain, int value) {
70 int bulletType = (int)GetBulletType(Terrain.ExtractData(value));
71 if (bulletType < 0
72 || bulletType >= Enum.GetValues<BulletType>().Length) {
73 return string.Empty;
74 }
75 return LanguageControl.Get("BulletBlock", bulletType);
76 }
77
78 public override int GetFaceTextureSlot(int face, int value) {
79 int bulletType = (int)GetBulletType(Terrain.ExtractData(value));
80 if (bulletType < 0
81 || bulletType >= m_textureSlots.Length) {
82 return 229;
83 }
84 return m_textureSlots[bulletType];
85 }
86
87 public static BulletType GetBulletType(int data) => (BulletType)(data & 0xF);
88
89 public static int SetBulletType(int data, BulletType bulletType) => (data & -16) | (int)(bulletType & (BulletType)15);
90 }
91}
int BlockIndex
定义 Block.cs:6
static void DrawFlatOrImageExtrusionBlock(PrimitivesRenderer3D primitivesRenderer, int value, float size, ref Matrix matrix, Texture2D texture, Color color, bool isEmissive, DrawBlockEnvironmentData environmentData)
override int GetFaceTextureSlot(int face, int value)
static BulletType GetBulletType(int data)
override IEnumerable< int > GetCreativeValues()
static float[] m_sizes
static int SetBulletType(int data, BulletType bulletType)
override string GetDisplayName(SubsystemTerrain subsystemTerrain, int value)
static float[] m_weaponPowers
override float GetExplosionPressure(int value)
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
static float[] m_explosionPressures
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
static int[] m_textureSlots
override float GetProjectilePower(int value)
static IList< int > GetEnumValues(Type type)
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
static int MakeBlockValue(int contents)
static int ExtractData(int value)