models_box_collisions.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*******************************************************************************************
  2. *
  3. * raylib [models] example - Detect basic 3d collisions (box vs sphere vs box)
  4. *
  5. * This example has been created using raylib 1.3 (www.raylib.com)
  6. * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
  7. *
  8. * Copyright (c) 2015 Ramon Santamaria (@raysan5)
  9. *
  10. ********************************************************************************************/
  11. #include "raylib.h"
  12. int main()
  13. {
  14. // Initialization
  15. //--------------------------------------------------------------------------------------
  16. int screenWidth = 800;
  17. int screenHeight = 450;
  18. InitWindow(screenWidth, screenHeight, "raylib [models] example - box collisions");
  19. // Define the camera to look into our 3d world
  20. Camera camera = {{ 0.0, 10.0, 10.0 }, { 0.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 }};
  21. Vector3 playerPosition = { 0, 1, 2 };
  22. Vector3 playerSize = { 1, 2, 1 };
  23. Color playerColor = GREEN;
  24. Vector3 enemyBoxPos = { -4, 1, 0 };
  25. Vector3 enemyBoxSize = { 2, 2, 2 };
  26. Vector3 enemySpherePos = { 4, 0, 0 };
  27. float enemySphereSize = 1.5f;
  28. bool collision = false;
  29. SetTargetFPS(60); // Set our game to run at 60 frames-per-second
  30. //--------------------------------------------------------------------------------------
  31. // Main game loop
  32. while (!WindowShouldClose()) // Detect window close button or ESC key
  33. {
  34. // Update
  35. //----------------------------------------------------------------------------------
  36. // Move player
  37. if (IsKeyDown(KEY_RIGHT)) playerPosition.x += 0.2f;
  38. else if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 0.2f;
  39. else if (IsKeyDown(KEY_DOWN)) playerPosition.z += 0.2f;
  40. else if (IsKeyDown(KEY_UP)) playerPosition.z -= 0.2f;
  41. collision = false;
  42. // Check collisions player vs enemy-box
  43. if (CheckCollisionBoxes((Vector3){ playerPosition.x - playerSize.x/2,
  44. playerPosition.y - playerSize.y/2,
  45. playerPosition.z - playerSize.z/2 },
  46. (Vector3){ playerPosition.x + playerSize.x/2,
  47. playerPosition.y + playerSize.y/2,
  48. playerPosition.z + playerSize.z/2 },
  49. (Vector3){ enemyBoxPos.x - enemyBoxSize.x/2,
  50. enemyBoxPos.y - enemyBoxSize.y/2,
  51. enemyBoxPos.z - enemyBoxSize.z/2 },
  52. (Vector3){ enemyBoxPos.x + enemyBoxSize.x/2,
  53. enemyBoxPos.y + enemyBoxSize.y/2,
  54. enemyBoxPos.z + enemyBoxSize.z/2 })) collision = true;
  55. // Check collisions player vs enemy-sphere
  56. if (CheckCollisionBoxSphere((Vector3){ playerPosition.x - playerSize.x/2,
  57. playerPosition.y - playerSize.y/2,
  58. playerPosition.z - playerSize.z/2 },
  59. (Vector3){ playerPosition.x + playerSize.x/2,
  60. playerPosition.y + playerSize.y/2,
  61. playerPosition.z + playerSize.z/2 },
  62. enemySpherePos, enemySphereSize)) collision = true;
  63. if (collision) playerColor = RED;
  64. else playerColor = GREEN;
  65. //----------------------------------------------------------------------------------
  66. // Draw
  67. //----------------------------------------------------------------------------------
  68. BeginDrawing();
  69. ClearBackground(RAYWHITE);
  70. Begin3dMode(camera);
  71. // Draw enemy-box
  72. DrawCube(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, GRAY);
  73. DrawCubeWires(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, DARKGRAY);
  74. // Draw enemy-sphere
  75. DrawSphere(enemySpherePos, enemySphereSize, GRAY);
  76. DrawSphereWires(enemySpherePos, enemySphereSize, 16, 16, DARKGRAY);
  77. // Draw player
  78. DrawCubeV(playerPosition, playerSize, playerColor);
  79. DrawGrid(10.0, 1.0); // Draw a grid
  80. End3dMode();
  81. DrawText("Move player with cursors to collide", 220, 40, 20, GRAY);
  82. DrawFPS(10, 10);
  83. EndDrawing();
  84. //----------------------------------------------------------------------------------
  85. }
  86. // De-Initialization
  87. //--------------------------------------------------------------------------------------
  88. CloseWindow(); // Close window and OpenGL context
  89. //--------------------------------------------------------------------------------------
  90. return 0;
  91. }