summaryrefslogtreecommitdiffstats
path: root/src/Mobs/AggressiveMonster.cpp
diff options
context:
space:
mode:
authorMattes D <github@xoft.cz>2017-05-11 14:34:36 +0200
committerworktycho <work.tycho@gmail.com>2017-05-11 14:34:36 +0200
commit2c3c1f15273835923d9bd4950a19ee88a95ee0f4 (patch)
treecda390aa07a202497271439c2b330643074239df /src/Mobs/AggressiveMonster.cpp
parentExported cFallingBlock and cExpOrb (#3700) (diff)
downloadcuberite-2c3c1f15273835923d9bd4950a19ee88a95ee0f4.tar
cuberite-2c3c1f15273835923d9bd4950a19ee88a95ee0f4.tar.gz
cuberite-2c3c1f15273835923d9bd4950a19ee88a95ee0f4.tar.bz2
cuberite-2c3c1f15273835923d9bd4950a19ee88a95ee0f4.tar.lz
cuberite-2c3c1f15273835923d9bd4950a19ee88a95ee0f4.tar.xz
cuberite-2c3c1f15273835923d9bd4950a19ee88a95ee0f4.tar.zst
cuberite-2c3c1f15273835923d9bd4950a19ee88a95ee0f4.zip
Diffstat (limited to 'src/Mobs/AggressiveMonster.cpp')
-rw-r--r--src/Mobs/AggressiveMonster.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/Mobs/AggressiveMonster.cpp b/src/Mobs/AggressiveMonster.cpp
index d8bdc4af5..fec14e6e9 100644
--- a/src/Mobs/AggressiveMonster.cpp
+++ b/src/Mobs/AggressiveMonster.cpp
@@ -5,7 +5,7 @@
#include "../World.h"
#include "../Entities/Player.h"
-#include "../Tracer.h"
+#include "../LineBlockTracer.h"
@@ -70,17 +70,20 @@ void cAggressiveMonster::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk)
CheckEventSeePlayer(a_Chunk);
}
- if (GetTarget() == nullptr)
+ auto target = GetTarget();
+ if (target == nullptr)
{
return;
}
- cTracer LineOfSight(GetWorld());
+ // TODO: Currently all mobs see through lava, but only Nether-native mobs should be able to.
Vector3d MyHeadPosition = GetPosition() + Vector3d(0, GetHeight(), 0);
- Vector3d AttackDirection(GetTarget()->GetPosition() + Vector3d(0, GetTarget()->GetHeight(), 0) - MyHeadPosition);
-
-
- if (TargetIsInRange() && !LineOfSight.Trace(MyHeadPosition, AttackDirection, static_cast<int>(AttackDirection.Length())) && (GetHealth() > 0.0))
+ Vector3d TargetPosition = target->GetPosition() + Vector3d(0, target->GetHeight(), 0);
+ if (
+ TargetIsInRange() &&
+ cLineBlockTracer::LineOfSightTrace(*GetWorld(), MyHeadPosition, TargetPosition, cLineBlockTracer::losAirWaterLava) &&
+ (GetHealth() > 0.0)
+ )
{
// Attack if reached destination, target isn't null, and have a clear line of sight to target (so won't attack through walls)
Attack(a_Dt);