summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2023-12-26 21:24:38 +0100
committerAldrik Ramaekers <aldrik@amftech.nl>2023-12-26 21:24:38 +0100
commitddcd60881a73860c9c4d4dd895196221dfdd4aef (patch)
tree1c3e086c6f5091153a248e6ed3c5cf3180cabfa2
parent67cec2bf936f0274b61bb803b0baca3ffdb488fc (diff)
gun
-rw-r--r--build/data/imgs/guns/mp5.pngbin0 -> 6638 bytes
-rw-r--r--build/data/psd/mp5.psdbin0 -> 152081 bytes
-rw-r--r--build/zombies.exebin2108497 -> 2110646 bytes
-rw-r--r--data/imgs/guns/mp5.pngbin0 -> 6638 bytes
-rw-r--r--data/psd/mp5.psdbin0 -> 152081 bytes
-rw-r--r--include/asset_defs.h4
-rw-r--r--include/guns.h2
-rw-r--r--include/players.h1
-rw-r--r--src/asset_defs.c3
-rw-r--r--src/guns.c26
-rw-r--r--src/players.c38
-rw-r--r--src/wall_item.c2
12 files changed, 72 insertions, 4 deletions
diff --git a/build/data/imgs/guns/mp5.png b/build/data/imgs/guns/mp5.png
new file mode 100644
index 0000000..ffa0447
--- /dev/null
+++ b/build/data/imgs/guns/mp5.png
Binary files differ
diff --git a/build/data/psd/mp5.psd b/build/data/psd/mp5.psd
new file mode 100644
index 0000000..29bbe76
--- /dev/null
+++ b/build/data/psd/mp5.psd
Binary files differ
diff --git a/build/zombies.exe b/build/zombies.exe
index 3a783d1..797eebd 100644
--- a/build/zombies.exe
+++ b/build/zombies.exe
Binary files differ
diff --git a/data/imgs/guns/mp5.png b/data/imgs/guns/mp5.png
new file mode 100644
index 0000000..ffa0447
--- /dev/null
+++ b/data/imgs/guns/mp5.png
Binary files differ
diff --git a/data/psd/mp5.psd b/data/psd/mp5.psd
new file mode 100644
index 0000000..29bbe76
--- /dev/null
+++ b/data/psd/mp5.psd
Binary files differ
diff --git a/include/asset_defs.h b/include/asset_defs.h
index dabb766..6202125 100644
--- a/include/asset_defs.h
+++ b/include/asset_defs.h
@@ -43,7 +43,9 @@ image* img_molotov_explode;
// Players
image* img_helmet;
image* img_body;
-image* img_body2;
+
+// Guns
+image* img_gun_mp5;
// Other
image* img_zombie_chunk_hand;
diff --git a/include/guns.h b/include/guns.h
index 52f4a10..1765159 100644
--- a/include/guns.h
+++ b/include/guns.h
@@ -27,7 +27,9 @@ gun guns[GUN_ALL] = {
{GUN_NOVA, "Nova", 12, 80, 0.1f, 3, 1.2f, 600, 1.0f},
};
+float get_gun_size(gun_type type);
image* get_image_of_gun(gun_type type);
+image* get_icon_of_gun(gun_type type);
gun get_gun_by_type(gun_type type);
#endif \ No newline at end of file
diff --git a/include/players.h b/include/players.h
index dc74a26..44cf8b1 100644
--- a/include/players.h
+++ b/include/players.h
@@ -63,6 +63,7 @@ typedef struct t_player {
int kills;
u64 ping;
sprite sprite;
+ sprite gun_sprite;
network_state connection_state;
u32 points;
struct {
diff --git a/src/asset_defs.c b/src/asset_defs.c
index ae389ff..35c6f0c 100644
--- a/src/asset_defs.c
+++ b/src/asset_defs.c
@@ -47,6 +47,9 @@ void load_assets() {
img_helmet = assets_load_image_from_file("data/imgs/players/helmet.png");
img_body = assets_load_image_from_file("data/imgs/players/body.png");
+ // Guns
+ img_gun_mp5 = assets_load_image_from_file("data/imgs/guns/mp5.png");
+
// Other
img_zombie_chunk_hand = assets_load_image_from_file("data/imgs/zombie_chunk_hand.png");
img_zombie_chunk_foot = assets_load_image_from_file("data/imgs/zombie_chunk_foot.png");
diff --git a/src/guns.c b/src/guns.c
index 7fa4f7e..78d917c 100644
--- a/src/guns.c
+++ b/src/guns.c
@@ -5,9 +5,35 @@ gun get_gun_by_type(gun_type type) {
return guns[type];
}
+float get_gun_size(gun_type type) {
+ switch (type)
+ {
+ case GUN_NOVA: return 1.5f; break;
+ case GUN_MP5: return 1.5f; break;
+
+ default:
+ break;
+ }
+
+ return 0;
+}
+
image* get_image_of_gun(gun_type type) {
switch (type)
{
+ case GUN_NOVA: return img_gun_mp5; break;
+ case GUN_MP5: return img_gun_mp5; break;
+
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+image* get_icon_of_gun(gun_type type) {
+ switch (type)
+ {
case GUN_NOVA: return img_icon_nova; break;
case GUN_MP5: return img_icon_nova; break;
diff --git a/src/players.c b/src/players.c
index 6bdac1d..fc3e050 100644
--- a/src/players.c
+++ b/src/players.c
@@ -60,6 +60,7 @@ void spawn_player(u32 id, network_client client) {
players[i].height = 0.0f;
players[i].client = client;
players[i].sprite = create_sprite(img_body, 4, 256, 256, 0.0f);
+ players[i].gun_sprite = create_sprite(img_gun_mp5, 4, 256, 256, 0.0f);
players[i].direction = DIRECTION_DOWN;
players[i].connection_state = CONNECTED;
players[i].throwables.grenades = 3;
@@ -279,8 +280,9 @@ void take_player_input(platform_window* window) {
dirx /= length;
diry /= length;
- float gun_offset_x = (get_player_size_in_tile()/2) + (dirx);
- float gun_offset_y = (get_player_size_in_tile()/2) + (diry);
+ float gunsize = get_gun_size(p->guntype);
+ float gun_offset_x = (get_player_size_in_tile()/2) + (dirx*gunsize);
+ float gun_offset_y = (get_player_size_in_tile()/2) + (diry*gunsize);
add_message_to_outgoing_queuex(create_protocol_user_look(player_id, gun_offset_x, gun_offset_y, dirx, diry), *global_state.client);
}
@@ -464,6 +466,38 @@ void draw_player(platform_window* window, player* p, int index) {
float player_render_x = player_pos.x;
float player_render_y = player_pos.y;
+ vec2f gun_pos = world_pos_to_screen_pos(window, p->gunx, p->guny, p->gun_height);
+ float gun_size = info.tile_width * get_gun_size(p->guntype);
+
+ // Gun
+ {
+ gun_pos.x -= gun_size/2;
+ gun_pos.y -= gun_size/2;
+
+ float rads = -atan2(p->diry, p->dirx);
+ renderer->render_set_rotation(rads);
+ log_infox("%f", rads);
+ vec2f tl = (vec2f){0.0f, 0.0f}, tr = (vec2f){1.0f, 0.0f}, bl = (vec2f){0.0f, 1.0f}, br = (vec2f){1.0f, 1.0f};
+ if (rads > M_PI/2 || rads < -M_PI/2) {
+ tl = (vec2f){1.0f, 0.0f};
+ tr = (vec2f){0.0f, 0.0f};
+ bl = (vec2f){1.0f, 1.0f};
+ br = (vec2f){0.0f, 1.0f};
+
+ renderer->render_set_rotation(-rads+M_PI);
+ }
+
+ image* gun_img = get_image_of_gun(p->guntype);
+ renderer->render_image_quad_partial(gun_img,
+ gun_pos.x, gun_pos.y,
+ gun_pos.x, gun_pos.y + gun_size,
+ gun_pos.x + gun_size, gun_pos.y + gun_size,
+ gun_pos.x + gun_size, gun_pos.y,
+ tl, tr, bl, br);
+
+ renderer->render_set_rotation(0.0f);
+ }
+
// Body
{
sprite_frame frame = sprite_get_frame(img_body, &p->sprite);
diff --git a/src/wall_item.c b/src/wall_item.c
index 1812db7..cdec496 100644
--- a/src/wall_item.c
+++ b/src/wall_item.c
@@ -5,7 +5,7 @@
static image* get_wallitem_img(wall_item_type item, wall_item_data data) {
switch(item) {
- case WALLITEM_GUN: return get_image_of_gun(data.gun);
+ case WALLITEM_GUN: return get_icon_of_gun(data.gun);
}
return 0;