Files
crazycrazylife/main.cpp
2026-03-28 13:10:52 +02:00

100 lines
1.9 KiB
C++

#include "raylib.h"
#include "raymath.h"
class Entity {
protected:
Vector3 position{};
public:
virtual ~Entity() = default;
explicit Entity(Vector3 position) {
this->position = position;
}
virtual void updatePos() = 0;
};
class Player: Entity {
Camera3D camera{};
Vector3 camera_offset = {0, 4.0f, 0};
void updateCameraPos() {
camera.position = Vector3Add(position, camera_offset);
UpdateCamera(&camera, CAMERA_FIRST_PERSON);
};
public:
Player(Vector3 position) : Entity(position) {
camera.target = (Vector3){0.0f, 0.0f, 0.0F};
camera.up = (Vector3){0.0f, 1.0f, 0.0f};
camera.fovy = 60.0f;
camera.projection = CAMERA_PERSPECTIVE;
}
Camera3D& getCamera() {
return this->camera;
}
void updatePos() override {
if (IsKeyDown(KEY_W)) {
position.x+=0.1;
};
updateCameraPos();
};
};
int main(void) {
const int screenWidth = 1500;
const int screenHeight = 800;
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
InitWindow(screenWidth, screenHeight, "Simple 3D cube");
SetTargetFPS(75);
Mesh cubeMesh = GenMeshCube(1.0f, 1.0f, 1.0f);
Model cubeModel = LoadModelFromMesh(cubeMesh);
Player player(Vector3{4, 0, 4});
Camera3D& cur_camera = player.getCamera();
while (!WindowShouldClose()) {
player.updatePos();
BeginDrawing();
ClearBackground(RAYWHITE);
BeginMode3D(cur_camera);
static float rotation = 0.0f;
rotation += 0.01f; // Increment for smooth spin
DrawModelEx(cubeModel, (Vector3){0, 0, 0}, (Vector3){0, 1, 0}, rotation * RAD2DEG, (Vector3){2, 2, 2}, RED);
EndMode3D();
DrawText("3D mode", 10, 10, 20, DARKGRAY);
EndDrawing();
}
CloseWindow();
return 0;
}