mirror of
https://github.com/raysan5/raylib.git
synced 2026-01-10 21:48:46 +01:00
examples/models: optimize collision check in first_person_maze (#5478)
Limit collision detection to the player surrounding cells instead of iterating the full cubicmap each frame.
This commit is contained in:
@ -80,12 +80,13 @@ int main(void)
|
|||||||
if (playerCellY < 0) playerCellY = 0;
|
if (playerCellY < 0) playerCellY = 0;
|
||||||
else if (playerCellY >= cubicmap.height) playerCellY = cubicmap.height - 1;
|
else if (playerCellY >= cubicmap.height) playerCellY = cubicmap.height - 1;
|
||||||
|
|
||||||
// Check map collisions using image data and player position
|
// Check map collisions using image data and player position against surrounding cells only
|
||||||
// TODO: Improvement: Just check player surrounding cells for collision
|
for (int y = playerCellY - 1; y <= playerCellY + 1; y++)
|
||||||
for (int y = 0; y < cubicmap.height; y++)
|
|
||||||
{
|
{
|
||||||
for (int x = 0; x < cubicmap.width; x++)
|
if (y < 0 || y >= cubicmap.height) continue;
|
||||||
|
for (int x = playerCellX - 1; x <= playerCellX + 1; x++)
|
||||||
{
|
{
|
||||||
|
if (x < 0 || x >= cubicmap.width) continue;
|
||||||
if ((mapPixels[y*cubicmap.width + x].r == 255) && // Collision: white pixel, only check R channel
|
if ((mapPixels[y*cubicmap.width + x].r == 255) && // Collision: white pixel, only check R channel
|
||||||
(CheckCollisionCircleRec(playerPos, playerRadius,
|
(CheckCollisionCircleRec(playerPos, playerRadius,
|
||||||
(Rectangle){ mapPosition.x - 0.5f + x*1.0f, mapPosition.z - 0.5f + y*1.0f, 1.0f, 1.0f })))
|
(Rectangle){ mapPosition.x - 0.5f + x*1.0f, mapPosition.z - 0.5f + y*1.0f, 1.0f, 1.0f })))
|
||||||
|
|||||||
Reference in New Issue
Block a user