diff options
| -rw-r--r-- | build/data/imgs/players/player1_idle.png | bin | 0 -> 421928 bytes | |||
| -rw-r--r-- | build/data/imgs/players/player1_running.png | bin | 0 -> 6634858 bytes | |||
| -rw-r--r-- | build/zombies.exe | bin | 1988075 -> 1989107 bytes | |||
| -rw-r--r-- | data/imgs/players/player1_idle.png | bin | 0 -> 421928 bytes | |||
| -rw-r--r-- | data/imgs/players/player1_running.png | bin | 0 -> 6634858 bytes | |||
| -rw-r--r-- | include/asset_defs.h | 2 | ||||
| -rw-r--r-- | include/players.h | 12 | ||||
| -rw-r--r-- | include/sprite.h | 1 | ||||
| -rw-r--r-- | src/asset_defs.c | 2 | ||||
| -rw-r--r-- | src/players.c | 80 | ||||
| -rw-r--r-- | src/sprite.c | 5 |
11 files changed, 82 insertions, 20 deletions
diff --git a/build/data/imgs/players/player1_idle.png b/build/data/imgs/players/player1_idle.png Binary files differnew file mode 100644 index 0000000..4b107b7 --- /dev/null +++ b/build/data/imgs/players/player1_idle.png diff --git a/build/data/imgs/players/player1_running.png b/build/data/imgs/players/player1_running.png Binary files differnew file mode 100644 index 0000000..111770d --- /dev/null +++ b/build/data/imgs/players/player1_running.png diff --git a/build/zombies.exe b/build/zombies.exe Binary files differindex ca0274d..d39bb4d 100644 --- a/build/zombies.exe +++ b/build/zombies.exe diff --git a/data/imgs/players/player1_idle.png b/data/imgs/players/player1_idle.png Binary files differnew file mode 100644 index 0000000..4b107b7 --- /dev/null +++ b/data/imgs/players/player1_idle.png diff --git a/data/imgs/players/player1_running.png b/data/imgs/players/player1_running.png Binary files differnew file mode 100644 index 0000000..111770d --- /dev/null +++ b/data/imgs/players/player1_running.png diff --git a/include/asset_defs.h b/include/asset_defs.h index 65767c6..a25da7c 100644 --- a/include/asset_defs.h +++ b/include/asset_defs.h @@ -27,7 +27,7 @@ image* img_grenade; image* img_grenade_explode; // Players -image* img_player; +image* img_player_running; // Other image* img_zombie_chunk_hand; diff --git a/include/players.h b/include/players.h index 90fdc84..535d388 100644 --- a/include/players.h +++ b/include/players.h @@ -17,6 +17,17 @@ typedef enum t_player_interact_state { INTERACT_RELOADING, } player_interact_state; +typedef enum t_player_direction { + DIRECTION_UP, + DIRECTION_RIGHT, + DIRECTION_DOWN, + DIRECTION_LEFT, + DIRECTION_TOPLEFT, + DIRECTION_TOPRIGHT, + DIRECTION_BOTTOMLEFT, + DIRECTION_BOTTOMRIGHT, +} player_direction; + typedef struct t_player { u32 id; bool active; @@ -28,6 +39,7 @@ typedef struct t_player { float gunx; float guny; float gun_height; + player_direction direction; int total_ammo; int ammo_in_mag; float height; diff --git a/include/sprite.h b/include/sprite.h index 7e0fa41..251ceea 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -12,6 +12,7 @@ typedef struct t_sprite { float time; int img_width; int img_height; + int frame_start; } sprite; typedef struct t_sprite_frame { diff --git a/src/asset_defs.c b/src/asset_defs.c index 60f53bb..837a8ce 100644 --- a/src/asset_defs.c +++ b/src/asset_defs.c @@ -25,7 +25,7 @@ void load_assets() { img_obj_wall1 = assets_load_image_from_file("data/imgs/wall1.png"); // Players - img_player = assets_load_image_from_file("data/imgs/player.png"); + img_player_running = assets_load_image_from_file("data/imgs/players/player1_running.png"); // Other img_zombie_chunk_hand = assets_load_image_from_file("data/imgs/zombie_chunk_hand.png"); diff --git a/src/players.c b/src/players.c index 51418ed..ac34778 100644 --- a/src/players.c +++ b/src/players.c @@ -10,7 +10,7 @@ float get_bullet_size(platform_window* window) { } float get_player_size_in_tile() { - return 0.5; + return 0.8f; } float get_player_size(platform_window* window) { @@ -40,7 +40,8 @@ void spawn_player(u32 id, network_client client) { players[i].guntype = GUN_MP5; players[i].height = 0.0f; players[i].client = client; - players[i].sprite = create_sprite(img_player, 5, 87, 100, 0.07f); + players[i].sprite = create_sprite(img_player_running, 22, 108, 136, 0.02f); + players[i].direction = DIRECTION_DOWN; gun g = get_gun_by_type(players[i].guntype); players[i].total_ammo = g.max_ammunition; @@ -148,23 +149,43 @@ void take_player_input(platform_window* window) { update_editor(window); #endif - if (keyboard_is_key_down(KEY_W)) { - network_message message = create_protocol_user_moved(MOVE_UP, player_id); - add_message_to_outgoing_queuex(message, *global_state.client); - } - if (keyboard_is_key_down(KEY_S)) { - network_message message = create_protocol_user_moved(MOVE_DOWN, player_id); - add_message_to_outgoing_queuex(message, *global_state.client); - } if (keyboard_is_key_down(KEY_A)) { network_message message = create_protocol_user_moved(MOVE_LEFT, player_id); add_message_to_outgoing_queuex(message, *global_state.client); + p->direction = DIRECTION_LEFT; } if (keyboard_is_key_down(KEY_D)) { network_message message = create_protocol_user_moved(MOVE_RIGHT, player_id); add_message_to_outgoing_queuex(message, *global_state.client); + p->direction = DIRECTION_RIGHT; } + if (keyboard_is_key_down(KEY_W)) { + network_message message = create_protocol_user_moved(MOVE_UP, player_id); + add_message_to_outgoing_queuex(message, *global_state.client); + p->direction = DIRECTION_UP; + + if (keyboard_is_key_down(KEY_A)) { + p->direction = DIRECTION_TOPLEFT; + } + else if (keyboard_is_key_down(KEY_D)) { + p->direction = DIRECTION_TOPRIGHT; + } + } + if (keyboard_is_key_down(KEY_S)) { + network_message message = create_protocol_user_moved(MOVE_DOWN, player_id); + add_message_to_outgoing_queuex(message, *global_state.client); + p->direction = DIRECTION_DOWN; + + if (keyboard_is_key_down(KEY_A)) { + p->direction = DIRECTION_BOTTOMLEFT; + } + else if (keyboard_is_key_down(KEY_D)) { + p->direction = DIRECTION_BOTTOMRIGHT; + } + } + + #ifdef MODE_DEBUG if (is_editing_map) return; #endif @@ -177,8 +198,8 @@ 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 gun_offset_x = (get_player_size_in_tile()/2) + (dirx/4); + float gun_offset_y = (get_player_size_in_tile()/2) + (diry/4); add_message_to_outgoing_queuex(create_protocol_user_look(player_id, gun_offset_x, gun_offset_y), *global_state.client); } @@ -227,6 +248,33 @@ void update_players_server() { players[i].interact_state = INTERACT_IDLE; } + if (players[i].direction == DIRECTION_DOWN) { + players[i].sprite.frame_start = 374; + } + if (players[i].direction == DIRECTION_UP) { + players[i].sprite.frame_start = 0; + } + if (players[i].direction == DIRECTION_LEFT) { + players[i].sprite.frame_start = 660; + } + if (players[i].direction == DIRECTION_RIGHT) { + players[i].sprite.frame_start = 198; + } + + if (players[i].direction == DIRECTION_TOPRIGHT) { + players[i].sprite.frame_start = 110; + } + if (players[i].direction == DIRECTION_TOPLEFT) { + players[i].sprite.frame_start = 506; + } + if (players[i].direction == DIRECTION_BOTTOMRIGHT) { + players[i].sprite.frame_start = 286; + } + if (players[i].direction == DIRECTION_BOTTOMLEFT) { + players[i].sprite.frame_start = 682; + } + + update_sprite(&players[i].sprite); } } @@ -241,15 +289,15 @@ void draw_players(platform_window* window) { float height = get_height_of_tile_under_coords(players[i].playerx, players[i].playery); players[i].height = height; - box box = get_render_box_of_square(window, (vec3f){players[i].playerx, players[i].playery, height}, (vec3f){size,size,0.8f}); + box box = get_render_box_of_square(window, (vec3f){players[i].playerx, players[i].playery, height}, (vec3f){size,size,1.0f}); /* render_quad_with_outline(box.tl_d, box.tr_d, box.bl_d, box.br_d, rgb(200,150,120)); render_quad_with_outline(box.tl_u, box.tr_u, box.bl_u, box.br_u, rgb(200,150,120)); render_quad_with_outline(box.tl_u, box.tl_d, box.bl_u, box.bl_d, rgb(200,150,120)); render_quad_with_outline(box.bl_u, box.br_u, box.bl_d, box.br_d, rgb(200,150,120)); -*/ + */ sprite_frame frame = sprite_get_frame(&players[i].sprite); - renderer->render_image_quad_partial(img_player, + renderer->render_image_quad_partial(img_player_running, box.tl_u.x, box.tl_u.y, box.bl_d.x, box.bl_d.y, box.br_d.x, box.br_d.y, @@ -261,7 +309,7 @@ void draw_players(platform_window* window) { float player_render_x = players[i].playerx*info.tile_width + (players[i].playery*info.px_incline); float player_render_y = players[i].playery*info.tile_height - (height*info.px_raised_per_h); - + players[i].gun_height = height+0.5; float gun_render_x = players[i].gunx*info.tile_width + (players[i].guny*info.px_incline); float gun_render_y = players[i].guny*info.tile_height - (players[i].gun_height*info.px_raised_per_h); diff --git a/src/sprite.c b/src/sprite.c index c905f7a..c6ee82e 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -10,6 +10,7 @@ sprite create_sprite(image* img, int frame_count, int fwidth, int fheight, float s.img_height = img->height; s.sec_per_frame = sec_per_frame; s.time = 0.0f; + s.frame_start = 0; return s; } @@ -30,8 +31,8 @@ sprite_frame sprite_get_frame(sprite* sprite) { float column_percentage = 1.0f / columns; float row_percentage = 1.0f / rows; - int column = sprite->current_frame % columns; - int row = sprite->current_frame / columns; + int column = (sprite->frame_start + sprite->current_frame) % columns; + int row = (sprite->frame_start + sprite->current_frame) / columns; frame.tl = (vec2f){column * column_percentage, row * row_percentage}; frame.tr = (vec2f){column * column_percentage + column_percentage, row * row_percentage}; |
