diff options
Diffstat (limited to 'src/yabs_core.cpp')
-rw-r--r-- | src/yabs_core.cpp | 80 |
1 files changed, 78 insertions, 2 deletions
diff --git a/src/yabs_core.cpp b/src/yabs_core.cpp index 6252b14..8920f96 100644 --- a/src/yabs_core.cpp +++ b/src/yabs_core.cpp @@ -6,16 +6,92 @@ /* ()__)____________))))) :^} */ /*********************************/ +#include <stdlib.h> + #include "yabs_core.h" +#include "raymath.h" namespace yabs { namespace core { -int reset_camera(Scene3D const& scene_3d) { +int reset_camera(Scene3D & scene_3d) { + SetCameraMode(scene_3d.camera, CAMERA_FIRST_PERSON); + scene_3d.camera.position = (Vector3){50.0f, 1.0f, 50.0f}; + scene_3d.camera.target = (Vector3){50.0f, 1.0f, 50.0f}; + scene_3d.camera.up = (Vector3){0.0f, 1.0f, 0.0f}; + scene_3d.camera.fovy = 90.0f; + scene_3d.camera.projection = CAMERA_PERSPECTIVE; + + scene_3d.rotation = (Vector3){0.0f, 0.0f, 0.0f}; + scene_3d.lastMousePos = GetMousePosition(); + return (0); +} + +int draw(gameState const& game_state, Model & model) { + // draw checkerboard model + for (int x = 0; x < 50; x++) { + for (int z = 0; z < 50; z++) { + Vector3 position; + position.x = x; + position.y = 0; + position.z = z; + DrawModel(model, position, 1.0f, WHITE); + } + } + + // end draw return (0); } -int draw(gameState const& game_state) { +int tick(Scene3D & scene_3d) { + // mouse look + Vector2 mouseMovement = + Vector2Subtract(GetMousePosition(), scene_3d.lastMousePos); + scene_3d.lastMousePos = GetMousePosition(); + scene_3d.rotation.x += + (mouseMovement.x * -YABS_CAMERA_MOUSE_MOVE_SENSITIVITY); + scene_3d.rotation.y += + (mouseMovement.y * -YABS_CAMERA_MOUSE_MOVE_SENSITIVITY); + + // direction array + bool direction[4] = {IsKeyDown(KEY_W), IsKeyDown(KEY_S), + IsKeyDown(KEY_D), IsKeyDown(KEY_A)}; + + // compute movement + scene_3d.movement = (Vector3){0, 0, 0}; + scene_3d.movement.x = (sinf(scene_3d.rotation.x) * direction[1] - + sinf(scene_3d.rotation.x) * direction[0] - + cosf(scene_3d.rotation.x) * direction[3] + + cosf(scene_3d.rotation.x) * direction[2]) / + YABS_PLAYER_MOVEMENT_SENSITIVITY; + scene_3d.movement.z = (cosf(scene_3d.rotation.x) * direction[1] - + cosf(scene_3d.rotation.x) * direction[0] + + sinf(scene_3d.rotation.x) * direction[3] - + sinf(scene_3d.rotation.x) * direction[2]) / + YABS_PLAYER_MOVEMENT_SENSITIVITY; + // elevation + if (IsKeyDown(KEY_SPACE)) + scene_3d.movement.y += 0.12f; + if (IsKeyDown(KEY_LEFT_CONTROL)) + scene_3d.movement.y -= 0.12f; + + // apply movement + scene_3d.camera.position.x += + scene_3d.movement.x / YABS_PLAYER_MOVEMENT_SENSITIVITY; + scene_3d.camera.position.y += scene_3d.movement.y; + scene_3d.camera.position.z += + scene_3d.movement.z / YABS_PLAYER_MOVEMENT_SENSITIVITY; + + Matrix translation = MatrixTranslate(0, 0, (10)); + Matrix rotation2 = MatrixRotateXYZ((Vector3){ + YABS_DOUBLEPI - scene_3d.rotation.y, YABS_DOUBLEPI - scene_3d.rotation.x, 0}); + Matrix transform = MatrixMultiply(translation, rotation2); + + // apply camera rotation + scene_3d.camera.target.x = scene_3d.camera.position.x - transform.m12; + scene_3d.camera.target.y = scene_3d.camera.position.y - transform.m13; + scene_3d.camera.target.z = scene_3d.camera.position.z - transform.m14; + return (0); } |