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
12#include "raylib.h"
13
14int main(void)
15{
16 // Initialization
17 //--------------------------------------------------------------------------------------
18 const int screenWidth = 800;
19 const int screenHeight = 450;
20
21 InitWindow(screenWidth, screenHeight, "raylib [models] example - box collisions");
22
23 // Define the camera to look into our 3d world
24 Camera camera = { { 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f, 0 };
25
26 Vector3 playerPosition = { 0.0f, 1.0f, 2.0f };
27 Vector3 playerSize = { 1.0f, 2.0f, 1.0f };
28 Color playerColor = GREEN;
29
30 Vector3 enemyBoxPos = { -4.0f, 1.0f, 0.0f };
31 Vector3 enemyBoxSize = { 2.0f, 2.0f, 2.0f };
32
33 Vector3 enemySpherePos = { 4.0f, 0.0f, 0.0f };
34 float enemySphereSize = 1.5f;
35
36 bool collision = false;
37
38 SetTargetFPS(60); // Set our game to run at 60 frames-per-second
39 //--------------------------------------------------------------------------------------
40
41 // Main game loop
42 while (!WindowShouldClose()) // Detect window close button or ESC key
43 {
44 // Update
45 //----------------------------------------------------------------------------------
46
47 // Move player
48 if (IsKeyDown(KEY_RIGHT)) playerPosition.x += 0.2f;
49 else if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 0.2f;
50 else if (IsKeyDown(KEY_DOWN)) playerPosition.z += 0.2f;
51 else if (IsKeyDown(KEY_UP)) playerPosition.z -= 0.2f;
52
53 collision = false;
54
55 // Check collisions player vs enemy-box
56 if (CheckCollisionBoxes(
57 (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2,
58 playerPosition.y - playerSize.y/2,
59 playerPosition.z - playerSize.z/2 },
60 (Vector3){ playerPosition.x + playerSize.x/2,
61 playerPosition.y + playerSize.y/2,
62 playerPosition.z + playerSize.z/2 }},
63 (BoundingBox){(Vector3){ enemyBoxPos.x - enemyBoxSize.x/2,
64 enemyBoxPos.y - enemyBoxSize.y/2,
65 enemyBoxPos.z - enemyBoxSize.z/2 },
66 (Vector3){ enemyBoxPos.x + enemyBoxSize.x/2,
67 enemyBoxPos.y + enemyBoxSize.y/2,
68 enemyBoxPos.z + enemyBoxSize.z/2 }})) collision = true;
69
70 // Check collisions player vs enemy-sphere
71 if (CheckCollisionBoxSphere(
72 (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2,
73 playerPosition.y - playerSize.y/2,
74 playerPosition.z - playerSize.z/2 },
75 (Vector3){ playerPosition.x + playerSize.x/2,
76 playerPosition.y + playerSize.y/2,
77 playerPosition.z + playerSize.z/2 }},
78 enemySpherePos, enemySphereSize)) collision = true;
79
80 if (collision) playerColor = RED;
81 else playerColor = GREEN;
82 //----------------------------------------------------------------------------------
83
84 // Draw
85 //----------------------------------------------------------------------------------
86 BeginDrawing();
87
88 ClearBackground(RAYWHITE);
89
90 BeginMode3D(camera);
91
92 // Draw enemy-box
93 DrawCube(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, GRAY);
94 DrawCubeWires(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, DARKGRAY);
95
96 // Draw enemy-sphere
97 DrawSphere(enemySpherePos, enemySphereSize, GRAY);
98 DrawSphereWires(enemySpherePos, enemySphereSize, 16, 16, DARKGRAY);
99
100 // Draw player
101 DrawCubeV(playerPosition, playerSize, playerColor);
102
103 DrawGrid(10, 1.0f); // Draw a grid
104
105 EndMode3D();
106
107 DrawText("Move player with cursors to collide", 220, 40, 20, GRAY);
108
109 DrawFPS(10, 10);
110
111 EndDrawing();
112 //----------------------------------------------------------------------------------
113 }
114
115 // De-Initialization
116 //--------------------------------------------------------------------------------------
117 CloseWindow(); // Close window and OpenGL context
118 //--------------------------------------------------------------------------------------
119
120 return 0;
121}