123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- -------------------------------------------------------------------------------------------
- --
- -- raylib [models] example - Detect basic 3d collisions (box vs sphere vs box)
- --
- -- This example has been created using raylib 1.6 (www.raylib.com)
- -- raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
- --
- -- Copyright (c) 2014-2016 Ramon Santamaria (@raysan5)
- --
- -------------------------------------------------------------------------------------------
- -- Initialization
- -------------------------------------------------------------------------------------------
- local screenWidth = 800
- local screenHeight = 450
- InitWindow(screenWidth, screenHeight, "raylib [models] example - box collisions")
- -- Define the camera to look into our 3d world
- 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)
- local playerPosition = Vector3(0.0, 1.0, 2.0)
- local playerSize = Vector3(1.0, 2.0, 1.0)
- local playerColor = GREEN
- local enemyBoxPos = Vector3(-4.0, 1.0, 0.0)
- local enemyBoxSize = Vector3(2.0, 2.0, 2.0)
- local enemySpherePos = Vector3(4.0, 0.0, 0.0)
- local enemySphereSize = 1.5
- local collision = false
- SetTargetFPS(60) -- Set our game to run at 60 frames-per-second
- -------------------------------------------------------------------------------------------
- -- Main game loop
- while not WindowShouldClose() do -- Detect window close button or ESC key
- -- Update
- ---------------------------------------------------------------------------------------
-
- -- Move player
- if (IsKeyDown(KEY.RIGHT)) then playerPosition.x = playerPosition.x + 0.2
- elseif (IsKeyDown(KEY.LEFT)) then playerPosition.x = playerPosition.x - 0.2
- elseif (IsKeyDown(KEY.DOWN)) then playerPosition.z = playerPosition.z + 0.2
- elseif (IsKeyDown(KEY.UP)) then playerPosition.z = playerPosition.z - 0.2 end
-
- 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)))) then collision = true
- end
-
- -- 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)) then collision = true
- end
-
- if (collision) then playerColor = RED
- else playerColor = GREEN end
- ---------------------------------------------------------------------------------------
- -- Draw
- ---------------------------------------------------------------------------------------
- BeginDrawing()
- ClearBackground(RAYWHITE)
- Begin3dMode(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.0) -- Draw a grid
- End3dMode()
-
- DrawText("Move player with cursors to collide", 220, 40, 20, GRAY)
- DrawFPS(10, 10)
- EndDrawing()
- ---------------------------------------------------------------------------------------
- end
- -- De-Initialization
- -------------------------------------------------------------------------------------------
- CloseWindow() -- Close window and OpenGL context
- -------------------------------------------------------------------------------------------
|