techkaczynski.dev / code

summaryrefslogtreecommitdiff
path: root/cam.c
blob: f14487c379441740c19c0cad6f664945863dcb22 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "cam.h"
#include <rcamera.h>

CameraInfo main_cam = {0};

void
cam_init(void) {
	rlSetClipPlanes(0.3, 5000);
	main_cam.cam = (Camera3D) {
		.position = { 0, 10, -10 },
		.target = { 0, 1, 0 },
		.up = { 0, 1, 0},
		.fovy = 70.0f,
		.projection = CAMERA_PERSPECTIVE,
	};
	main_cam.update = false;
	main_cam.mv_speed = 10;
	main_cam.mv_scale = 1;
	main_cam.lk_speed = 0.2;
}

void
cam_ctrl_editor(void) {
	if (!main_cam.update) {
		return;
	}

	Vec3 input_dir = {0};
	f32 mv_speed = main_cam.mv_speed;
	f32 lk_speed = main_cam.lk_speed;

	if (IsKeyDown(KEY_W)) {
		input_dir.z += 1;
	}

	if (IsKeyDown(KEY_A)) {
		input_dir.x -= 1;
	}

	if (IsKeyDown(KEY_S)) {
		input_dir.z -= 1;
	}

	if (IsKeyDown(KEY_D)) {
		input_dir.x += 1;
	}

	if (IsKeyDown(KEY_Q)) {
		input_dir.y -= 1;
	}

	if (IsKeyDown(KEY_E)) {
		input_dir.y += 1;
	}

	input_dir = Vector3Normalize(input_dir);

	if (IsKeyDown(KEY_LEFT_SHIFT)) {
		mv_speed *= 3;
	}

	// makes it so you can stop faster than you can speed up
	f32 ms_amount = GetMouseWheelMove() < 0 ?
				GetMouseWheelMove() * 1.5 :
				GetMouseWheelMove() * 0.75;

	main_cam.mv_scale += ms_amount;
	main_cam.mv_scale = CLAMP(main_cam.mv_scale, 0.1, 50);

	mv_speed *= main_cam.mv_scale;
	mv_speed = CLAMP(mv_speed, 2, 1000);

	CameraMoveForward(&main_cam.cam,
	                  input_dir.z * mv_speed * GetFrameTime(),
	                  false);

	CameraMoveRight(&main_cam.cam,
	                input_dir.x * mv_speed * GetFrameTime(),
	                false);

	CameraMoveUp(&main_cam.cam, input_dir.y * mv_speed * GetFrameTime());

	CameraYaw(&main_cam.cam,
	          -GetMouseDelta().x * lk_speed * GetFrameTime(), 0);

	CameraPitch(&main_cam.cam,
	            -GetMouseDelta().y * lk_speed * GetFrameTime(), 1, 0, 0); 
}