summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabio Maciel <6810827+fabiomaciel@users.noreply.github.com>2022-12-07 17:49:43 -0300
committerFabio Maciel <6810827+fabiomaciel@users.noreply.github.com>2022-12-07 17:49:43 -0300
commit3b62cccc277e1e2bc465528a7b9a06e8ee09629f (patch)
treea97ef67c6b88923c459ff981e0fc45262592422b
parentd9e4bcd542f3efe97e6b8951ee47f10c223a6bf3 (diff)
parent394ffe17766082c6895208f3fc5710a53cb4f01f (diff)
Merge remote-tracking branch 'johnny/master'
-rw-r--r--.gitignore3
-rw-r--r--.gitmodules4
-rw-r--r--AUTHORS2
-rw-r--r--LICENSE28
-rw-r--r--Makefile6
-rw-r--r--README.md10
-rw-r--r--TODO3
-rw-r--r--src/controller.c106
-rw-r--r--src/controller.h52
-rw-r--r--src/main.c103
-rw-r--r--src/player.c91
-rw-r--r--src/player.h55
-rw-r--r--test/controller-test.c46
13 files changed, 433 insertions, 76 deletions
diff --git a/.gitignore b/.gitignore
index 1f44161..449f08f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
*.exe
*.o
-/lib
/build
+/lib
blast_attack
+tags
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..a1d1dca
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "third_party/munit"]
+ path = third_party/munit
+ url = git@github.com:nemequ/munit.git
+ branch = v0.2.0
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..58c0bb0
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+Fabio Maciel <fabiomsdev@gmail.com>
+Johnny Richard <johnny@johnnyrichard.com>
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5540c06
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,28 @@
+Copyright (c) 2021, Blast Attack Authors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/Makefile b/Makefile
index 2433900..208cc9f 100644
--- a/Makefile
+++ b/Makefile
@@ -4,8 +4,8 @@ TEST_DIR ?= ./test
LIB_DIR ?= ./lib
BUILD_DIR ?= ./build
-CFLAGS := -Wall
-CFLAGS_TEST := -Isrc -Ithird_party -Llib -lmunit
+CFLAGS := -Wall -lm
+CFLAGS_TEST := -Isrc -Ithird_party -Llib -lmunit
SRCS := $(wildcard $(SOURCE_DIR)/*.c)
SRCS_TEST := $(wildcard $(TEST_DIR)/*.c)
OBJS := $(patsubst $(SOURCE_DIR)/%.c, $(BUILD_DIR)/%.o, $(SRCS))
@@ -44,7 +44,7 @@ $(TEST_DIR)/%: $(TEST_DIR)/%-test
test: lib/libmunit.so $(BUILD_DIR) $(TESTS)
lib/libmunit.so: $(LIB_DIR) third_party/munit/munit.c
- $(CC) -Wall -Werror -fpic -c third_party/munit/munit.c -shared -o lib/libmunit.so
+ $(CC) -Wall -fpic -c third_party/munit/munit.c -shared -o lib/libmunit.so
clean:
@rm -rf $(BUILD_DIR)
diff --git a/README.md b/README.md
index 99cb855..de76286 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,11 @@
-Black Attack
-------------
+Blast Attack
+============
+
+## Download
+
+```shell
+$ git clone --recursive git@git.sr.ht:~johnnyrichard/blast-attack
+```
## Dependencies
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..819999e
--- /dev/null
+++ b/TODO
@@ -0,0 +1,3 @@
+- [ ] Create a second player
+ - [ ] Make controller more flexible to accept different buttons
+- [ ] Create enemies
diff --git a/src/controller.c b/src/controller.c
index 5fb1e0b..4e488e9 100644
--- a/src/controller.c
+++ b/src/controller.c
@@ -1,46 +1,96 @@
+/*
+ * Copyright (c) 2021, Johnny Richard
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
#include <SDL.h>
#include "controller.h"
-void
-controller_update(controller_t *self,
+void
+controller_update(controller_t *self,
SDL_Event *event)
{
if (event->type == SDL_KEYDOWN) {
switch (event->key.keysym.sym) {
- case SDLK_UP:
- self->up = true;
- break;
- case SDLK_DOWN:
- self->down = true;
- break;
- case SDLK_LEFT:
- self->left = true;
- break;
- case SDLK_RIGHT:
- self->right = true;
- break;
+ case SDLK_UP:
+ self->pressed_buttons |= BTN_UP;
+ break;
+ case SDLK_DOWN:
+ self->pressed_buttons |= BTN_DOWN;
+ break;
+ case SDLK_LEFT:
+ self->pressed_buttons |= BTN_LEFT;
+ break;
+ case SDLK_RIGHT:
+ self->pressed_buttons |= BTN_RIGHT;
+ break;
}
}
if (event->type == SDL_KEYUP) {
switch (event->key.keysym.sym) {
- case SDLK_UP:
- self->up = false;
- break;
+ case SDLK_UP:
+ self->pressed_buttons ^= BTN_UP;
+ break;
+ case SDLK_DOWN:
+ self->pressed_buttons ^= BTN_DOWN;
+ break;
+ case SDLK_LEFT:
+ self->pressed_buttons ^= BTN_LEFT;
+ break;
+ case SDLK_RIGHT:
+ self->pressed_buttons ^= BTN_RIGHT;
+ break;
+ }
+ }
+}
- case SDLK_DOWN:
- self->down = false;
- break;
+bool
+controller_is_up_pressed(controller_t *self)
+{
+ return self->pressed_buttons & BTN_UP;
+}
- case SDLK_LEFT:
- self->left = false;
- break;
+bool
+controller_is_down_pressed(controller_t *self)
+{
+ return self->pressed_buttons & BTN_DOWN;
+}
- case SDLK_RIGHT:
- self->right = false;
- break;
- }
- }
+bool
+controller_is_right_pressed(controller_t *self)
+{
+ return self->pressed_buttons & BTN_RIGHT;
}
+bool
+controller_is_left_pressed(controller_t *self)
+{
+ return self->pressed_buttons & BTN_LEFT;
+}
diff --git a/src/controller.h b/src/controller.h
index a97fc7a..ecc0389 100644
--- a/src/controller.h
+++ b/src/controller.h
@@ -1,25 +1,57 @@
+/*
+ * Copyright (c) 2021, Johnny Richard
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
#ifndef CONTROLLER_H
#define CONTROLLER_H
#include <SDL.h>
#include <stdbool.h>
+#include <stdint.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
+enum btn_t {
+ BTN_UP = 1 << 0,
+ BTN_DOWN = 1 << 1,
+ BTN_RIGHT = 1 << 2,
+ BTN_LEFT = 1 << 3
+};
typedef struct controller_t {
- bool up;
- bool down;
- bool left;
- bool right;
+ uint8_t pressed_buttons;
} controller_t;
void controller_update(controller_t *self,
SDL_Event *event);
-#ifdef __cplusplus
-}
-#endif
+bool controller_is_up_pressed(controller_t *self);
+bool controller_is_down_pressed(controller_t *self);
+bool controller_is_right_pressed(controller_t *self);
+bool controller_is_left_pressed(controller_t *self);
#endif /* CONTROLLER_H */
diff --git a/src/main.c b/src/main.c
index 19c4acf..f9b89bf 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,64 +1,119 @@
+/*
+* Copyright (c) 2021, Johnny Richard
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following disclaimer in the documentation
+* and/or other materials provided with the distribution.
+*
+* 3. Neither the name of the copyright holder nor the names of its
+* contributors may be used to endorse or promote products derived from
+* this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
+#include <math.h>
#include <SDL.h>
#include "controller.h"
+#include "player.h"
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
-int
+int
main (int argc,
char *args[])
{
- SDL_Window* window = NULL;
- SDL_Surface* screenSurface = NULL;
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
- fprintf(stderr, "SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
+ fprintf(
+ stderr,
+ "SDL could not be initialized! SDL_Error: %s\n",
+ SDL_GetError()
+ );
return EXIT_FAILURE;
}
- window = SDL_CreateWindow(
- "SDL Tutorial",
- SDL_WINDOWPOS_UNDEFINED,
- SDL_WINDOWPOS_UNDEFINED,
- SCREEN_WIDTH, SCREEN_HEIGHT,
- SDL_WINDOW_SHOWN
+ SDL_Window* window = SDL_CreateWindow(
+ "Blast Attack",
+ SDL_WINDOWPOS_UNDEFINED,
+ SDL_WINDOWPOS_UNDEFINED,
+ SCREEN_WIDTH, SCREEN_HEIGHT,
+ SDL_WINDOW_RESIZABLE
);
-
if (window == NULL) {
fprintf(stderr, "Window could not be created! SDL_Error: %s\n", SDL_GetError());
return EXIT_FAILURE;
}
-
- SDL_Rect rect = { .x = 0, .y = 0, .w = 20, .h = 20 };
+
+ SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
+ if (renderer == NULL) {
+ fprintf(stderr, "Could not create renderer: %s\n", SDL_GetError());
+ return EXIT_FAILURE;
+ }
+
+ if (SDL_RenderSetLogicalSize(renderer, SCREEN_WIDTH, SCREEN_HEIGHT) < 0) {
+ fprintf(stderr, "Could not set logical size: %s\n", SDL_GetError());
+ return EXIT_FAILURE;
+ }
+
+ SDL_Rect bg_rect = { .x = 0, .y = 0, .w = SCREEN_WIDTH, .h = SCREEN_HEIGHT };
bool quit = false;
- controller_t controller = {0};
+ controller_t ctrl = {0};
+
+ player_t player;
+ player_init(&player);
while (!quit) {
- screenSurface = SDL_GetWindowSurface(window);
- SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xFF, 0xFF, 0xFF));
+ SDL_SetRenderDrawColor(renderer, 0, 0, 0, 1);
+ SDL_RenderClear(renderer);
+
+ uint64_t start = SDL_GetPerformanceCounter();
+
+ SDL_SetRenderDrawColor(renderer, 0XCC, 0XCC, 0XCC, 1);
+ SDL_RenderFillRect(renderer, &bg_rect);
SDL_Event event;
- while (SDL_PollEvent(&event) != 0) {
+ while (SDL_PollEvent(&event) != 0) {
if (event.type == SDL_QUIT) {
quit = true;
}
- controller_update(&controller, &event);
+ controller_update(&ctrl, &event);
}
- if (controller.up) rect.y -= 1;
- if (controller.down) rect.y += 1;
- if (controller.left) rect.x -= 1;
- if (controller.right) rect.x += 1;
+ player_update(&player, &ctrl, SCREEN_WIDTH, SCREEN_HEIGHT);
+ player_draw(&player, renderer);
+
+ SDL_RenderPresent(renderer);
+
+ uint64_t end = SDL_GetPerformanceCounter();
- SDL_FillRect(screenSurface, &rect, SDL_MapRGB(screenSurface->format, 0xFF, 0x0, 0x0));
- SDL_UpdateWindowSurface(window);
+ float elapsedMS = (end - start) / (float)SDL_GetPerformanceFrequency() * 1000.0f;
+ SDL_Delay(floor(16.666f - elapsedMS));
}
+ SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return EXIT_SUCCESS;
diff --git a/src/player.c b/src/player.c
new file mode 100644
index 0000000..000eb76
--- /dev/null
+++ b/src/player.c
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2021, Johnny Richard
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following disclaimer in the documentation
+* and/or other materials provided with the distribution.
+*
+* 3. Neither the name of the copyright holder nor the names of its
+* contributors may be used to endorse or promote products derived from
+* this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "player.h"
+
+#include <assert.h>
+#include <SDL.h>
+
+void
+player_init(player_t *player)
+{
+ assert(player && "player is required");
+ player->x = 0;
+ player->y = 0;
+ player->width = 20;
+ player->height = 20;
+ player->speed = 8;
+}
+
+void player_update(player_t *player,
+ controller_t *ctrl,
+ int screen_width,
+ int screen_height)
+{
+ if (controller_is_up_pressed(ctrl) && player->y > 0) {
+ player->y -= player->speed;
+ player->y = player->y < 0 ? 0 : player->y;
+ }
+
+ if (controller_is_down_pressed(ctrl) && player->y < screen_height) {
+ player->y += player->speed;
+ player->y = player->y + player->height > screen_height
+ ? screen_height - player->height
+ : player->y;
+ }
+
+ if (controller_is_left_pressed(ctrl) && player->x > 0) {
+ player->x -= player->speed;
+ player->x = player->x < 0
+ ? 0
+ : player->x;
+ }
+
+ if (controller_is_right_pressed(ctrl) && player->x < screen_width) {
+ player->x += player->speed;
+ player->x = player->x + player->width > screen_width
+ ? screen_width - player->width
+ : player->x;
+ }
+}
+
+void
+player_draw(player_t *player, SDL_Renderer *renderer)
+{
+ SDL_Rect rect = {
+ .x = player->x,
+ .y = player->y,
+ .w = player->width,
+ .h = player->height
+ };
+
+ SDL_SetRenderDrawColor(renderer, 0, 0, 0xFF, 1);
+ SDL_RenderFillRect(renderer, &rect);
+}
diff --git a/src/player.h b/src/player.h
new file mode 100644
index 0000000..1f211c7
--- /dev/null
+++ b/src/player.h
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2021, Johnny Richard
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following disclaimer in the documentation
+* and/or other materials provided with the distribution.
+*
+* 3. Neither the name of the copyright holder nor the names of its
+* contributors may be used to endorse or promote products derived from
+* this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+#ifndef PLAYER_H
+#define PLAYER_H
+
+#include "controller.h"
+
+#include <stdint.h>
+
+typedef struct player {
+ uint16_t x;
+ uint16_t y;
+ uint16_t width;
+ uint16_t height;
+ uint16_t speed;
+} player_t;
+
+void player_init(player_t *player);
+
+// FIXME: Find out a better way to provide screen w and h properties
+void player_update(player_t *player,
+ controller_t *ctrl,
+ int screen_width,
+ int screen_height);
+
+void player_draw(player_t *player, SDL_Renderer *renderer);
+
+#endif /* PLAYER_H */
diff --git a/test/controller-test.c b/test/controller-test.c
index fb13000..c271756 100644
--- a/test/controller-test.c
+++ b/test/controller-test.c
@@ -1,3 +1,33 @@
+/*
+ * Copyright (c) 2021, Johnny Richard
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
#define MUNIT_ENABLE_ASSERT_ALIASES
#include "controller.h"
#include <munit/munit.h>
@@ -17,11 +47,11 @@ press_and_release_up(const MunitParameter params[], void* fixture)
SDL_Event event = an_event(SDL_KEYDOWN, SDLK_UP);
controller_update(&ctrl, &event);
- assert_true(ctrl.up);
+ assert_true(controller_is_up_pressed(&ctrl));
event = an_event(SDL_KEYUP, SDLK_UP);
controller_update(&ctrl, &event);
- assert_false(ctrl.up);
+ assert_false(controller_is_up_pressed(&ctrl));
return MUNIT_OK;
}
@@ -32,11 +62,11 @@ press_and_release_down(const MunitParameter params[], void* fixture)
SDL_Event event = an_event(SDL_KEYDOWN, SDLK_DOWN);
controller_update(&ctrl, &event);
- assert_true(ctrl.down);
+ assert_true(controller_is_down_pressed(&ctrl));
event = an_event(SDL_KEYUP, SDLK_DOWN);
controller_update(&ctrl, &event);
- assert_false(ctrl.down);
+ assert_false(controller_is_down_pressed(&ctrl));
return MUNIT_OK;
}
@@ -47,11 +77,11 @@ press_and_release_right(const MunitParameter params[], void* fixture)
SDL_Event event = an_event(SDL_KEYDOWN, SDLK_RIGHT);
controller_update(&ctrl, &event);
- assert_true(ctrl.right);
+ assert_true(controller_is_right_pressed(&ctrl));
event = an_event(SDL_KEYUP, SDLK_RIGHT);
controller_update(&ctrl, &event);
- assert_false(ctrl.right);
+ assert_false(controller_is_right_pressed(&ctrl));
return MUNIT_OK;
}
@@ -62,11 +92,11 @@ press_and_release_left(const MunitParameter params[], void* fixture)
SDL_Event event = an_event(SDL_KEYDOWN, SDLK_LEFT);
controller_update(&ctrl, &event);
- assert_true(ctrl.left);
+ assert_true(controller_is_left_pressed(&ctrl));
event = an_event(SDL_KEYUP, SDLK_LEFT);
controller_update(&ctrl, &event);
- assert_false(ctrl.left);
+ assert_false(controller_is_left_pressed(&ctrl));
return MUNIT_OK;
}