Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
SubsystemMagmaBlockBehavior.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
6 public Random m_random = new();
7
9
11
12 public float m_soundVolume;
13
14 public override int[] HandledBlocks => [92];
15
17
18 public SubsystemMagmaBlockBehavior() : base(BlocksManager.FluidBlocks[92], false) { }
19
20 public virtual void Update(float dt) {
21 if (SubsystemTime.PeriodicGameTimeEvent(2.0, 0.0)) {
23 }
24 if (SubsystemTime.PeriodicGameTimeEvent(1.0, 0.75)) {
25 float num = float.MaxValue;
26 foreach (Vector3 listenerPosition in SubsystemAudio.ListenerPositions) {
27 float? num2 = CalculateDistanceToFluid(listenerPosition, 8, false);
28 if (num2.HasValue
29 && num2.Value < num) {
30 num = num2.Value;
31 }
32 }
33 m_soundVolume = SubsystemAudio.CalculateVolume(num, 2f, 3.5f);
34 }
36 }
37
38 public override void OnBlockAdded(int value, int oldValue, int x, int y, int z) {
39 base.OnBlockAdded(value, oldValue, x, y, z);
40 for (int i = -1; i <= 1; i++) {
41 for (int j = -1; j <= 1; j++) {
42 for (int k = -1; k <= 1; k++) {
43 ApplyMagmaNeighborhoodEffect(x + i, y + j, z + k);
44 }
45 }
46 }
47 }
48
49 public override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ) {
50 base.OnNeighborBlockChanged(x, y, z, neighborX, neighborY, neighborZ);
51 ApplyMagmaNeighborhoodEffect(neighborX, neighborY, neighborZ);
52 }
53
54 public override bool OnFluidInteract(int interactValue, int x, int y, int z, int fluidValue) {
55 if (BlocksManager.Blocks[Terrain.ExtractContents(interactValue)] is WaterBlock) {
56 SubsystemAudio.PlayRandomSound("Audio/Sizzles", 1f, m_random.Float(-0.1f, 0.1f), new Vector3(x, y, z), 5f, true);
58 0,
59 x,
60 y,
61 z,
62 0,
63 false,
64 false
65 );
66 Set(x, y, z, 67);
67 return true;
68 }
69 return base.OnFluidInteract(interactValue, x, y, z, fluidValue);
70 }
71
72 public override void Load(ValuesDictionary valuesDictionary) {
73 base.Load(valuesDictionary);
75 m_subsystemParticles = Project.FindSubsystem<SubsystemParticles>(true);
76 }
77
78 public void ApplyMagmaNeighborhoodEffect(int x, int y, int z) {
79 m_subsystemFireBlockBehavior.SetCellOnFire(x, y, z, 1f);
80 switch (SubsystemTerrain.Terrain.GetCellContents(x, y, z)) {
81 case 61:
82 case 62:
84 0,
85 x,
86 y,
87 z,
88 0,
89 false,
90 false
91 );
92 m_subsystemParticles.AddParticleSystem(new BurntDebrisParticleSystem(SubsystemTerrain, new Vector3(x + 0.5f, y + 1, z + 0.5f)));
93 break;
94 case 8:
95 SubsystemTerrain.ChangeCell(x, y, z, 2);
96 m_subsystemParticles.AddParticleSystem(new BurntDebrisParticleSystem(SubsystemTerrain, new Vector3(x + 0.5f, y + 1, z + 0.5f)));
97 break;
98 }
99 }
100 }
101}
Engine.Vector3 Vector3
static int Max(int x1, int x2)
void Set(int x, int y, int z, int value)
float? CalculateDistanceToFluid(Vector3 p, int radius, bool flowingFluidOnly)
SubsystemFluidBlockBehavior(FluidBlock fluidBlock, bool generateSources)
override void Load(ValuesDictionary valuesDictionary)
override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ)
SubsystemFireBlockBehavior m_subsystemFireBlockBehavior
override bool OnFluidInteract(int interactValue, int x, int y, int z, int fluidValue)
override void OnBlockAdded(int value, int oldValue, int x, int y, int z)
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 GetCellContents(int x, int y, int z)
ValuesDictionary ValuesDictionary