engine/scene.c \
engine/tga.c \
engine/ui.c \
+ game/input.c \
game/level.c \
game/player.c
Transform multiply(Transform t1, Transform t2) {
GLfloat* a = (GLfloat*) &t1;
GLfloat* b = (GLfloat*) &t2;
+ Transform result;
+ GLfloat* c = (GLfloat*) &result;
for (size_t row = 0; row < 4; ++row) {
for (size_t col = 0; col < 4; ++col) {
- b[(row * 4) + col] =
+ c[(row * 4) + col] =
a[(row * 4) + 0] * b[(0 * 4) + col]
+ a[(row * 4) + 1] * b[(1 * 4) + col]
+ a[(row * 4) + 2] * b[(2 * 4) + col]
+ a[(row * 4) + 3] * b[(3 * 4) + col];
}
}
- return t2;
+ return result;
}
void translate(Transform* transform, Vector3D vec) {
float sinA = sinf(angle);
float cosA = cosf(angle);
float omcA = 1 - cosA;
+
*transform = multiply(
(Transform) { l*l*omcA + cosA, m*l*omcA - n*sinA, n*l*omcA + m*sinA, 0.0f,
l*m*omcA + n*sinA, m*m*omcA + cosA, n*m*omcA - l*sinA, 0.0f,
*transform);
}
-Vector3D applyTransform(Transform* transform, Vector3D vec) {
+Vector3D applyTransform(Transform transform, Vector3D vec) {
GLfloat* a = (GLfloat*) &transform;
GLfloat b[4] = { vec.x, vec.y, vec.z, 1.0f };
GLfloat c[4];
Transform multiply(Transform t1, Transform t2);
void translate(Transform* transform, Vector3D vec);
void rotate(Transform* transform, Vector3D axis, float angle);
-Vector3D applyTransform(Transform* transform, Vector3D vec);
+Vector3D applyTransform(Transform transform, Vector3D vec);
Vector3D translationOf(Transform transform);
Vector3D normalized(Vector3D vec);
+++ /dev/null
-#include "input.h"
-
-#include "player.h"
-
-void onKeyPressed(unsigned char key, int x, int y) {
- switch (key) {
- case 'w':
- case 's':
- case 'a':
- case 'd':
- //playerMovementInput();
- break;
- default:
- break;
- }
-}
+++ /dev/null
-#ifndef INPUT_H_
-#define INPUT_H_
-
-void onKeyPressed(unsigned char key, int x, int y);
-
-#endif // INPUT_H_
--- /dev/null
+#include "input.h"
+
+#include "player.h"
+
+void onKeyPressed(unsigned char key, int x, int y) {
+ switch (key) {
+ case 'w':
+ playerMovementInput(0.0f, 1.0f);
+ break;
+ case 's':
+ playerMovementInput(0.0f, -1.0f);
+ break;
+ case 'a':
+ playerMovementInput(-1.0f, 0.0f);
+ break;
+ case 'd':
+ playerMovementInput(1.0f, 0.0f);
+ break;
+ default:
+ break;
+ }
+}
--- /dev/null
+#ifndef INPUT_H_
+#define INPUT_H_
+
+void onKeyPressed(unsigned char key, int x, int y);
+
+#endif // INPUT_H_
#include "engine/render.h"
Scene* playerCharacter;
+static Transform movementDirectionTransform;
void initPlayer() {
+ movementDirectionTransform = identity();
+ rotate(&movementDirectionTransform, (Vector3D) { 0.0f, 1.0f, 0.0f }, - TAU / 8.0f);
+
playerCharacter = newScene();
cameraAnchor = playerCharacter;
playerCharacter->solid = importSolid("assets/playercharacter.3ds");
}
void playerMovementInput(float x, float y) {
- Transform rotation = identity();
- rotate(&rotation, (Vector3D) { 0.0f, 1.0f, 0.0f }, TAU / 8.0f);
- Vector3D movementDirection = (Vector3D) { x, 0.0f, -y };
- movementDirection = normalized(applyTransform(&rotation, movementDirection));
+ if (!playerCharacter) {
+ return;
+ }
+
+ Vector3D direction = (Vector3D) { x, 0.0f, -y };
+ direction = normalized(
+ applyTransform(movementDirectionTransform, direction));
+ float velocity = 1.0f;
+ Vector3D movement = { direction.x * velocity,
+ direction.y * velocity,
+ direction.z * velocity };
+
+ translate(&(playerCharacter->transform), movement);
}
#include "engine/render.h"
#include "engine/ui.h"
+#include "game/input.h"
#include "game/level.h"
#include "game/player.h"
glutDisplayFunc(renderFrame);
glutReshapeFunc(resizeStage);
- //glutKeyboardFunc(key_pressed);
+ glutKeyboardFunc(onKeyPressed);
//glutMouseFunc(mouse_button_event);
//glutMotionFunc(mouse_motion_event);