1
0
Fork 0
mirror of https://git.coom.tech/drummyfish/raycastlib.git synced 2024-11-21 20:29:59 +01:00

Fix movement

This commit is contained in:
Miloslav Číž 2018-09-07 18:19:25 +02:00
parent 1607d8bb16
commit f83bdf40e3

View file

@ -982,6 +982,7 @@ void moveCameraWithCollision(Camera *camera, Vector2D planeOffset,
Unit bottomLimit = camera->height - camera->collisionHeightBelow; Unit bottomLimit = camera->height - camera->collisionHeightBelow;
Unit topLimit = camera->height + camera->collisionHeightAbove; Unit topLimit = camera->height + camera->collisionHeightAbove;
// checks a single square for collision against the camera
#define collCheck(dir,s1,s2)\ #define collCheck(dir,s1,s2)\
{\ {\
Unit height = floorHeightFunc(s1,s2);\ Unit height = floorHeightFunc(s1,s2);\
@ -995,22 +996,28 @@ void moveCameraWithCollision(Camera *camera, Vector2D planeOffset,
}\ }\
}\ }\
#define collCheckOrtho(dir,dir2,s1,s2)\ // check a collision against non-diagonal square
#define collCheckOrtho(dir,dir2,s1,s2,x)\
if (dir##SquareNew != dir##Square)\ if (dir##SquareNew != dir##Square)\
collCheck(dir,s1,s2)\ collCheck(dir,s1,s2)\
if (!dir##Collides)\ if (!dir##Collides)\
{\ { /* now also check for coll on the neighbouring square */ \
int16_t dir2##Square2 = divRoundDown(corner.dir2 - dir2##Dir *\ int16_t dir2##Square2 = divRoundDown(corner.dir2 - dir2##Dir *\
camera->collisionRadius,UNITS_PER_SQUARE);\ camera->collisionRadius,UNITS_PER_SQUARE);\
if (dir2##Square2 != dir2##Square)\ if (dir2##Square2 != dir2##Square)\
collCheck(dir,dir2##Square2,dir##SquareNew)\ {\
if (x)\
collCheck(dir,dir##SquareNew,dir2##Square2)\
else\
collCheck(dir,dir2##Square2,dir##SquareNew)\
}\
} }
int8_t xCollides = false; int8_t xCollides = false;
collCheckOrtho(x,y,xSquareNew,ySquare) collCheckOrtho(x,y,xSquareNew,ySquare,1)
int8_t yCollides = false; int8_t yCollides = false;
collCheckOrtho(y,x,xSquare,ySquareNew) collCheckOrtho(y,x,xSquare,ySquareNew,0)
#define collHandle(dir)\ #define collHandle(dir)\
if (dir##Collides)\ if (dir##Collides)\