diff options
Diffstat (limited to 'src/Mobs/Squid.cpp')
-rw-r--r-- | src/Mobs/Squid.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/Mobs/Squid.cpp b/src/Mobs/Squid.cpp index 00cc07e14..8ae688a1b 100644 --- a/src/Mobs/Squid.cpp +++ b/src/Mobs/Squid.cpp @@ -46,13 +46,35 @@ void cSquid::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) { return; } - int RelX = FloorC(Pos.x) - a_Chunk.GetPosX() * cChunkDef::Width; - int RelZ = FloorC(Pos.z) - a_Chunk.GetPosZ() * cChunkDef::Width; - BLOCKTYPE BlockType; - if (a_Chunk.UnboundedRelGetBlockType(RelX, RelY, RelZ, BlockType) && !IsBlockWater(BlockType) && !IsOnFire()) + + if (!IsSubmerged()) + { + if (m_AirLevel <= 0) + { + // Runs the air tick timer to check whether the squid should be damaged + if (m_AirTickTimer <= 0) + { + // Damage squid + TakeDamage(dtSuffocating, nullptr, 1, 1, 0); + // Reset timer + m_AirTickTimer = DROWNING_TICKS; + } + else + { + m_AirTickTimer--; + } + } + else + { + // Reduce air supply + m_AirLevel--; + } + } + else { - // Burn for 10 ticks, then decide again - StartBurning(10); + // Set the air back to maximum + m_AirLevel = MAX_AIR_LEVEL; + m_AirTickTimer = DROWNING_TICKS; } super::Tick(a_Dt, a_Chunk); |