From 962ebf95459a8da08f44898d13d185e60de59b45 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Thu, 9 May 2024 11:31:07 +0200 Subject: work --- .vscode/settings.json | 5 +++ build.zip | Bin 0 -> 16555725 bytes data/imgs/objects/plants.png | Bin 9545 -> 0 bytes data/imgs/objects/space_control_panel.png | Bin 0 -> 26864 bytes data/imgs/objects/wall1.png | Bin 4613 -> 0 bytes data/maps/map1.dat | Bin 8322408 -> 8322408 bytes data/psd/space_control_panel.psd | Bin 0 -> 185234 bytes include/asset_defs.h | 6 ++-- include/map.h | 1 + include/objects.h | 13 +++---- include/players.h | 11 +++++- include/protocol.h | 2 ++ main.c | 2 +- src/asset_defs.c | 6 ++-- src/audio.c | 4 +-- src/editor.c | 12 ++++++- src/map.c | 9 +++-- src/objects.c | 9 ++--- src/players.c | 55 +++++++++++++++++++++++------- src/zombies.c | 4 +++ 20 files changed, 102 insertions(+), 37 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 build.zip delete mode 100644 data/imgs/objects/plants.png create mode 100644 data/imgs/objects/space_control_panel.png delete mode 100644 data/imgs/objects/wall1.png create mode 100644 data/psd/space_control_panel.psd diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..30eb399 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "project_base.h": "c" + } +} \ No newline at end of file diff --git a/build.zip b/build.zip new file mode 100644 index 0000000..ae1f86d Binary files /dev/null and b/build.zip differ diff --git a/data/imgs/objects/plants.png b/data/imgs/objects/plants.png deleted file mode 100644 index fc936a8..0000000 Binary files a/data/imgs/objects/plants.png and /dev/null differ diff --git a/data/imgs/objects/space_control_panel.png b/data/imgs/objects/space_control_panel.png new file mode 100644 index 0000000..b9dace2 Binary files /dev/null and b/data/imgs/objects/space_control_panel.png differ diff --git a/data/imgs/objects/wall1.png b/data/imgs/objects/wall1.png deleted file mode 100644 index 980513f..0000000 Binary files a/data/imgs/objects/wall1.png and /dev/null differ diff --git a/data/maps/map1.dat b/data/maps/map1.dat index aef35fc..0b01ded 100644 Binary files a/data/maps/map1.dat and b/data/maps/map1.dat differ diff --git a/data/psd/space_control_panel.psd b/data/psd/space_control_panel.psd new file mode 100644 index 0000000..0508707 Binary files /dev/null and b/data/psd/space_control_panel.psd differ diff --git a/include/asset_defs.h b/include/asset_defs.h index 60ad94a..97cea1c 100644 --- a/include/asset_defs.h +++ b/include/asset_defs.h @@ -34,10 +34,10 @@ image* img_disconnected; image* img_icon_grenade; image* img_icon_molotov; -// Objects +// Objects // @NEWOBJECT image* img_spawner; -image* img_obj_plants; -image* img_obj_wall1; +image* img_space_control_panel; +image* img_space_window; image* img_metal_wall; image* img_metal_wall2; diff --git a/include/map.h b/include/map.h index ed8cbed..8b11634 100644 --- a/include/map.h +++ b/include/map.h @@ -67,6 +67,7 @@ typedef struct t_extracted_map_data { light_emitter light_emitters[MAX_LIGHT_EMITTERS]; } extracted_map_data; +extern int player_zoom; map_data map_to_load = {0}; extracted_map_data loaded_map = {0}; diff --git a/include/objects.h b/include/objects.h index 62396fa..4444253 100644 --- a/include/objects.h +++ b/include/objects.h @@ -20,10 +20,10 @@ typedef struct t_light_emitter { typedef enum t_object_type { OBJECT_NONE, - OBJECT_COBBLESTONEWALL1, - OBJECT_PLANTBOX1, - OBJECT_METAL_WALL, - OBJECT_METAL_WALL2, + OBJECT_SPACE_CONTROL_PANEL = 1, + OBJECT_SPACE_WINDOW = 2, + OBJECT_METAL_WALL = 3, + OBJECT_METAL_WALL2 = 4, OBJECT_END, } object_type; @@ -47,9 +47,10 @@ typedef struct t_box { vec2f br_u; } box; +// @NEWOBJECT object object_dict[OBJECT_END] = { - {0,(vec3f){0, 0, 0},{1,1,1},OBJECT_COBBLESTONEWALL1}, - {0,(vec3f){0, 0, 0},{1,1,2},OBJECT_PLANTBOX1}, + {0,(vec3f){0, 0, 0},{1,3,1},OBJECT_SPACE_CONTROL_PANEL}, + {0,(vec3f){0, 0, 0},{1,1,2},OBJECT_SPACE_WINDOW}, {0,(vec3f){0, 0, 0},{1,1,1},OBJECT_METAL_WALL}, {0,(vec3f){0, 0, 0},{1,1,1},OBJECT_METAL_WALL2}, }; diff --git a/include/players.h b/include/players.h index d230d0c..ccf91b9 100644 --- a/include/players.h +++ b/include/players.h @@ -19,9 +19,16 @@ typedef enum t_player_interact_state { INTERACT_IDLE, INTERACT_RELOADING, - INTERACT_DEAD + INTERACT_DEAD, } player_interact_state; +typedef enum t_player_move_state +{ + PLAYER_MOVE_STATE_RUNNING, + PLAYER_MOVE_STATE_IDLE, + PLAYER_MOVE_STATE_JUMPING, +} player_move_state; + typedef enum t_player_direction { DIRECTION_UP, DIRECTION_RIGHT, @@ -58,6 +65,7 @@ typedef struct t_player { float guny; float dirx; float diry; + player_move_state move_state; float gun_height; float sec_since_last_step; player_direction direction; @@ -70,6 +78,7 @@ typedef struct t_player { u64 ping; sprite sprite; sprite sprite_death; + sprite sprite_idle; network_state connection_state; u32 points; struct { diff --git a/include/protocol.h b/include/protocol.h index 6113682..9ca7226 100644 --- a/include/protocol.h +++ b/include/protocol.h @@ -100,6 +100,8 @@ typedef enum t_protocol_move_type MOVE_UPLEFT, MOVE_DOWNRIGHT, MOVE_DOWNLEFT, + + MOVE_NONE, } protocol_move_type; typedef struct t_protocol_move diff --git a/main.c b/main.c index 7fbb345..aa42770 100644 --- a/main.c +++ b/main.c @@ -3,7 +3,7 @@ #define ASSET_FONT_COUNT 20 #define NUM_AUDIO_CHANNELS 64 -#include +#include "project-base/src/project_base.h" #include "include/SDL2/SDL_mixer.h" diff --git a/src/asset_defs.c b/src/asset_defs.c index 33f50d8..d40771b 100644 --- a/src/asset_defs.c +++ b/src/asset_defs.c @@ -42,10 +42,10 @@ void load_assets() { img_grenade_explode = assets_load_image_from_file("data/imgs/throwables/grenade_explode.png"); img_molotov_explode = assets_load_image_from_file("data/imgs/throwables/molotov_explode.png"); - // Objects + // Objects // @NEWOBJECT img_spawner = assets_load_image_from_file("data/imgs/spawner.png"); - img_obj_plants = assets_load_image_from_file("data/imgs/objects/plants.png"); - img_obj_wall1 = assets_load_image_from_file("data/imgs/objects/wall1.png"); + img_space_control_panel = assets_load_image_from_file("data/imgs/objects/space_control_panel.png"); + img_space_window = assets_load_image_from_file("data/imgs/objects/metal_wall_window.png"); img_metal_wall = assets_load_image_from_file("data/imgs/objects/metal_wall.png"); img_metal_wall2 = assets_load_image_from_file("data/imgs/objects/metal_wall2.png"); diff --git a/src/audio.c b/src/audio.c index b933f35..72127ae 100644 --- a/src/audio.c +++ b/src/audio.c @@ -100,9 +100,9 @@ static Mix_Chunk* get_sample_from_audio_event(audio_event event, u32 playerid) { } } else if (event.obj != OBJECT_NONE) { - switch (event.obj) + switch (event.obj) // @NEWOBJECT { - case OBJECT_PLANTBOX1: return wav_impact_wood; + //case OBJECT_PLANTBOX1: return wav_impact_wood; case OBJECT_METAL_WALL: case OBJECT_METAL_WALL2: return wav_impact_metal; default: return wav_error; diff --git a/src/editor.c b/src/editor.c index c908b74..c506cbc 100644 --- a/src/editor.c +++ b/src/editor.c @@ -85,6 +85,15 @@ void update_editor(platform_window* window) camera_x += update_delta*cam_speed; } + if (_global_mouse.scroll_state == SCROLL_UP) { + player_zoom++; + printf("%d %d\n", player_zoom, get_tile_width(window)); + } + if (_global_mouse.scroll_state == SCROLL_DOWN) { + player_zoom--; + printf("%d %d\n", player_zoom, get_tile_width(window)); + } + _next_camera_pos.x = -(window->width / 2) + camera_x; _next_camera_pos.y = -(window->height / 2) + camera_y; @@ -375,6 +384,7 @@ void update_object_editor(platform_window* window) { if (keyboard_is_key_down(KEY_ESCAPE)) { object_edit_state = OBJECT_EDITOR_SELECTING; } + if (_global_mouse.x < editor_width) return; if (pos.x < 0 || pos.y < 0) return; if (pos.x >= loaded_map.width || pos.y >= loaded_map.height) return; @@ -415,7 +425,7 @@ void draw_object_panel(platform_window* window) { y += offset_y; image* img = get_image_from_objecttype((object_type)i); - if (push_icon_button(x, y, tile_w, img, object_to_place == (object_type)i && object_edit_state == OBJECT_EDITOR_PLACING)) { + if (push_icon_button(x, y, tile_w, img, object_to_place == (object_type)i)) { object_to_place = (object_type)i; object_edit_state = OBJECT_EDITOR_PLACING; } diff --git a/src/map.c b/src/map.c index 4ebd930..8ec60fb 100644 --- a/src/map.c +++ b/src/map.c @@ -1,5 +1,6 @@ #include "../include/map.h" +int player_zoom = 30; static int get_height_of_tile_tl(int current_height, int x, int y) { int highest_point = current_height; if (y > 0) { @@ -299,9 +300,11 @@ static int round_up(int numToRound, int multiple) } inline int get_tile_width(platform_window* window) { - int tile_width = window->height / 30; - if (window->width > window->height) tile_width = window->width / 30; - return round_up(tile_width, 8); + //int tile_width = window->height / player_zoom; + //if (window->width > window->height) tile_width = window->width / player_zoom; + //return round_up(tile_width, 8); + + return 32; } inline int get_tile_height(platform_window* window) { diff --git a/src/objects.c b/src/objects.c index ce1d261..213879c 100644 --- a/src/objects.c +++ b/src/objects.c @@ -77,13 +77,14 @@ void add_object(object obj) { log_info("Object limit reached."); } +// @NEWOBJECT image* get_image_from_objecttype(object_type tile) { switch (tile) { - case OBJECT_COBBLESTONEWALL1: - return img_obj_wall1; - case OBJECT_PLANTBOX1: - return img_obj_plants; + case OBJECT_SPACE_CONTROL_PANEL: + return img_space_control_panel; + case OBJECT_SPACE_WINDOW: + return img_space_window; case OBJECT_METAL_WALL: return img_metal_wall; case OBJECT_METAL_WALL2: diff --git a/src/players.c b/src/players.c index 32b62cd..cb7842e 100644 --- a/src/players.c +++ b/src/players.c @@ -57,14 +57,17 @@ void spawn_player(u32 id, network_client client) { players[i].guny = 0.0f; players[i].gun_height = 0.0f; players[i].id = id; + players[i].move_state = PLAYER_MOVE_STATE_IDLE; players[i].guntype = GUN_MP5; players[i].height = 0.0f; players[i].client = client; players[i].sprite = create_sprite(img_gunner_blue_run, 6, 48, 48, 0.1f); players[i].sprite_death = create_sprite(img_gunner_blue_run, 8, 48, 48, 0.1f); + players[i].sprite_idle = create_sprite(img_gunner_blue_idle, 5, 48, 48, 0.1f); players[i].sprite_death.loop = false; players[i].sprite.zoom = 1.1f; players[i].sprite_death.zoom = 1.1f; + players[i].sprite_idle.zoom = 1.1f; players[i].health = 500; players[i].max_health = 500; @@ -133,6 +136,12 @@ void move_user(platform_window* window, u32 id, protocol_move_type move, float d if (p->interact_state == INTERACT_DEAD) return; + if (move == MOVE_NONE) { + p->move_state = PLAYER_MOVE_STATE_IDLE; + return; + } + p->move_state = PLAYER_MOVE_STATE_RUNNING; + if (p->sec_since_last_step > 0.2f) { add_audio_event_to_queue(EVENT_FOOTSTEP, p->id, (vec3f){.x = p->playerx, .y = p->playery, .z = p->height}); p->sec_since_last_step = 0.0f; @@ -274,6 +283,11 @@ void take_player_input(platform_window* window) { add_message_to_outgoing_queuex(message, *global_state.client); move_user(window, player_id,MOVE_DOWN, update_delta); } + else if (p->move_state == PLAYER_MOVE_STATE_RUNNING) { + network_message message = create_protocol_user_moved(MOVE_NONE, player_id); + add_message_to_outgoing_queuex(message, *global_state.client); + move_user(window, player_id,MOVE_NONE, update_delta); + } #ifdef MODE_DEBUG @@ -514,6 +528,17 @@ image* get_player_run_sprite_from_index(int index) { return imgs[index]; } +image* get_player_idle_sprite_from_index(int index) { + image* imgs[] = { + img_gunner_blue_idle, + img_gunner_black_idle, + img_gunner_green_idle, + img_gunner_yellow_idle, + img_gunner_red_idle, + }; + return imgs[index]; +} + void draw_player(platform_window* window, player* p, int index) { float size = get_player_size(window); map_info info = get_map_info(window); @@ -528,27 +553,31 @@ void draw_player(platform_window* window, player* p, int index) { { sprite_frame frame = sprite_get_frame(img_gunner_blue_run, &p->sprite); float rads = -atan2(p->diry, p->dirx); - if (rads > M_PI/2 || rads < -M_PI/2) { - frame = sprite_swap_frame_horizontally(frame); - } + image* img; if (p->interact_state == INTERACT_DEAD) { - frame = sprite_get_frame(img_gunner_blue_die, &p->sprite_death); - renderer->render_image_quad_partial(get_player_death_sprite_from_index(index), - player_render_x, player_render_y, - player_render_x, player_render_y + size, - player_render_x + size, player_render_y + size, - player_render_x + size, player_render_y, - frame.tl, frame.tr, frame.bl, frame.br); + frame = sprite_get_frame(get_player_death_sprite_from_index(index), &p->sprite_death); + img = get_player_death_sprite_from_index(index); + } + else if (p->move_state == PLAYER_MOVE_STATE_IDLE) { + frame = sprite_get_frame(get_player_idle_sprite_from_index(index), &p->sprite_idle); + img = get_player_idle_sprite_from_index(index); + } + // TODO: other movement states + else if (p->move_state == PLAYER_MOVE_STATE_RUNNING) { + img = get_player_run_sprite_from_index(index); } - else { - renderer->render_image_quad_partial(get_player_run_sprite_from_index(index), + + if (rads > M_PI/2 || rads < -M_PI/2) { + frame = sprite_swap_frame_horizontally(frame); + } + + renderer->render_image_quad_partial(img, player_render_x, player_render_y, player_render_x, player_render_y + size, player_render_x + size, player_render_y + size, player_render_x + size, player_render_y, frame.tl, frame.tr, frame.bl, frame.br); - } } // Nametag diff --git a/src/zombies.c b/src/zombies.c index 116b5fa..c128a0c 100644 --- a/src/zombies.c +++ b/src/zombies.c @@ -342,6 +342,10 @@ static void update_zombie_attacks_server(zombie *zombie) { } void update_zombies_server(platform_window* window) { + #ifdef MODE_DEBUG + if (is_editing_map) return; + #endif + for (int i = 0; i < SERVER_MAX_ZOMBIES; i++) { zombie o = zombies[i]; if (!o.alive) continue; -- cgit v1.2.3-70-g09d2