summaryrefslogtreecommitdiffhomepage
path: root/KeyboardController.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'KeyboardController.cpp')
-rw-r--r--KeyboardController.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/KeyboardController.cpp b/KeyboardController.cpp
new file mode 100644
index 0000000..2273008
--- /dev/null
+++ b/KeyboardController.cpp
@@ -0,0 +1,46 @@
+#include "KeyboardController.h"
+
+#include <cmath>
+
+#include <raylib.h>
+
+
+static constexpr float DIAGONAL {std::sin(M_PI / 4.0f)};
+
+
+static int check_axis(int negative_key, int positive_key, int last);
+
+
+
+KeyboardController::KeyboardController() :
+ x_axis {0},
+ y_axis {0}
+{
+}
+
+
+Vector2
+KeyboardController::direction()
+{
+ x_axis = check_axis(KEY_LEFT, KEY_RIGHT, x_axis);
+ y_axis = check_axis(KEY_UP, KEY_DOWN, y_axis);
+ if (x_axis != 0 && y_axis != 0)
+ return {x_axis * DIAGONAL, y_axis * DIAGONAL};
+ return {x_axis, y_axis};
+}
+
+
+int
+check_axis(const int negative_key, const int positive_key, const int last)
+{
+ int next = last;
+ if (last == 1 && IsKeyReleased(positive_key))
+ next = 0;
+ else if (last == -1 && IsKeyReleased(negative_key))
+ next = 0;
+ if (IsKeyPressed(positive_key))
+ next = 1;
+ else if (IsKeyPressed(negative_key))
+ next = -1;
+ return next;
+}