models_box_collisions.lua 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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.6 (www.raylib.com)
  6. -- raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
  7. --
  8. -- Copyright (c) 2014-2016 Ramon Santamaria (@raysan5)
  9. --
  10. -------------------------------------------------------------------------------------------
  11. -- Initialization
  12. -------------------------------------------------------------------------------------------
  13. local screenWidth = 800
  14. local screenHeight = 450
  15. InitWindow(screenWidth, screenHeight, "raylib [models] example - box collisions")
  16. -- Define the camera to look into our 3d world
  17. local camera = Camera(Vector3(0.0, 10.0, 10.0), Vector3(0.0, 0.0, 0.0), Vector3(0.0, 1.0, 0.0), 45.0)
  18. local playerPosition = Vector3(0.0, 1.0, 2.0)
  19. local playerSize = Vector3(1.0, 2.0, 1.0)
  20. local playerColor = GREEN
  21. local enemyBoxPos = Vector3(-4.0, 1.0, 0.0)
  22. local enemyBoxSize = Vector3(2.0, 2.0, 2.0)
  23. local enemySpherePos = Vector3(4.0, 0.0, 0.0)
  24. local enemySphereSize = 1.5
  25. local collision = false
  26. SetTargetFPS(60) -- Set our game to run at 60 frames-per-second
  27. -------------------------------------------------------------------------------------------
  28. -- Main game loop
  29. while not WindowShouldClose() do -- Detect window close button or ESC key
  30. -- Update
  31. ---------------------------------------------------------------------------------------
  32. -- Move player
  33. if (IsKeyDown(KEY.RIGHT)) then playerPosition.x = playerPosition.x + 0.2
  34. elseif (IsKeyDown(KEY.LEFT)) then playerPosition.x = playerPosition.x - 0.2
  35. elseif (IsKeyDown(KEY.DOWN)) then playerPosition.z = playerPosition.z + 0.2
  36. elseif (IsKeyDown(KEY.UP)) then playerPosition.z = playerPosition.z - 0.2 end
  37. collision = false
  38. -- Check collisions player vs enemy-box
  39. if (CheckCollisionBoxes(
  40. BoundingBox(Vector3(playerPosition.x - playerSize.x/2,
  41. playerPosition.y - playerSize.y/2,
  42. playerPosition.z - playerSize.z/2),
  43. Vector3(playerPosition.x + playerSize.x/2,
  44. playerPosition.y + playerSize.y/2,
  45. playerPosition.z + playerSize.z/2)),
  46. BoundingBox(Vector3(enemyBoxPos.x - enemyBoxSize.x/2,
  47. enemyBoxPos.y - enemyBoxSize.y/2,
  48. enemyBoxPos.z - enemyBoxSize.z/2),
  49. Vector3(enemyBoxPos.x + enemyBoxSize.x/2,
  50. enemyBoxPos.y + enemyBoxSize.y/2,
  51. enemyBoxPos.z + enemyBoxSize.z/2)))) then collision = true
  52. end
  53. -- Check collisions player vs enemy-sphere
  54. if (CheckCollisionBoxSphere(
  55. BoundingBox(Vector3(playerPosition.x - playerSize.x/2,
  56. playerPosition.y - playerSize.y/2,
  57. playerPosition.z - playerSize.z/2),
  58. Vector3(playerPosition.x + playerSize.x/2,
  59. playerPosition.y + playerSize.y/2,
  60. playerPosition.z + playerSize.z/2)),
  61. enemySpherePos, enemySphereSize)) then collision = true
  62. end
  63. if (collision) then playerColor = RED
  64. else playerColor = GREEN end
  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, 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. end
  86. -- De-Initialization
  87. -------------------------------------------------------------------------------------------
  88. CloseWindow() -- Close window and OpenGL context
  89. -------------------------------------------------------------------------------------------