From 2c3c1f15273835923d9bd4950a19ee88a95ee0f4 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Thu, 11 May 2017 14:34:36 +0200 Subject: Tracer replacement (#3704) * Replaced cTracer usage with cLineBlockTracer. * Exported new cLineBlockTracer utility functions to Lua API. --- src/World.cpp | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) (limited to 'src/World.cpp') diff --git a/src/World.cpp b/src/World.cpp index 2614ead7b..447e2cf25 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -13,6 +13,7 @@ #include "Generating/ChunkDesc.h" #include "SetChunkData.h" #include "DeadlockDetect.h" +#include "LineBlockTracer.h" // Serializers #include "WorldStorage/ScoreboardSerializer.h" @@ -50,11 +51,6 @@ #include "Bindings/PluginManager.h" #include "Blocks/BlockHandler.h" -#include "Tracer.h" - -// DEBUG: Test out the cLineBlockTracer class by tracing a few lines: -#include "LineBlockTracer.h" - #ifndef _WIN32 #include #endif @@ -3190,11 +3186,8 @@ bool cWorld::DoWithPlayerByUUID(const AString & a_PlayerUUID, cLambdaPlayerCallb -// TODO: This interface is dangerous! cPlayer * cWorld::FindClosestPlayer(const Vector3d & a_Pos, float a_SightLimit, bool a_CheckLineOfSight) { - cTracer LineOfSight(this); - double ClosestDistance = a_SightLimit; cPlayer * ClosestPlayer = nullptr; @@ -3208,22 +3201,23 @@ cPlayer * cWorld::FindClosestPlayer(const Vector3d & a_Pos, float a_SightLimit, Vector3f Pos = (*itr)->GetPosition(); double Distance = (Pos - a_Pos).Length(); - if (Distance < ClosestDistance) + // If the player is too far, skip them: + if (Distance > ClosestDistance) { - if (a_CheckLineOfSight) - { - if (!LineOfSight.Trace(a_Pos, (Pos - a_Pos), static_cast((Pos - a_Pos).Length()))) - { - ClosestDistance = Distance; - ClosestPlayer = *itr; - } - } - else - { - ClosestDistance = Distance; - ClosestPlayer = *itr; - } + continue; } + + // Check LineOfSight, if requested: + if ( + a_CheckLineOfSight && + !cLineBlockTracer::LineOfSightTrace(*this, a_Pos, Pos, cLineBlockTracer::losAirWater) + ) + { + continue; + } + + ClosestDistance = Distance; + ClosestPlayer = *itr; } return ClosestPlayer; } -- cgit v1.2.3