diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/asset_defs.c | 3 | ||||
| -rw-r--r-- | src/guns.c | 26 | ||||
| -rw-r--r-- | src/players.c | 38 | ||||
| -rw-r--r-- | src/wall_item.c | 2 |
4 files changed, 66 insertions, 3 deletions
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"); @@ -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; |
