aboutsummaryrefslogtreecommitdiffstats
path: root/src/yabs_core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/yabs_core.cpp')
-rw-r--r--src/yabs_core.cpp80
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);
}