Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
DispenserBlock.cs
浏览该文件的文档.
1using Engine;
2
3namespace Game {
5 public enum Mode {
8 }
9
10 public static int Index = 216;
11
12 public override int GetFaceTextureSlot(int face, int value) {
13 int direction = GetDirection(Terrain.ExtractData(value));
14 if (face != direction) {
15 return 42;
16 }
17 return 59;
18 }
19
20 public override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain,
21 ComponentMiner componentMiner,
22 int value,
23 TerrainRaycastResult raycastResult) {
25 float num = Vector3.Dot(forward, Vector3.UnitZ);
26 float num2 = Vector3.Dot(forward, Vector3.UnitX);
27 float num3 = Vector3.Dot(forward, -Vector3.UnitZ);
28 float num4 = Vector3.Dot(forward, -Vector3.UnitX);
29 float num5 = Vector3.Dot(forward, Vector3.UnitY);
30 float num6 = Vector3.Dot(forward, -Vector3.UnitY);
31 float num7 = MathUtils.Min(MathUtils.Min(num, num2, num3), MathUtils.Min(num4, num5, num6));
32 int direction = 0;
33 if (num == num7) {
34 direction = 0;
35 }
36 else if (num2 == num7) {
37 direction = 1;
38 }
39 else if (num3 == num7) {
40 direction = 2;
41 }
42 else if (num4 == num7) {
43 direction = 3;
44 }
45 else if (num5 == num7) {
46 direction = 4;
47 }
48 else if (num6 == num7) {
49 direction = 5;
50 }
51 BlockPlacementData result = default;
52 result.Value = Terrain.MakeBlockValue(216, 0, SetAcceptsDrops(SetMode(SetDirection(0, direction), Mode.Shoot), true));
53 result.CellFace = raycastResult.CellFace;
54 return result;
55 }
56
57 public static int GetDirection(int data) => data & 7;
58
59 public static int SetDirection(int data, int direction) => (data & -8) | (direction & 7);
60
61 public static Mode GetMode(int data) {
62 if ((data & 8) != 0) {
63 return Mode.Shoot;
64 }
65 return Mode.Dispense;
66 }
67
68 public static int SetMode(int data, Mode mode) => (data & -9) | (mode != 0 ? 8 : 0);
69
70 public static bool GetAcceptsDrops(int data) => (data & 0x10) != 0;
71
72 public static int SetAcceptsDrops(int data, bool acceptsDrops) => (data & -17) | (acceptsDrops ? 16 : 0);
73
74 public ElectricElement CreateElectricElement(SubsystemElectricity subsystemElectricity, int value, int x, int y, int z) =>
75 new DispenserElectricElement(subsystemElectricity, new Point3(x, y, z));
76
78 int value,
79 int face,
80 int connectorFace,
81 int x,
82 int y,
83 int z) => ElectricConnectorType.Input;
84
85 public int GetConnectionMask(int value) => int.MaxValue;
86 }
87}
static int Min(int x1, int x2)
ComponentCreatureModel ComponentCreatureModel
ComponentCreature ComponentCreature
static int SetMode(int data, Mode mode)
ElectricConnectorType? GetConnectorType(SubsystemTerrain terrain, int value, int face, int connectorFace, int x, int y, int z)
static bool GetAcceptsDrops(int data)
override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain, ComponentMiner componentMiner, int value, TerrainRaycastResult raycastResult)
方块放置方向
static Mode GetMode(int data)
ElectricElement CreateElectricElement(SubsystemElectricity subsystemElectricity, int value, int x, int y, int z)
int GetConnectionMask(int value)
static int SetDirection(int data, int direction)
override int GetFaceTextureSlot(int face, int value)
static int GetDirection(int data)
static int SetAcceptsDrops(int data, bool acceptsDrops)
static int MakeBlockValue(int contents)
static int ExtractData(int value)
static Matrix CreateFromQuaternion(Quaternion quaternion)
Vector3 Forward
static readonly Vector3 UnitX
static readonly Vector3 UnitY
static readonly Vector3 UnitZ
static float Dot(Vector3 v1, Vector3 v2)