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

Add angleToDirection

This commit is contained in:
Miloslav Číž 2018-08-23 09:35:10 +02:00
parent b973df588b
commit d37870efb1
2 changed files with 23 additions and 8 deletions

View file

@ -11,6 +11,8 @@
- X axis goes right. - X axis goes right.
- Y axis goes up. - Y axis goes up.
- Each game square is UNITS_PER_SQUARE * UNITS_PER_SQUARE. - Each game square is UNITS_PER_SQUARE * UNITS_PER_SQUARE.
- Angles are in Units, 0 means pointing right (x+) and positively rotates
clockwise, a full angle has UNITS_PER_SQUARE Units.
*/ */
#define UNITS_PER_SQUARE 1024 #define UNITS_PER_SQUARE 1024
@ -21,21 +23,21 @@ typedef int32_t Unit; /**< Smallest spatial unit, there is UNITS_PER_SQUARE
#define logVector2D(v)\ #define logVector2D(v)\
printf("[%d,%d]\n",v.x,v.y); printf("[%d,%d]\n",v.x,v.y);
#define logRay(r)\ #define logRay(r){\
printf("ray:\n");\ printf("ray:\n");\
printf(" start: ");\ printf(" start: ");\
logVector2D(r.start);\ logVector2D(r.start);\
printf(" dir: ");\ printf(" dir: ");\
logVector2D(r.direction);\ logVector2D(r.direction);}\
#define logHitResult(h)\ #define logHitResult(h){\
printf("hit:\n");\ printf("hit:\n");\
printf(" sqaure: ");\ printf(" sqaure: ");\
logVector2D(h.square);\ logVector2D(h.square);\
printf(" pos: ");\ printf(" pos: ");\
logVector2D(h.position);\ logVector2D(h.position);\
printf(" dist: %d", h.distance);\ printf(" dist: %d", h.distance);\
printf(" texcoord: %d", h.textureCoord);\ printf(" texcoord: %d", h.textureCoord);}\
/// Position in 2D space. /// Position in 2D space.
typedef struct typedef struct
@ -83,6 +85,7 @@ void castRayMultiHit(Ray ray, int16_t (*arrayFunc)(int16_t, int16_t),
uint16_t maxSteps, HitResult *hitResults, uint16_t *hitResultsLen, uint16_t maxSteps, HitResult *hitResults, uint16_t *hitResultsLen,
uint16_t maxHits); uint16_t maxHits);
Vector2D angleToDirection(Unit angle);
Unit cosInt(Unit input); Unit cosInt(Unit input);
Unit sinInt(Unit input); Unit sinInt(Unit input);
uint16_t sqrtInt(uint32_t value); uint16_t sqrtInt(uint32_t value);
@ -128,7 +131,17 @@ Unit cosInt(Unit input)
Unit sinInt(Unit input) Unit sinInt(Unit input)
{ {
return cosInt(input - UNITS_PER_SQUARE / 2); return cosInt(input - UNITS_PER_SQUARE / 4);
}
Vector2D angleToDirection(Unit angle)
{
Vector2D result;
result.x = cosInt(angle);
result.y = -1 * sinInt(angle);
return result;
} }
uint16_t sqrtInt(uint32_t value) uint16_t sqrtInt(uint32_t value)

8
test.c
View file

@ -80,10 +80,12 @@ int main()
{ {
Unit v = sinInt(i); Unit v = sinInt(i);
for (int j = 0; j < (v + UNITS_PER_SQUARE) / 64; ++j) logVector2D(angleToDirection(i));
printf(".");
printf("\n"); //for (int j = 0; j < (v + UNITS_PER_SQUARE) / 64; ++j)
// printf(".");
//printf("\n");
} }
return 0; return 0;