diff options
| -rw-r--r-- | build/data/imgs/plants.png | bin | 0 -> 9545 bytes | |||
| -rw-r--r-- | build/data/imgs/player.png | bin | 0 -> 81870 bytes | |||
| -rw-r--r-- | build/data/imgs/wall1.png | bin | 0 -> 4613 bytes | |||
| -rw-r--r-- | build/data/maps/map1.dat | bin | 0 -> 6408 bytes | |||
| -rw-r--r-- | build/zombies.exe | bin | 1771319 -> 1776150 bytes | |||
| -rw-r--r-- | data/imgs/plants.png | bin | 0 -> 9545 bytes | |||
| -rw-r--r-- | data/imgs/player.png | bin | 0 -> 81870 bytes | |||
| -rw-r--r-- | data/imgs/wall1.png | bin | 0 -> 4613 bytes | |||
| -rw-r--r-- | data/maps/map1.dat | bin | 0 -> 6408 bytes | |||
| -rw-r--r-- | include/asset_defs.h | 4 | ||||
| -rw-r--r-- | include/map.h | 37 | ||||
| -rw-r--r-- | include/objects.h | 1 | ||||
| -rw-r--r-- | include/players.h | 2 | ||||
| -rw-r--r-- | main.c | 2 | ||||
| -rw-r--r-- | src/asset_defs.c | 5 | ||||
| -rw-r--r-- | src/map.c | 11 | ||||
| -rw-r--r-- | src/objects.c | 29 | ||||
| -rw-r--r-- | src/players.c | 25 |
18 files changed, 99 insertions, 17 deletions
diff --git a/build/data/imgs/plants.png b/build/data/imgs/plants.png Binary files differnew file mode 100644 index 0000000..fc936a8 --- /dev/null +++ b/build/data/imgs/plants.png diff --git a/build/data/imgs/player.png b/build/data/imgs/player.png Binary files differnew file mode 100644 index 0000000..06d4cae --- /dev/null +++ b/build/data/imgs/player.png diff --git a/build/data/imgs/wall1.png b/build/data/imgs/wall1.png Binary files differnew file mode 100644 index 0000000..980513f --- /dev/null +++ b/build/data/imgs/wall1.png diff --git a/build/data/maps/map1.dat b/build/data/maps/map1.dat Binary files differnew file mode 100644 index 0000000..e4142aa --- /dev/null +++ b/build/data/maps/map1.dat diff --git a/build/zombies.exe b/build/zombies.exe Binary files differindex 41f3267..998fde1 100644 --- a/build/zombies.exe +++ b/build/zombies.exe diff --git a/data/imgs/plants.png b/data/imgs/plants.png Binary files differnew file mode 100644 index 0000000..fc936a8 --- /dev/null +++ b/data/imgs/plants.png diff --git a/data/imgs/player.png b/data/imgs/player.png Binary files differnew file mode 100644 index 0000000..06d4cae --- /dev/null +++ b/data/imgs/player.png diff --git a/data/imgs/wall1.png b/data/imgs/wall1.png Binary files differnew file mode 100644 index 0000000..980513f --- /dev/null +++ b/data/imgs/wall1.png diff --git a/data/maps/map1.dat b/data/maps/map1.dat Binary files differnew file mode 100644 index 0000000..e4142aa --- /dev/null +++ b/data/maps/map1.dat diff --git a/include/asset_defs.h b/include/asset_defs.h index d6af444..10919b4 100644 --- a/include/asset_defs.h +++ b/include/asset_defs.h @@ -12,6 +12,10 @@ image* img_icon_nova; image* img_drop; image* img_spawner; +image* img_obj_plants; +image* img_obj_wall1; +image* img_player; + image* img_zombie_chunk_hand; image* img_zombie_chunk_foot; image* img_zombie_chunk_blood; diff --git a/include/map.h b/include/map.h index 8f153f8..6109c5a 100644 --- a/include/map.h +++ b/include/map.h @@ -23,7 +23,7 @@ typedef struct t_tile { } tile; #define MAP_SIZE_X 40 -#define MAP_SIZE_Y 20 +#define MAP_SIZE_Y 40 tile map_loaded[MAP_SIZE_Y][MAP_SIZE_X]; @@ -34,6 +34,21 @@ typedef struct t_map_info { float px_incline; } map_info; +typedef struct t_map_data { + int width; + int height; + int heightmap[MAP_SIZE_Y][MAP_SIZE_X]; +} map_data; + +typedef struct t_extracted_map_data { + int width; + int height; + tile heightmap[MAP_SIZE_Y][MAP_SIZE_X]; +} extracted_map_data; + +map_data map_to_load = {0}; +extracted_map_data loaded_map = {0}; + // data data that is stored on disk int map[MAP_SIZE_Y][MAP_SIZE_X] = { {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, @@ -55,6 +70,26 @@ int map[MAP_SIZE_Y][MAP_SIZE_X] = { {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, }; void load_map_from_data(); diff --git a/include/objects.h b/include/objects.h index 95e3739..50cd6f9 100644 --- a/include/objects.h +++ b/include/objects.h @@ -14,6 +14,7 @@ typedef struct t_object { vec2f position; vec3f size; float h; + image* image; } object; typedef struct t_box { diff --git a/include/players.h b/include/players.h index 027fb31..c4652f2 100644 --- a/include/players.h +++ b/include/players.h @@ -8,6 +8,7 @@ #include "zombies.h" #include "math_helper.h" #include "guns.h" +#include "sprite.h" #define MAX_PLAYERS 10 @@ -27,6 +28,7 @@ typedef struct t_player { network_client client; // For the host: is_connected = false and socket = 0 int kills; u64 ping; + sprite sprite; } player; #include "protocol.h" @@ -1,3 +1,5 @@ +#define ASSET_IMAGE_COUNT 50 + #include <projectbase/project_base.h> #include "include/players.h" diff --git a/src/asset_defs.c b/src/asset_defs.c index da8b5f0..a136e5f 100644 --- a/src/asset_defs.c +++ b/src/asset_defs.c @@ -16,4 +16,9 @@ void load_assets() { img_tile_cobblestone = assets_load_image_from_file("data/imgs/tile_cobblestone.png"); img_spawner = assets_load_image_from_file("data/imgs/spawner.png"); + + img_obj_plants = assets_load_image_from_file("data/imgs/plants.png"); + img_obj_wall1 = assets_load_image_from_file("data/imgs/wall1.png"); + + img_player = assets_load_image_from_file("data/imgs/player.png"); }
\ No newline at end of file @@ -95,9 +95,18 @@ static int get_height_of_tile_tr(int current_height, int x, int y) { // load hardcoded map. void load_map_from_data() { + + // load map from file.. + file_content content = platform_read_file_content("data/maps/map1.dat", "rb"); + memcpy(&map_to_load, content.content, content.content_length); + + //map_to_load.width = MAP_SIZE_X; + //map_to_load.height = MAP_SIZE_Y; + //memcpy(map_to_load.heightmap, map, sizeof(map)); + for (int y = 0; y < MAP_SIZE_Y; y++) { for (int x = MAP_SIZE_X-1; x >= 0; x--) { - int h = map[y][x]; + int h = map_to_load.heightmap[y][x]; int highest_point_topleft = get_height_of_tile_tl(h, x, y); int highest_point_topright = get_height_of_tile_tr(h, x, y); int highest_point_bottomright = get_height_of_tile_br(h, x, y); diff --git a/src/objects.c b/src/objects.c index 7b3b7a0..fdb0daa 100644 --- a/src/objects.c +++ b/src/objects.c @@ -48,7 +48,7 @@ void draw_objects_at_row(platform_window* window, int row) { if (!o.active) continue; box box = get_box_of_object(window, o); - renderer->render_image(img_drop, box.tl_u.x, box.tl_u.y, + renderer->render_image(o.image, box.tl_u.x, box.tl_u.y, box.br_d.x - box.tl_d.x, box.br_d.y - box.tr_u.y); /* render_quad_with_outline(box.tl_d, box.tr_d, box.bl_d, box.br_d, rgb(200,200,0)); @@ -58,7 +58,7 @@ void draw_objects_at_row(platform_window* window, int row) { } } -void create_box(float x, float y, float h) { +void create_box(float x, float y, float h, image* img) { for (int i = 0; i < max_objects; i++) { object o = objects[i]; if (o.active) continue; @@ -67,6 +67,7 @@ void create_box(float x, float y, float h) { objects[i].position = (vec2f){x, y}; objects[i].h = h; objects[i].size = (vec3f){1,1,2}; + objects[i].image = img; break; } } @@ -75,24 +76,24 @@ void create_objects() { // rechts naar links op map. for (int i = MAP_SIZE_X-1; i >= 0; i--) { - create_box(i, 0, 0); - create_box(i, MAP_SIZE_Y-1, 0); + create_box(i, 0, 0, img_obj_wall1); + create_box(i, MAP_SIZE_Y-1, 0, img_obj_wall1); } for (int i = MAP_SIZE_Y-1; i >= 0; i--) { - create_box(0, i, 0); - create_box(MAP_SIZE_X-1, i, 0); + create_box(0, i, 0, img_obj_wall1); + create_box(MAP_SIZE_X-1, i, 0, img_obj_wall1); } - create_box(16, 8, 0); - create_box(14, 8, 0); - create_box(11, 8, 0); - create_box(10, 8, 0); + create_box(16, 8, 0, img_obj_plants); + create_box(14, 8, 0, img_obj_plants); + create_box(11, 8, 0, img_obj_plants); + create_box(10, 8, 0, img_obj_plants); - create_box(15, 10, 0); - create_box(14, 10, 0); - create_box(13, 10, 0); - create_box(11, 10, 0); + create_box(15, 10, 0, img_obj_plants); + create_box(14, 10, 0, img_obj_plants); + create_box(13, 10, 0, img_obj_plants); + create_box(11, 10, 0, img_obj_plants); create_spawner((vec2){15, 5}); create_spawner((vec2){3, 8}); diff --git a/src/players.c b/src/players.c index 886c782..6409b77 100644 --- a/src/players.c +++ b/src/players.c @@ -40,6 +40,7 @@ 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); gun g = get_gun_by_type(players[i].guntype); players[i].total_ammo = g.max_ammunition; @@ -139,10 +140,23 @@ int get_my_player_index() { return -1; } +static void take_update_debug(platform_window* window) { + if (keyboard_is_key_down(KEY_LEFT_CONTROL) && keyboard_is_key_pressed(KEY_S)) { + platform_write_file_content("../data/maps/map1.dat", "wb", (u8*)&map_to_load, sizeof(map_to_load)); + platform_write_file_content("data/maps/map1.dat", "wb", (u8*)&map_to_load, sizeof(map_to_load)); + + log_info("Saved map"); + } +} + void take_player_input(platform_window* window) { player* p = get_player_by_id(player_id); if (!p) return; +#ifdef MODE_DEBUG + take_update_debug(window); +#endif + if (keyboard_is_key_down(KEY_W)) { if (!global_state.server) { network_message message = create_protocol_user_moved(MOVE_UP, player_id); @@ -208,6 +222,7 @@ void update_players_server() { for (int i = 0; i < MAX_PLAYERS; i++) { if (!players[i].active) continue; players[i].sec_since_last_shot += SERVER_TICK_RATE; + update_sprite(&players[i].sprite); } } @@ -222,15 +237,23 @@ void draw_players(platform_window* window) { 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}); + /* 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(players[i].sprite.image, + box.tl_u.x, box.tl_u.y, + box.bl_d.x, box.bl_d.y, + box.br_d.x, box.br_d.y, + box.tr_u.x, box.tr_u.y, + frame.tl, frame.tr, frame.bl, frame.br); int size = get_tile_width(window) / 2; map_info info = get_map_info(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); |
