summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt1
-rw-r--r--assets/mainblob-128.pngbin0 -> 94731 bytes
-rw-r--r--src/player.c20
-rw-r--r--src/sprite.c24
-rw-r--r--src/sprite.h21
5 files changed, 64 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 26ac31b..2613cf6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,6 +10,7 @@ add_executable(${PROJECT_NAME}
"src/player.c"
"src/bullet.c"
"src/enemies.c"
+ "src/sprite.c"
)
set_property(TARGET ${PROJECT_NAME} PROPERTY C_STANDARD 99)
diff --git a/assets/mainblob-128.png b/assets/mainblob-128.png
new file mode 100644
index 0000000..ca78578
--- /dev/null
+++ b/assets/mainblob-128.png
Binary files differ
diff --git a/src/player.c b/src/player.c
index 6c62b43..7804c59 100644
--- a/src/player.c
+++ b/src/player.c
@@ -2,7 +2,17 @@
#include "input.h"
#include "player.h"
#include "rodeo/collision.h"
+#include "sprite.h"
+
static rodeo_texture_2d_t player_texture;
+static sprite_t player_sprite = {
+ .iter = 0,
+ .config = {
+ .width = 128,
+ .height = 128,
+ .count = 61
+ }
+};
static world_id player_collision_id;
static rodeo_collision_2d_world_t player_collision_world;
@@ -11,7 +21,9 @@ static float orc_size[] = {13.0f * 2.0f, 19.0f * 2.0f};
void
init_player(void)
{
- player_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/orc.png"));
+ //player_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/orc.png"));
+ player_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/mainblob-128.png"));
+ player_sprite.config.texture = &player_texture;
player_collision_world = rodeo_collision_2d_world_create();
player_collision_id = rodeo_collision_2d_world_item_create(
&player_collision_world,
@@ -35,6 +47,8 @@ void
draw_player(void)
{
cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
+ draw_sprite(&player_sprite, player->x, player->y, 0.25f);
+ /*
rodeo_texture_2d_draw(
&(rodeo_rectangle_t){
.x = (float)(int32_t)player->x - (orc_size[0] / 2.0f),
@@ -51,7 +65,7 @@ draw_player(void)
NULL,
&player_texture
);
-
+ */
}
void
@@ -70,6 +84,8 @@ parse_player_input(void)
void
move_player(void)
{
+ player_sprite.iter += 1;
+ player_sprite.iter %= player_sprite.config.count;
cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
player->x += player->dx;
player->dx = 0;
diff --git a/src/sprite.c b/src/sprite.c
new file mode 100644
index 0000000..c1c88f6
--- /dev/null
+++ b/src/sprite.c
@@ -0,0 +1,24 @@
+
+#include "rodeo.h"
+#include "sprite.h"
+
+void
+draw_sprite(sprite_t *sprite, float x, float y, float scale)
+{
+ rodeo_texture_2d_draw(
+ &(rodeo_rectangle_t){
+ .x = x - ((float)sprite->config.width * scale / 2),
+ .y = y - ((float)sprite->config.height * scale / 2),
+ .width = (float)sprite->config.width * scale,
+ .height = (float)sprite->config.height * scale
+ },
+ &(rodeo_rectangle_t){
+ .x = (float)sprite->config.width * (float)sprite->iter,
+ .y = 0,
+ .width = (float)sprite->config.width,
+ .height = (float)sprite->config.height
+ },
+ &(rodeo_color_RGBAFloat_t){ .array = { 1.0f, 1.0f, 1.0f, 1.0f } },
+ sprite->config.texture
+ );
+}
diff --git a/src/sprite.h b/src/sprite.h
new file mode 100644
index 0000000..81ad5fa
--- /dev/null
+++ b/src/sprite.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "rodeo.h"
+
+typedef
+struct
+{
+ uint32_t iter;
+ struct config
+ {
+ uint32_t width;
+ uint32_t height;
+ uint32_t count;
+ rodeo_texture_2d_t *texture;
+ } config;
+}
+sprite_t;
+
+void
+draw_sprite(sprite_t *sprite, float x, float y, float scale);
+