Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
SubsystemIvyBlockBehavior.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
7
8 public Random m_random = new();
9
10 public Dictionary<Point3, int> m_toUpdate = [];
11
13
14 public override int[] HandledBlocks => [];
15
16 public virtual void Update(float dt) {
17 if (m_subsystemTime.PeriodicGameTimeEvent(60.0, 0.0)) {
18 foreach (KeyValuePair<Point3, int> item in m_toUpdate) {
19 if (SubsystemTerrain.Terrain.GetCellContents(item.Key.X, item.Key.Y, item.Key.Z) == 0) {
20 SubsystemTerrain.ChangeCell(item.Key.X, item.Key.Y, item.Key.Z, item.Value);
21 }
22 }
23 m_toUpdate.Clear();
24 }
25 }
26
27 public override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ) {
29 bool flag = false;
30 int cellValue = SubsystemTerrain.Terrain.GetCellValue(x, y + 1, z);
31 if (Terrain.ExtractContents(cellValue) == 197
32 && IvyBlock.GetFace(Terrain.ExtractData(cellValue)) == face) {
33 flag = true;
34 }
35 if (!flag) {
36 Point3 point = CellFace.FaceToPoint3(face);
37 int cellValue2 = SubsystemTerrain.Terrain.GetCellValue(x + point.X, y + point.Y, z + point.Z);
38 if (!BlocksManager.Blocks[Terrain.ExtractContents(cellValue2)].IsCollidable_(cellValue2)) {
40 0,
41 x,
42 y,
43 z,
44 0,
45 true,
46 false
47 );
48 }
49 }
50 }
51
52 public override void OnPoll(int value, int x, int y, int z, int pollPass) {
53 if (m_random.Float(0f, 1f) < 0.5f
54 && !IvyBlock.IsGrowthStopCell(x, y, z)
56 m_toUpdate[new Point3(x, y - 1, z)] = value;
57 }
58 }
59
60 public override void Load(ValuesDictionary valuesDictionary) {
61 base.Load(valuesDictionary);
62 m_subsystemTime = Project.FindSubsystem<SubsystemTime>(true);
63 }
64 }
65}
virtual bool IsCollidable_(int value)
static int GetFace(int data)
static bool IsGrowthStopCell(int x, int y, int z)
override void Load(ValuesDictionary valuesDictionary)
override void OnPoll(int value, int x, int y, int z, int pollPass)
override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ)
virtual void ChangeCell(int x, int y, int z, int value, bool updateModificationCounter=true, MovingBlock movingBlock=null)
virtual void DestroyCell(int toolLevel, int x, int y, int z, int newValue, bool noDrop, bool noParticleSystem, MovingBlock movingBlock=null)
static int ExtractContents(int value)
virtual int GetCellValue(int x, int y, int z)
virtual int GetCellContents(int x, int y, int z)
static int ExtractData(int value)
ValuesDictionary ValuesDictionary
static Point3 FaceToPoint3(int face)