diff options
author | Bond-009 <bond.009@outlook.com> | 2017-08-25 15:44:36 +0200 |
---|---|---|
committer | Alexander Harkness <me@bearbin.net> | 2017-08-25 15:44:36 +0200 |
commit | 3c8712d871fbd7f3bf936f4c3f9c8b7f5ec886fb (patch) | |
tree | 10475cfc149b63e9de7e76e5efe7228d5c998752 /src/Mobs/Squid.cpp | |
parent | Don't assert when placing beds in older versions (#3916) (diff) | |
download | cuberite-3c8712d871fbd7f3bf936f4c3f9c8b7f5ec886fb.tar cuberite-3c8712d871fbd7f3bf936f4c3f9c8b7f5ec886fb.tar.gz cuberite-3c8712d871fbd7f3bf936f4c3f9c8b7f5ec886fb.tar.bz2 cuberite-3c8712d871fbd7f3bf936f4c3f9c8b7f5ec886fb.tar.lz cuberite-3c8712d871fbd7f3bf936f4c3f9c8b7f5ec886fb.tar.xz cuberite-3c8712d871fbd7f3bf936f4c3f9c8b7f5ec886fb.tar.zst cuberite-3c8712d871fbd7f3bf936f4c3f9c8b7f5ec886fb.zip |
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); |