summaryrefslogtreecommitdiffstats
path: root/src/Physics/Tracers/LineBlockTracer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Physics/Tracers/LineBlockTracer.h')
-rw-r--r--src/Physics/Tracers/LineBlockTracer.h78
1 files changed, 15 insertions, 63 deletions
diff --git a/src/Physics/Tracers/LineBlockTracer.h b/src/Physics/Tracers/LineBlockTracer.h
index b1dacee20..41b26c354 100644
--- a/src/Physics/Tracers/LineBlockTracer.h
+++ b/src/Physics/Tracers/LineBlockTracer.h
@@ -1,7 +1,7 @@
// LineBlockTracer.h
-// Declares the cLineBlockTracer class representing a cBlockTracer that traces along a straight line between two points
+// Declares the LineBlockTracer namespace representing a tracer that visits every block along a straight line between two points
@@ -15,47 +15,36 @@
-// fwd: Chunk.h
class cChunk;
+class cWorld;
-class cLineBlockTracer:
- public cBlockTracer
+namespace LineBlockTracer
{
- using Super = cBlockTracer;
-
-public:
-
- enum eLineOfSight
+ /* Bit flags used for LineOfSightTrace's Sight parameter. */
+ enum LineOfSight
{
- // Bit flags used for LineOfSightTrace's Sight parameter:
- losAir = 1, // Can see through air
- losWater = 2, // Can see through water
- losLava = 4, // Can see through lava
+ Air = 1, // Can see through air.
+ Water = 2, // Can see through water.
+ Lava = 4, // Can see through lava.
// Common combinations:
- losAirWaterLava = losAir | losWater | losLava,
- losAirWater = losAir | losWater,
+ AirWaterLava = Air | Water | Lava,
+ AirWater = Air | Water,
};
-
- cLineBlockTracer(cWorld & a_World, cCallbacks & a_Callbacks);
-
/** Traces one line between Start and End; returns true if the entire line was traced (until OnNoMoreHits()) */
- bool Trace(Vector3d a_Start, Vector3d a_End);
-
-
- // Utility functions for simple one-line usage:
+ bool Trace(const cChunk & a_Chunk, BlockTracerCallbacks & a_Callbacks, Vector3d a_Start, Vector3d a_End);
/** Traces one line between Start and End; returns true if the entire line was traced (until OnNoMoreHits()) */
- static bool Trace(cWorld & a_World, cCallbacks & a_Callbacks, const Vector3d a_Start, const Vector3d a_End);
+ bool Trace(cWorld & a_World, BlockTracerCallbacks & a_Callbacks, const Vector3d a_Start, const Vector3d a_End);
/** Returns true if the two positions are within line of sight (not obscured by blocks).
a_Sight specifies which blocks are considered transparent for the trace, is an OR-combination of eLineOfSight constants. */
- static bool LineOfSightTrace(cWorld & a_World, const Vector3d & a_Start, const Vector3d & a_End, int a_Sight);
+ bool LineOfSightTrace(cWorld & a_World, const Vector3d & a_Start, const Vector3d & a_End, LineOfSight a_Sight);
/** Traces until the first solid block is hit (or until end, whichever comes first.
If a solid block was hit, returns true and fills a_HitCoords, a_HitBlockCoords and a_HitBlockFace.
@@ -63,48 +52,11 @@ public:
a_HitCoords is the exact coords of the hit,
a_HitBlockCoords are the coords of the solid block that was hit,
a_HitBlockFace is the face of the solid block that was hit. */
- static bool FirstSolidHitTrace(
+ bool FirstSolidHitTrace(
cWorld & a_World,
const Vector3d & a_Start, const Vector3d & a_End,
Vector3d & a_HitCoords,
Vector3i & a_HitBlockCoords,
eBlockFace & a_HitBlockFace
);
-
-protected:
- /** The start point of the trace */
- Vector3d m_Start;
-
- /** The end point of the trace */
- Vector3d m_End;
-
- /** The difference in coords, End - Start */
- Vector3d m_Diff;
-
- /** The increment at which the block coords are going from Start to End; either +1 or -1 */
- Vector3i m_Dir;
-
- /** The current block */
- Vector3i m_Current;
-
- /** The face through which the current block has been entered */
- eBlockFace m_CurrentFace;
-
-
- /** Adjusts the start point above the world to just at the world's top */
- void FixStartAboveWorld(void);
-
- /** Adjusts the start point below the world to just at the world's bottom */
- void FixStartBelowWorld(void);
-
- /** Calculates the XZ coords of an intersection with the specified Yconst plane; assumes that such an intersection exists */
- void CalcXZIntersection(double a_Y, double & a_IntersectX, double & a_IntersectZ);
-
- /** Moves m_Current to the next block on the line; returns false if no move is possible (reached the end) */
- bool MoveToNextBlock(void);
-
- bool ChunkCallback(cChunk * a_Chunk);
-} ;
-
-
-
+}