Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
SubsystemTrapdoorBlockBehavior.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
7
8 public static Random m_random = new();
9
10 public override int[] HandledBlocks => [83, 84];
11
12 public bool IsTrapdoorElectricallyConnected(int x, int y, int z) {
13 int cellValue = SubsystemTerrain.Terrain.GetCellValue(x, y, z);
14 int num = Terrain.ExtractContents(cellValue);
15 int data = Terrain.ExtractData(cellValue);
17 ElectricElement electricElement = m_subsystemElectricity.GetElectricElement(x, y, z, TrapdoorBlock.GetMountingFace(data));
18 if (electricElement != null
19 && electricElement.Connections.Count > 0) {
20 return true;
21 }
22 }
23 return false;
24 }
25
26 public bool OpenCloseTrapdoor(int x, int y, int z, bool open) {
27 int cellValue = SubsystemTerrain.Terrain.GetCellValue(x, y, z);
28 int num = Terrain.ExtractContents(cellValue);
30 int data = TrapdoorBlock.SetOpen(Terrain.ExtractData(cellValue), open);
31 int value = Terrain.ReplaceData(cellValue, data);
32 SubsystemTerrain.ChangeCell(x, y, z, value);
33 string name = open ? "Audio/Doors/DoorOpen" : "Audio/Doors/DoorClose";
34 SubsystemTerrain.Project.FindSubsystem<SubsystemAudio>(true)
35 .PlaySound(name, 0.7f, m_random.Float(-0.1f, 0.1f), new Vector3(x, y, z), 4f, true);
36 return true;
37 }
38 return false;
39 }
40
41 public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) {
42 CellFace cellFace = raycastResult.CellFace;
43 int cellValue = SubsystemTerrain.Terrain.GetCellValue(cellFace.X, cellFace.Y, cellFace.Z);
44 int num = Terrain.ExtractContents(cellValue);
45 int data = Terrain.ExtractData(cellValue);
46 if (num == 83
47 || !IsTrapdoorElectricallyConnected(cellFace.X, cellFace.Y, cellFace.Z)) {
48 bool open = TrapdoorBlock.GetOpen(data);
49 return OpenCloseTrapdoor(cellFace.X, cellFace.Y, cellFace.Z, !open);
50 }
51 return true;
52 }
53
54 public override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ) {
55 int cellValue = SubsystemTerrain.Terrain.GetCellValue(x, y, z);
56 int num = Terrain.ExtractContents(cellValue);
57 Block obj = BlocksManager.Blocks[num];
58 int data = Terrain.ExtractData(cellValue);
59 if (obj is TrapdoorBlock) {
60 int rotation = TrapdoorBlock.GetRotation(data);
61 bool upsideDown = TrapdoorBlock.GetUpsideDown(data);
62 bool flag = false;
63 Point3 point = CellFace.FaceToPoint3(rotation);
64 int cellValue2 = SubsystemTerrain.Terrain.GetCellValue(x - point.X, y - point.Y, z - point.Z);
65 flag |= !BlocksManager.Blocks[Terrain.ExtractContents(cellValue2)].IsNonAttachable(cellValue2);
66 if (upsideDown) {
67 int cellValue3 = SubsystemTerrain.Terrain.GetCellValue(x, y + 1, z);
68 flag |= !BlocksManager.Blocks[Terrain.ExtractContents(cellValue3)].IsNonAttachable(cellValue3);
69 int cellValue4 = SubsystemTerrain.Terrain.GetCellValue(x - point.X, y - point.Y + 1, z - point.Z);
70 flag |= !BlocksManager.Blocks[Terrain.ExtractContents(cellValue4)].IsNonAttachable(cellValue4);
71 }
72 else {
73 int cellValue5 = SubsystemTerrain.Terrain.GetCellValue(x, y - 1, z);
74 flag |= !BlocksManager.Blocks[Terrain.ExtractContents(cellValue5)].IsNonAttachable(cellValue5);
75 int cellValue6 = SubsystemTerrain.Terrain.GetCellValue(x - point.X, y - point.Y - 1, z - point.Z);
76 flag |= !BlocksManager.Blocks[Terrain.ExtractContents(cellValue6)].IsNonAttachable(cellValue6);
77 }
78 if (!flag) {
79 SubsystemTerrain.DestroyCell(
80 0,
81 x,
82 y,
83 z,
84 0,
85 false,
86 false
87 );
88 }
89 }
90 }
91
92 public override void Load(ValuesDictionary valuesDictionary) {
93 base.Load(valuesDictionary);
95 }
96 }
97}
virtual bool IsNonAttachable(int value)
List< ElectricConnection > Connections
bool OpenCloseTrapdoor(int x, int y, int z, bool open)
override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ)
override void Load(ValuesDictionary valuesDictionary)
override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner)
static int ExtractContents(int value)
static int ReplaceData(int value, int data)
static int ExtractData(int value)
static bool GetUpsideDown(int data)
static int SetOpen(int data, bool open)
static int GetMountingFace(int data)
static int GetRotation(int data)
static bool GetOpen(int data)
ValuesDictionary ValuesDictionary
static Point3 FaceToPoint3(int face)