/* * Copyright Luka Jankovic 2025 * * This file is part of Kubo. * * Kubo is free software: you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * Kubo is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * Kubo. If not, see . */ #include "kubo_input.h" #include "states/kubo_states.h" extern bool kubo_mouse_snap; static void key_input(struct kubo_context *context, Camera2D *camera); static void char_input(struct kubo_context *context); static void handle_cmd_input(struct kubo_context *context); static void handle_camera_input(int key_code, Camera2D *camera); void kubo_input_handle(struct kubo_context *context, Camera2D *camera) { char_input(context); if (context->state.id == KUBO_CONTEXT_COMMAND) { handle_cmd_input(context); } key_input(context, camera); } static void key_input(struct kubo_context *context, Camera2D *camera) { int key_code = GetKeyPressed(); if (context->state.id == KUBO_CONTEXT_NORMAL) { handle_camera_input(key_code, camera); } switch (key_code) { case KEY_Q: case KEY_ESCAPE: kubo_context_set_state(context, KUBO_CONTEXT_NORMAL); break; // case KEY_T: // kubo_mouse_snap = !kubo_mouse_snap; // break; case KEY_SPACE: kubo_camera_reset(camera); break; default: break; } kubo_context_key(context, key_code); } static void char_input(struct kubo_context *context) { int char_code; do { char_code = GetCharPressed(); if (char_code && context->state.id == KUBO_CONTEXT_COMMAND) { kubo_command_append_char(char_code); } else if (char_code == ':') { kubo_command_clear(); kubo_command_append_char(':'); kubo_context_set_state(context, KUBO_CONTEXT_COMMAND); } } while (char_code > 0); } static void handle_cmd_input(struct kubo_context *context) { int key_code = GetKeyPressed(); switch (key_code) { case KEY_ESCAPE: kubo_context_set_state(context, KUBO_CONTEXT_NORMAL); break; case KEY_ENTER: kubo_command_accept_cmd(context); kubo_context_set_state(context, KUBO_CONTEXT_NORMAL); break; case KEY_DELETE: case KEY_BACKSPACE: kubo_command_pop(); break; default: break; } return; } static void handle_camera_input(int key_code, Camera2D *camera) { switch (key_code) { case KEY_RIGHT: case KEY_L: kubo_camera_shift(camera, (Vector2){ .x = -KUBO_INPUT_CAMERA_SHIFT, .y = 0 }); break; case KEY_UP: case KEY_K: kubo_camera_shift(camera, (Vector2){ .x = 0, .y = KUBO_INPUT_CAMERA_SHIFT }); break; case KEY_LEFT: case KEY_H: kubo_camera_shift(camera, (Vector2){ .x = KUBO_INPUT_CAMERA_SHIFT, .y = 0 }); break; case KEY_DOWN: case KEY_J: kubo_camera_shift(camera, (Vector2){ .x = 0, .y = -KUBO_INPUT_CAMERA_SHIFT }); break; default: break; } }