1
0
Fork 0
mirror of https://git.coom.tech/drummyfish/raycastlib.git synced 2024-11-23 20:49:57 +01:00

Add typedefs

This commit is contained in:
Miloslav Číž 2018-08-31 11:51:03 +02:00
parent c6bcb70158
commit 31fcc271c3

View file

@ -63,6 +63,16 @@ typedef struct
uint8_t direction; ///< Direction of hit. uint8_t direction; ///< Direction of hit.
} HitResult; } HitResult;
typedef struct
{
int8_t type; ///< Type of pixel: 0 - wall, 1 - floor, 2 - ceiling.
Unit depth; ///< Corrected depth.
HitResult hit; ///< Corresponding ray hit.
} PixelInfo;
typedef int16_t (*ArrayFunction)(int16_t x, int16_t y);
typedef void (*HitFunction)(uint16_t pos, HitResult h, uint16_t hitNo, Ray r);
/** /**
Casts a single ray and returns the first collision result. Casts a single ray and returns the first collision result.
@ -75,19 +85,13 @@ typedef struct
@return The first collision result. @return The first collision result.
*/ */
/** HitResult castRay(Ray ray, ArrayFunction arrayFunc, uint16_t maxSteps);
Like castRaysMultiHit but only returns the first hit.
*/
HitResult castRay(Ray ray, int16_t (*arrayFunc)(int16_t, int16_t),
uint16_t maxSteps);
/** /**
Casts a single ray and returns a list of collisions. Casts a single ray and returns a list of collisions.
*/ */
void castRayMultiHit(Ray ray, int16_t (*arrayFunc)(int16_t x, int16_t y), void castRayMultiHit(Ray ray, ArrayFunction arrayFunc, uint16_t maxSteps,
uint16_t maxSteps, HitResult *hitResults, uint16_t *hitResultsLen, HitResult *hitResults, uint16_t *hitResultsLen, uint16_t maxHits);
uint16_t maxHits);
Vector2D angleToDirection(Unit angle); Vector2D angleToDirection(Unit angle);
Unit cosInt(Unit input); Unit cosInt(Unit input);
@ -118,9 +122,8 @@ Unit perspectiveScale(Unit originalSize, Unit distance, Unit fov);
*/ */
void castRaysMultiHit( void castRaysMultiHit(
Vector2D position, Unit directionAngle, Unit fovAngle, uint16_t resolution, Vector2D position, Unit directionAngle, Unit fovAngle, uint16_t resolution,
int16_t (*arrayFunc)(int16_t x, int16_t y), ArrayFunction arrayFunc, HitFunction hitFunc, uint16_t maxHits,
void (*hitFunc)(uint16_t pos, HitResult hit, uint16_t hitNo, Ray r), uint16_t maxSteps);
uint16_t maxHits, uint16_t maxSteps);
//============================================================================= //=============================================================================
// privates // privates
@ -295,7 +298,7 @@ void castRaySquare(Ray localRay, Vector2D *nextCellOffset,
collisionPointOffset->y += nextCellOffset->y; collisionPointOffset->y += nextCellOffset->y;
} }
void castRayMultiHit(Ray ray, int16_t (*arrayFunc)(int16_t, int16_t), void castRayMultiHit(Ray ray, ArrayFunction arrayFunc,
uint16_t maxSteps, HitResult *hitResults, uint16_t *hitResultsLen, uint16_t maxSteps, HitResult *hitResults, uint16_t *hitResultsLen,
uint16_t maxHits) uint16_t maxHits)
{ {
@ -360,8 +363,7 @@ void castRayMultiHit(Ray ray, int16_t (*arrayFunc)(int16_t, int16_t),
} }
} }
HitResult castRay(Ray ray, int16_t (*arrayFunc)(int16_t, int16_t), HitResult castRay(Ray ray, ArrayFunction arrayFunc, uint16_t maxSteps)
uint16_t maxSteps)
{ {
HitResult result; HitResult result;
uint16_t len; uint16_t len;
@ -376,9 +378,8 @@ HitResult castRay(Ray ray, int16_t (*arrayFunc)(int16_t, int16_t),
void castRaysMultiHit( void castRaysMultiHit(
Vector2D position, Unit directionAngle, Unit fovAngle, uint16_t resolution, Vector2D position, Unit directionAngle, Unit fovAngle, uint16_t resolution,
int16_t (*arrayFunc)(int16_t x, int16_t y), ArrayFunction arrayFunc, HitFunction hitFunc , uint16_t maxHits,
void (*hitFunc)(uint16_t pos, HitResult hit, uint16_t hitNo, Ray r), uint16_t maxSteps)
uint16_t maxHits, uint16_t maxSteps)
{ {
uint_fast16_t fovHalf = fovAngle / 2; uint_fast16_t fovHalf = fovAngle / 2;
@ -389,7 +390,7 @@ void castRaysMultiHit(
Unit dY = dir2.y - dir1.y; Unit dY = dir2.y - dir1.y;
HitResult hits[maxHits]; HitResult hits[maxHits];
uint_fast16_t hitCount; uint16_t hitCount;
Ray r; Ray r;
r.start = position; r.start = position;