summaryrefslogtreecommitdiffhomepage
path: root/src/bullet.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bullet.c')
-rw-r--r--src/bullet.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/bullet.c b/src/bullet.c
new file mode 100644
index 0000000..4fe6433
--- /dev/null
+++ b/src/bullet.c
@@ -0,0 +1,92 @@
+#include "rodeo.h"
+#include "input.h"
+#include "player.h"
+#include "rodeo/collision.h"
+
+static rodeo_texture_2d_t bullet_texture;
+static rodeo_collision_2d_world_t bullet_collision_world;
+static rodeo_collision_2d_world_t player_bullet_collision_world;
+static rodeo_collision_2d_world_t enemy_bullet_collision_world;
+
+void
+init_bullets(void)
+{
+ bullet_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/bullet.png"));
+}
+
+void
+deinit_bullets(void)
+{
+ rodeo_texture_2d_destroy(&bullet_texture);
+}
+
+void
+move_bullets(void)
+{
+ c_foreach(i, cvec_collision_2d_world_item, player_bullet_collision_world) {
+ cvec_collision_2d_world_item_value *bullet = i.ref;
+ bullet->x += bullet->dx;
+ bullet->y += bullet->dy;
+ }
+ c_foreach(i, cvec_collision_2d_world_item, enemy_bullet_collision_world) {
+ cvec_collision_2d_world_item_value *bullet = i.ref;
+ bullet->x += bullet->dx;
+ bullet->y += bullet->dy;
+ }
+
+}
+
+void
+draw_bullets(void)
+{
+ c_foreach(i, cvec_collision_2d_world_item, player_bullet_collision_world) {
+ cvec_collision_2d_world_item_value *bullet = i.ref;
+ rodeo_texture_2d_draw(
+ &(rodeo_rectangle_t){
+ .x = bullet->x,
+ .y = bullet->y,
+ .width = bullet->width,
+ .height = bullet->height,
+ },
+ &(rodeo_rectangle_t){
+ .x = 0,
+ .y = 0,
+ .width = 25,
+ .height = 25
+ },
+ NULL,
+ &bullet_texture
+ );
+ }
+ c_foreach(i, cvec_collision_2d_world_item, enemy_bullet_collision_world) {
+ cvec_collision_2d_world_item_value *bullet = i.ref;
+ rodeo_texture_2d_draw(
+ &(rodeo_rectangle_t){
+ .x = bullet->x,
+ .y = bullet->y,
+ .width = bullet->width,
+ .height = bullet->height,
+ },
+ &(rodeo_rectangle_t){
+ .x = 0,
+ .y = 0,
+ .width = 25,
+ .height = 25
+ },
+ NULL,
+ &bullet_texture
+ );
+ }
+}
+
+rodeo_collision_2d_world_t *
+get_enemy_bullet_world(void)
+{
+ return &enemy_bullet_collision_world;
+}
+
+rodeo_collision_2d_world_t *
+get_player_bullet_world(void)
+{
+ return &player_bullet_collision_world;
+}