Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
SubsystemTorchBlockBehavior.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
7
8 public Dictionary<Point3, FireParticleSystem> m_particleSystemsByCell = [];
9
10 public override int[] HandledBlocks => [31, 17, 132];
11
12 public override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ) {
13 int cellValueFast = SubsystemTerrain.Terrain.GetCellValueFast(x, y, z);
14 switch (Terrain.ExtractContents(cellValueFast)) {
15 case 31: {
16 Point3 point = CellFace.FaceToPoint3(Terrain.ExtractData(cellValueFast));
17 int x2 = x - point.X;
18 int y2 = y - point.Y;
19 int z2 = z - point.Z;
20 int cellContents2 = SubsystemTerrain.Terrain.GetCellContents(x2, y2, z2);
21 if (!BlocksManager.Blocks[cellContents2].IsCollidable_(cellValueFast)) {
22 SubsystemTerrain.DestroyCell(
23 0,
24 x,
25 y,
26 z,
27 0,
28 false,
29 false
30 );
31 }
32 break;
33 }
34 case 132: {
35 int cellContents = SubsystemTerrain.Terrain.GetCellContents(x, y - 1, z);
36 if (!BlocksManager.Blocks[cellContents].IsCollidable_(cellValueFast)) {
37 SubsystemTerrain.DestroyCell(
38 0,
39 x,
40 y,
41 z,
42 0,
43 false,
44 false
45 );
46 }
47 break;
48 }
49 }
50 }
51
52 public override void OnBlockAdded(int value, int oldValue, int x, int y, int z) {
53 AddTorch(value, x, y, z);
54 }
55
56 public override void OnBlockRemoved(int value, int newValue, int x, int y, int z) {
57 RemoveTorch(x, y, z);
58 }
59
60 public override void OnBlockModified(int value, int oldValue, int x, int y, int z) {
61 RemoveTorch(x, y, z);
62 AddTorch(value, x, y, z);
63 }
64
65 public override void OnBlockGenerated(int value, int x, int y, int z, bool isLoaded) {
66 AddTorch(value, x, y, z);
67 }
68
69 public override void OnChunkDiscarding(TerrainChunk chunk) {
70 List<Point3> list = new();
71 foreach (Point3 key in m_particleSystemsByCell.Keys) {
72 if (key.X >= chunk.Origin.X
73 && key.X < chunk.Origin.X + 16
74 && key.Z >= chunk.Origin.Y
75 && key.Z < chunk.Origin.Y + 16) {
76 list.Add(key);
77 }
78 }
79 foreach (Point3 item in list) {
80 RemoveTorch(item.X, item.Y, item.Z);
81 }
82 }
83
84 public override void Load(ValuesDictionary valuesDictionary) {
85 base.Load(valuesDictionary);
86 m_subsystemParticles = Project.FindSubsystem<SubsystemParticles>(true);
87 }
88
89 public void AddTorch(int value, int x, int y, int z) {
90 Vector3 v;
91 float size;
92 switch (Terrain.ExtractContents(value)) {
93 case 31:
94 switch (Terrain.ExtractData(value)) {
95 case 0: v = new Vector3(0.5f, 0.58f, 0.27f); break;
96 case 1: v = new Vector3(0.27f, 0.58f, 0.5f); break;
97 case 2: v = new Vector3(0.5f, 0.58f, 0.73f); break;
98 case 3: v = new Vector3(0.73f, 0.58f, 0.5f); break;
99 default: v = new Vector3(0.5f, 0.53f, 0.5f); break;
100 }
101 size = 0.15f;
102 break;
103 case 132:
104 v = new Vector3(0.5f, 0.1f, 0.5f);
105 size = 0.1f;
106 break;
107 default:
108 v = new Vector3(0.5f, 0.2f, 0.5f);
109 size = 0.2f;
110 break;
111 }
112 FireParticleSystem fireParticleSystem = new(new Vector3(x, y, z) + v, size, 32f);
113 m_subsystemParticles.AddParticleSystem(fireParticleSystem);
114 m_particleSystemsByCell[new Point3(x, y, z)] = fireParticleSystem;
115 }
116
117 public void RemoveTorch(int x, int y, int z) {
118 Point3 key = new(x, y, z);
119 FireParticleSystem particleSystem = m_particleSystemsByCell[key];
120 m_subsystemParticles.RemoveParticleSystem(particleSystem);
121 m_particleSystemsByCell.Remove(key);
122 }
123 }
124}
Engine.Vector3 Vector3
virtual bool IsCollidable_(int value)
Dictionary< Point3, FireParticleSystem > m_particleSystemsByCell
override void OnChunkDiscarding(TerrainChunk chunk)
override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ)
void AddTorch(int value, int x, int y, int z)
override void OnBlockRemoved(int value, int newValue, int x, int y, int z)
override void OnBlockModified(int value, int oldValue, int x, int y, int z)
override void Load(ValuesDictionary valuesDictionary)
override void OnBlockAdded(int value, int oldValue, int x, int y, int z)
override void OnBlockGenerated(int value, int x, int y, int z, bool isLoaded)
static int ExtractContents(int value)
static int ExtractData(int value)
ValuesDictionary ValuesDictionary
static Point3 FaceToPoint3(int face)