From cd9a5251e0931aa18dde831c5b2ba3375bfe4b04 Mon Sep 17 00:00:00 2001 From: DaniTheSkunk <> Date: Fri, 20 Jan 2023 08:30:34 +0000 Subject: [PATCH] added gamepad stuffies --- examples/gsa_simple.c | 26 +++++++++++++++++--------- gfx.png | Bin 20478 -> 21495 bytes include/gamepad.h | 22 ++++++++++++++++++++++ meson.build | 1 + src/gamepad.c | 28 ++++++++++++++++++++++++++++ src/gsa.c | 2 +- src/window.c | 4 +++- 7 files changed, 72 insertions(+), 11 deletions(-) create mode 100644 include/gamepad.h create mode 100644 src/gamepad.c diff --git a/examples/gsa_simple.c b/examples/gsa_simple.c index 5886bfd..706601f 100644 --- a/examples/gsa_simple.c +++ b/examples/gsa_simple.c @@ -1,19 +1,27 @@ #include void init() { - sprites[0].tile = 2; - sprites[0].x = 10; - sprites[0].y = 10; + i32 x, y; - sprites[1].tile = 3; - sprites[1].x = 10; - sprites[1].y = 100; + for(y = 0; y < 11; ++y) { + for(x = 0; x < 19; ++x) { + maps[0].tiles[x][y] = 0x1000; + } + } - maps[0].tiles[20][1] = 1; + for(y = 0; y < 11; y += 2) { + maps[0].tiles[0][y] = 0x1101; + maps[0].tiles[1][y] = 0x1102; + maps[0].tiles[0][y + 1] = 0x1201; + maps[0].tiles[1][y + 1] = 0x1202; + + maps[0].tiles[17][y] = 0x1101; + maps[0].tiles[18][y] = 0x1102; + maps[0].tiles[17][y + 1] = 0x1201; + maps[0].tiles[18][y + 1] = 0x1202; + } } void tick() { sprites[0].x += 1; - sprites[1].x += 0; - maps[0].scrollx += 1; } diff --git a/gfx.png b/gfx.png index c4c6ba5b5e593b40ca2a48edff7630f320e36a52..36b778434e893fee08a08baa7695b21093b72089 100644 GIT binary patch literal 21495 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 literal 20478 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 UJQSFQztrxwW!L8XjRD{O1AX!+ApigX diff --git a/include/gamepad.h b/include/gamepad.h new file mode 100644 index 0000000..6e1a052 --- /dev/null +++ b/include/gamepad.h @@ -0,0 +1,22 @@ +#ifndef GUARD_F8BB6BA29F6FB6745AF8B6E15CD1C086 +#define GUARD_F8BB6BA29F6FB6745AF8B6E15CD1C086 + +#include "gamepad.h" +#include "types.h" + +#define SW_MAX_GAMEPADS 4 +#define SW_MAX_GAMEPAD_AXES 4 +#define SW_MAX_GAMEPAD_BUTTONS 14 + +struct sw_gamepad { + f32 axes[SW_MAX_GAMEPAD_AXES]; + bool button_down; + bool button_pressed; +}; + +extern struct sw_gamepad sw_gamepads[SW_MAX_GAMEPADS]; + +void sw_gamepad_static_init(); +void sw_gamepad_tick(); + +#endif /* GUARD_F8BB6BA29F6FB6745AF8B6E15CD1C086 */ diff --git a/meson.build b/meson.build index ab52642..9bbf7c1 100644 --- a/meson.build +++ b/meson.build @@ -44,6 +44,7 @@ skunk_sources = [ 'src/error.c', 'src/file.c', 'src/framebuffer.c', + 'src/gamepad.c', 'src/gsa.c', 'src/image32.c', 'src/image8.c', diff --git a/src/gamepad.c b/src/gamepad.c new file mode 100644 index 0000000..63c3b4f --- /dev/null +++ b/src/gamepad.c @@ -0,0 +1,28 @@ +#include "gamepad.h" +#include "GLFW/glfw3.h" +#include "string.h" + +struct sw_gamepad sw_gamepads[SW_MAX_GAMEPADS]; + +void sw_gamepad_static_init() { + memset(sw_gamepads, 0, sizeof(sw_gamepads)); +} + +void sw_gamepad_tick() { + i32 i, j; + GLFWgamepadstate state; + + for(i = 0; i < SW_MAX_GAMEPADS; ++i) { + if(glfwGetGamepadState(i, &state)) { + for(j = 0; j < SW_MAX_GAMEPAD_AXES; ++j) { + sw_gamepads[i].axes[j] = state.axes[j]; + } + for(j = 0; j < SW_MAX_GAMEPAD_BUTTONS; ++j) { + bool down = state.buttons[j]; + sw_gamepads[i].button_pressed = + !sw_gamepads[i].button_pressed && down; + sw_gamepads[i].button_down = down; + } + } + } +} diff --git a/src/gsa.c b/src/gsa.c index 2c6b584..71cfbb4 100644 --- a/src/gsa.c +++ b/src/gsa.c @@ -44,7 +44,7 @@ static struct sw_shaderprogram program; static u32 vbo, vao; -#define MAX_RENDER_VERTS 60 +#define MAX_RENDER_VERTS 10000 struct render_vert { f32 x, y, tx, ty; diff --git a/src/window.c b/src/window.c index c7c1612..26eb354 100644 --- a/src/window.c +++ b/src/window.c @@ -7,6 +7,7 @@ #include "GLFW/glfw3.h" #include "error.h" #include "framebuffer.h" +#include "gamepad.h" #include "scaler.h" #include "shaders.h" #include "vec2i.h" @@ -52,8 +53,9 @@ struct sw_window *sw_window_create(struct sw_vec2i size, char *title) { sw_log("setup ogl defaults"); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); - glEnable(GL_DEPTH_TEST); + /* glEnable(GL_DEPTH_TEST); */ + sw_gamepad_static_init(); sw_shaders_static_init(); sw_framebuffer_static_init(); /* TODO: move elsewhere */ win->_scaler_fb = sw_framebuffer_create(size);