123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /*******************************************************************************************
- *
- * raylib [models] example - Detect basic 3d collisions (box vs sphere vs box)
- *
- * Example originally created with raylib 1.3, last time updated with raylib 3.5
- *
- * Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
- * BSD-like license that allows static linking with closed source software
- *
- * Copyright (c) 2015-2024 Ramon Santamaria (@raysan5)
- *
- ********************************************************************************************/
- #include "raylib.h"
- //------------------------------------------------------------------------------------
- // Program main entry point
- //------------------------------------------------------------------------------------
- int main(void)
- {
- // Initialization
- //--------------------------------------------------------------------------------------
- const int screenWidth = 800;
- const int screenHeight = 450;
- InitWindow(screenWidth, screenHeight, "raylib [models] example - box collisions");
- // Define the camera to look into our 3d world
- Camera camera = { { 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f, 0 };
- Vector3 playerPosition = { 0.0f, 1.0f, 2.0f };
- Vector3 playerSize = { 1.0f, 2.0f, 1.0f };
- Color playerColor = GREEN;
- Vector3 enemyBoxPos = { -4.0f, 1.0f, 0.0f };
- Vector3 enemyBoxSize = { 2.0f, 2.0f, 2.0f };
- Vector3 enemySpherePos = { 4.0f, 0.0f, 0.0f };
- float enemySphereSize = 1.5f;
- bool collision = false;
- SetTargetFPS(60); // Set our game to run at 60 frames-per-second
- //--------------------------------------------------------------------------------------
- // Main game loop
- while (!WindowShouldClose()) // Detect window close button or ESC key
- {
- // Update
- //----------------------------------------------------------------------------------
- // Move player
- if (IsKeyDown(KEY_RIGHT)) playerPosition.x += 0.2f;
- else if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 0.2f;
- else if (IsKeyDown(KEY_DOWN)) playerPosition.z += 0.2f;
- else if (IsKeyDown(KEY_UP)) playerPosition.z -= 0.2f;
- collision = false;
- // Check collisions player vs enemy-box
- if (CheckCollisionBoxes(
- (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2,
- playerPosition.y - playerSize.y/2,
- playerPosition.z - playerSize.z/2 },
- (Vector3){ playerPosition.x + playerSize.x/2,
- playerPosition.y + playerSize.y/2,
- playerPosition.z + playerSize.z/2 }},
- (BoundingBox){(Vector3){ enemyBoxPos.x - enemyBoxSize.x/2,
- enemyBoxPos.y - enemyBoxSize.y/2,
- enemyBoxPos.z - enemyBoxSize.z/2 },
- (Vector3){ enemyBoxPos.x + enemyBoxSize.x/2,
- enemyBoxPos.y + enemyBoxSize.y/2,
- enemyBoxPos.z + enemyBoxSize.z/2 }})) collision = true;
- // Check collisions player vs enemy-sphere
- if (CheckCollisionBoxSphere(
- (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2,
- playerPosition.y - playerSize.y/2,
- playerPosition.z - playerSize.z/2 },
- (Vector3){ playerPosition.x + playerSize.x/2,
- playerPosition.y + playerSize.y/2,
- playerPosition.z + playerSize.z/2 }},
- enemySpherePos, enemySphereSize)) collision = true;
- if (collision) playerColor = RED;
- else playerColor = GREEN;
- //----------------------------------------------------------------------------------
- // Draw
- //----------------------------------------------------------------------------------
- BeginDrawing();
- ClearBackground(RAYWHITE);
- BeginMode3D(camera);
- // Draw enemy-box
- DrawCube(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, GRAY);
- DrawCubeWires(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, DARKGRAY);
- // Draw enemy-sphere
- DrawSphere(enemySpherePos, enemySphereSize, GRAY);
- DrawSphereWires(enemySpherePos, enemySphereSize, 16, 16, DARKGRAY);
- // Draw player
- DrawCubeV(playerPosition, playerSize, playerColor);
- DrawGrid(10, 1.0f); // Draw a grid
- EndMode3D();
- DrawText("Move player with arrow keys to collide", 220, 40, 20, GRAY);
- DrawFPS(10, 10);
- EndDrawing();
- //----------------------------------------------------------------------------------
- }
- // De-Initialization
- //--------------------------------------------------------------------------------------
- CloseWindow(); // Close window and OpenGL context
- //--------------------------------------------------------------------------------------
- return 0;
- }
|