This repository has been archived on 2025-06-21. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
raylib-python-cffi/examples/models/models_box_collisions.py
2021-10-03 21:21:59 +01:00

124 lines
4.5 KiB
Python

# /*******************************************************************************************
# *
# * raylib [models] example - Detect basic 3d collisions (box vs sphere vs box)
# *
# * This example has been created using raylib 1.3 (www.raylib.com)
# * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
# *
# * Copyright (c) 2015 Ramon Santamaria (@raysan5)
# *
# ********************************************************************************************/
from raylib import *
# Initialization
# --------------------------------------------------------------------------------------
screenWidth = 800
screenHeight = 450
InitWindow(screenWidth, screenHeight, b"raylib [models] example - box collisions")
# Define the camera to look into our 3d world
camera = [[0.0, 10.0, 10.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0]
playerPositionPtr = ffi.new("struct Vector3 *", [0.0, 1.0, 2.0])
playerPosition = playerPositionPtr[0]
playerSizePtr = ffi.new("struct Vector3 *", [1.0, 2.0, 1.0])
playerSize = playerSizePtr[0]
playerColor = GREEN
enemyBoxPosPtr = ffi.new("struct Vector3 *", [-4.0, 1.0, 0.0])
enemyBoxPos = enemyBoxPosPtr[0]
enemyBoxSize = ffi.new("struct Vector3 *",[2.0, 2.0, 2.0])
enemySpherePos = [4.0, 0.0, 0.0]
enemySphereSize = 1.5
collision = False
SetTargetFPS(60) # Set our game to run at 60 frames-per-second
# --------------------------------------------------------------------------------------
# Main game loop
while not WindowShouldClose(): # Detect window close button or ESC key
# Update
# ----------------------------------------------------------------------------------
# Move player
if IsKeyDown(KEY_RIGHT):
playerPosition.x += 0.2
elif IsKeyDown(KEY_LEFT):
playerPosition.x -= 0.2
elif IsKeyDown(KEY_DOWN):
playerPosition.z += 0.2
elif IsKeyDown(KEY_UP):
playerPosition.z -= 0.2
collision = False
# Check collisions player vs enemy-box
if CheckCollisionBoxes([[playerPosition.x - playerSize.x / 2, playerPosition.y - playerSize.y / 2,
playerPosition.z - playerSize.z / 2],
[playerPosition.x + playerSize.x / 2, playerPosition.y + playerSize.y / 2,
playerPosition.z + playerSize.z / 2]],
[[enemyBoxPos.x - enemyBoxSize.x / 2,
enemyBoxPos.y - enemyBoxSize.y / 2,
enemyBoxPos.z - enemyBoxSize.z / 2],
[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([[playerPosition.x - playerSize.x / 2,
playerPosition.y - playerSize.y / 2,
playerPosition.z - playerSize.z / 2],
[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.0) # Draw a grid
EndMode3D()
DrawText(b"Move player with cursors to collide", 220, 40, 20, GRAY)
DrawFPS(10, 10)
EndDrawing()
# ----------------------------------------------------------------------------------
# De-Initialization
# --------------------------------------------------------------------------------------
CloseWindow() # Close window and OpenGL context
# --------------------------------------------------------------------------------------