diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2024-05-11 12:27:41 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2024-05-11 12:27:41 +0200 |
| commit | 0ed1a617a897cf241406b3b7d5ddda5b74f4d9f4 (patch) | |
| tree | 74e5537902360e8bc2ea0e165eeb44f3ee479c5c | |
| parent | 981d99c229161c8afa508468032fe3ea0b924d3b (diff) | |
backdrop, floors, chairs
| -rw-r--r-- | data/imgs/objects/chair_up.png | bin | 0 -> 15712 bytes | |||
| -rw-r--r-- | data/imgs/objects/space_control_panel2.png | bin | 0 -> 1417 bytes | |||
| -rw-r--r-- | data/imgs/tiles/floor1.png | bin | 0 -> 156 bytes | |||
| -rw-r--r-- | data/imgs/tiles/floor2.png | bin | 0 -> 156 bytes | |||
| -rw-r--r-- | data/imgs/tiles/mars_surface.png | bin | 0 -> 19659 bytes | |||
| -rw-r--r-- | data/imgs/tiles/tile2.png | bin | 18025 -> 0 bytes | |||
| -rw-r--r-- | data/imgs/tiles/tile_cobblestone.png | bin | 18002 -> 0 bytes | |||
| -rw-r--r-- | data/maps/map1.dat | bin | 8322408 -> 8322408 bytes | |||
| -rw-r--r-- | data/psd/chair_up.psd | bin | 0 -> 97115 bytes | |||
| -rw-r--r-- | data/psd/space_control_panel2.psd | bin | 0 -> 158038 bytes | |||
| -rw-r--r-- | include/asset_defs.h | 7 | ||||
| -rw-r--r-- | include/map.h | 8 | ||||
| -rw-r--r-- | include/objects.h | 5 | ||||
| -rw-r--r-- | include/wall_item.h | 2 | ||||
| -rw-r--r-- | src/asset_defs.c | 7 | ||||
| -rw-r--r-- | src/editor.c | 21 | ||||
| -rw-r--r-- | src/game.c | 6 | ||||
| -rw-r--r-- | src/map.c | 85 | ||||
| -rw-r--r-- | src/objects.c | 12 |
19 files changed, 127 insertions, 26 deletions
diff --git a/data/imgs/objects/chair_up.png b/data/imgs/objects/chair_up.png Binary files differnew file mode 100644 index 0000000..e665be7 --- /dev/null +++ b/data/imgs/objects/chair_up.png diff --git a/data/imgs/objects/space_control_panel2.png b/data/imgs/objects/space_control_panel2.png Binary files differnew file mode 100644 index 0000000..b36a823 --- /dev/null +++ b/data/imgs/objects/space_control_panel2.png diff --git a/data/imgs/tiles/floor1.png b/data/imgs/tiles/floor1.png Binary files differnew file mode 100644 index 0000000..2307eef --- /dev/null +++ b/data/imgs/tiles/floor1.png diff --git a/data/imgs/tiles/floor2.png b/data/imgs/tiles/floor2.png Binary files differnew file mode 100644 index 0000000..8ec3b8b --- /dev/null +++ b/data/imgs/tiles/floor2.png diff --git a/data/imgs/tiles/mars_surface.png b/data/imgs/tiles/mars_surface.png Binary files differnew file mode 100644 index 0000000..2beb364 --- /dev/null +++ b/data/imgs/tiles/mars_surface.png diff --git a/data/imgs/tiles/tile2.png b/data/imgs/tiles/tile2.png Binary files differdeleted file mode 100644 index 8371f2c..0000000 --- a/data/imgs/tiles/tile2.png +++ /dev/null diff --git a/data/imgs/tiles/tile_cobblestone.png b/data/imgs/tiles/tile_cobblestone.png Binary files differdeleted file mode 100644 index f8e329b..0000000 --- a/data/imgs/tiles/tile_cobblestone.png +++ /dev/null diff --git a/data/maps/map1.dat b/data/maps/map1.dat Binary files differindex 90f5b7d..4d1c2cc 100644 --- a/data/maps/map1.dat +++ b/data/maps/map1.dat diff --git a/data/psd/chair_up.psd b/data/psd/chair_up.psd Binary files differnew file mode 100644 index 0000000..6f47e54 --- /dev/null +++ b/data/psd/chair_up.psd diff --git a/data/psd/space_control_panel2.psd b/data/psd/space_control_panel2.psd Binary files differnew file mode 100644 index 0000000..ae3d12a --- /dev/null +++ b/data/psd/space_control_panel2.psd diff --git a/include/asset_defs.h b/include/asset_defs.h index 97cea1c..3de8bbf 100644 --- a/include/asset_defs.h +++ b/include/asset_defs.h @@ -37,9 +37,11 @@ image* img_icon_molotov; // Objects // @NEWOBJECT image* img_spawner; image* img_space_control_panel; +image* img_space_control_panel2; image* img_space_window; image* img_metal_wall; image* img_metal_wall2; +image* img_chair_up; // Throwables image* img_grenade; @@ -80,8 +82,9 @@ image* img_zombie_chunk_foot; image* img_zombie_chunk_blood; // Tiles -image* img_tile_cobblestone; -image* img_tile_grass1; +image* img_mars_surface; +image* img_tile_floor1; +image* img_tile_floor2; // Sounds Mix_Chunk* wav_throwable_bounce; diff --git a/include/map.h b/include/map.h index 8b11634..50e3941 100644 --- a/include/map.h +++ b/include/map.h @@ -8,8 +8,8 @@ typedef enum t_tile_type { TILE_NONE = 0, - TILE_COBBLESTONE1 = 1, - TILE_GRASS1 = 2, + TILE_FLOOR1 = 1, + TILE_FLOOR2 = 2, TILE_END, } tile_type; @@ -42,7 +42,7 @@ typedef struct t_map_info { float px_incline; } map_info; -typedef struct t_map_data { +typedef struct t_map_data { // Data written to disk. int width; int height; int heightmap[MAP_SIZE_Y][MAP_SIZE_X]; @@ -58,7 +58,7 @@ typedef struct t_light_data { float br; } light_data; -typedef struct t_extracted_map_data { +typedef struct t_extracted_map_data { // Data extracted from file on disk. int width; int height; tile heightmap[MAP_SIZE_Y][MAP_SIZE_X]; // tilemap diff --git a/include/objects.h b/include/objects.h index ef53d78..f5b9255 100644 --- a/include/objects.h +++ b/include/objects.h @@ -18,12 +18,15 @@ typedef struct t_light_emitter { float range; } light_emitter; +// @NEWOBJECT typedef enum t_object_type { OBJECT_NONE, OBJECT_SPACE_CONTROL_PANEL = 1, OBJECT_SPACE_WINDOW = 2, OBJECT_METAL_WALL = 3, OBJECT_METAL_WALL2 = 4, + OBJECT_SPACE_CONTROL_PANEL2 = 5, + OBJECT_CHAIR_UP = 6, OBJECT_END, } object_type; @@ -53,6 +56,8 @@ object object_dict[OBJECT_END] = { {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}, + {0,(vec3f){0, 0, 0},{3,1,0.5f},OBJECT_SPACE_CONTROL_PANEL2}, + {0,(vec3f){0, 0, 0},{1,1,0.5f},OBJECT_CHAIR_UP}, }; object get_object_at_tile(float x, float y); diff --git a/include/wall_item.h b/include/wall_item.h index 4d437e0..231788e 100644 --- a/include/wall_item.h +++ b/include/wall_item.h @@ -24,7 +24,7 @@ typedef struct t_wall_item { image* img; } wall_item; -#define MAX_WALLITEMS (20) +#define MAX_WALLITEMS (200) wall_item wallitems[MAX_WALLITEMS] = {0}; void update_wallitems_server(); diff --git a/src/asset_defs.c b/src/asset_defs.c index d40771b..434d1ed 100644 --- a/src/asset_defs.c +++ b/src/asset_defs.c @@ -45,9 +45,11 @@ void load_assets() { // Objects // @NEWOBJECT img_spawner = assets_load_image_from_file("data/imgs/spawner.png"); img_space_control_panel = assets_load_image_from_file("data/imgs/objects/space_control_panel.png"); + img_space_control_panel2 = assets_load_image_from_file("data/imgs/objects/space_control_panel2.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"); + img_chair_up = assets_load_image_from_file("data/imgs/objects/chair_up.png"); // Players img_gunner_black_run = assets_load_image_from_file("data/imgs/players/Black/Gunner_Black_Run.png"); @@ -83,8 +85,9 @@ void load_assets() { img_zombie_chunk_blood = assets_load_image_from_file("data/imgs/zombie_chunk_blood.png"); // Tiles - img_tile_cobblestone = assets_load_image_from_file("data/imgs/tiles/tile_cobblestone.png"); - img_tile_grass1 = assets_load_image_from_file("data/imgs/tiles/tile_grass1.png"); + img_mars_surface = assets_load_image_from_file("data/imgs/tiles/mars_surface.png"); + img_tile_floor1 = assets_load_image_from_file("data/imgs/tiles/floor1.png"); + img_tile_floor2 = assets_load_image_from_file("data/imgs/tiles/floor2.png"); // sounds wav_throwable_bounce = Mix_LoadWAV("data/sounds/throwable_bounce.wav"); diff --git a/src/editor.c b/src/editor.c index de9a33f..1183517 100644 --- a/src/editor.c +++ b/src/editor.c @@ -85,14 +85,14 @@ 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; @@ -150,7 +150,13 @@ void draw_placing_rectangle(platform_window* window) { } static bool push_icon_button(int x, int y, int w, image* img, bool isSelected) { - if (img) renderer->render_image(img,_global_camera.x+ x,_global_camera.y+ y, w, w); + if (img) { + int imgw = w; + int imgh = w; + if (img->height > img->width) imgw = w*(img->width/(float)img->height); + if (img->height < img->width) imgh = w*(img->height/(float)img->width); + renderer->render_image(img,_global_camera.x+ x,_global_camera.y+ y, imgw, imgh); + } renderer->render_rectangle_outline(_global_camera.x+ x,_global_camera.y+ y, w+1, w+1, 1, rgb(255,255,255)); if (isSelected) { @@ -217,7 +223,7 @@ void draw_lighting_panel(platform_window* window) { renderer->render_rectangle(_global_camera.x, _global_camera.y + offset_y + row_h + offsety, editor_width, row_h, rgba(255,0,0,40)); char buf[50]; - sprintf(buf, "{x: %.0f y: %.0f, z: %.0f}", emitter.position.x, emitter.position.y, emitter.position.z); + sprintf(buf, "{x: %.0f y: %.0f, z: %.0f} {%.0f}", emitter.position.x, emitter.position.y, emitter.position.z, emitter.range); renderer->render_text(fnt_20, _global_camera.x, _global_camera.y + offset_y + row_h + offsety + 5, buf, rgb(0,0,0)); vec2f pos = world_pos_to_screen_pos(window, emitter.position.x, emitter.position.y, emitter.position.z); @@ -247,6 +253,13 @@ void draw_lighting_panel(platform_window* window) { map_to_load.light_emitters[i].position.x = orig_x + newpos.x; map_to_load.light_emitters[i].position.y = orig_y + newpos.y; + + if (_global_mouse.scroll_state == SCROLL_UP) { + map_to_load.light_emitters[i].range++; + } + if (_global_mouse.scroll_state == SCROLL_DOWN) { + map_to_load.light_emitters[i].range--; + } load_mapdata_into_world(); } else { @@ -217,7 +217,7 @@ void update_server(platform_window* window) { if (update_timer >= SERVER_TICK_RATE) { // send at 60 ticks update_spawners_server(); update_drops_server(); - update_wallitems_server(); + //update_wallitems_server(); update_throwables_server(); update_zombie_chunks_server(); update_round_server(); @@ -383,10 +383,10 @@ void update_game(platform_window* window) { if (global_state.network_state == CONNECTED) { take_player_input(window); - + draw_grid(window); draw_objects(window); - draw_wallitems(window); + //draw_wallitems(window); draw_zombie_chunks(window); draw_drops(window); draw_bullets(window); @@ -99,6 +99,37 @@ static float distance_between_3f(vec3f v1, vec3f v2) return sqrt((v1.x-v2.x)*(v1.x-v2.x)+(v1.y-v2.y)*(v1.y-v2.y)+(v1.z-v2.z)*(v1.z-v2.z)); } +bool check_if_bullet_collided_with_section(float* dist_of_closest_intersect, vec2f bstart, + vec2f bend, vec2f l1, vec2f l2, vec2f* intersect_point_buf); + +static bool ray_intersects_with_object(vec3f begin, vec3f end) { + float dist_of_closest_intersect = __FLT_MAX__; + vec2f bstart = (vec2f){begin.x, begin.y}; + vec2f bend = (vec2f){end.x, end.y}; + + for (int i = 0; i < MAX_OBJECTS; i++) { + object o = loaded_map.objects[i]; + if (!o.active) continue; + if (begin.z <= o.position.z + o.size.z && begin.z >= o.position.z) { + box obj_box = get_box_of_square((vec3f){o.position.x, o.position.y, o.position.z}, o.size); + vec2f intersect_point; + if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.bl_d, obj_box.br_d, &intersect_point)) { + return true; + } + if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.tl_d, obj_box.tr_d, &intersect_point)) { + return true; + } + if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.tl_d, obj_box.bl_d, &intersect_point)) { + return true; + } + if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.tr_d, obj_box.br_d, &intersect_point)) { + return true; + } + } + } + return false; +} + static bool ray_intersects_with_ground(vec3f begin, vec3f end) { float dirx = (end.x - begin.x); float diry = (end.y - begin.y); @@ -146,6 +177,7 @@ void load_mapdata_into_world() { // Load emitters for (int i = 0; i < MAX_LIGHT_EMITTERS; i++) { loaded_map.light_emitters[i] = map_to_load.light_emitters[i]; + loaded_map.light_emitters[i].position.z = 1; } // Load lightmap @@ -196,7 +228,20 @@ void load_mapdata_into_world() { if (ray_intersects_with_ground((vec3f){x, y, loaded_map.heightmap[y][x].bottomright}, emitter.position)) { p_br = 0.0f; } - +/* + if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].topleft}, emitter.position)) { + p_tl = 0.0f; + } + if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].topright}, emitter.position)) { + p_tr = 0.0f; + } + if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].bottomleft}, emitter.position)) { + p_bl = 0.0f; + } + if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].bottomright}, emitter.position)) { + p_br = 0.0f; + } +*/ p_tl += loaded_map.lightmap[y][x].tl; p_tr += loaded_map.lightmap[y][x].tr; p_bl += loaded_map.lightmap[y][x].bl; @@ -224,7 +269,7 @@ void create_empty_map() { for (int y = 0; y < MAP_SIZE_Y; y++) { for (int x = 0; x < MAP_SIZE_X; x++) { - map_to_load.tiles[y][x] = TILE_COBBLESTONE1; + map_to_load.tiles[y][x] = TILE_FLOOR1; } } @@ -319,8 +364,8 @@ bool is_in_bounds(float x, float y) { image* get_image_from_tiletype(tile_type tile) { switch (tile) { - case TILE_COBBLESTONE1: return img_tile_cobblestone; - case TILE_GRASS1: return img_tile_grass1; + case TILE_FLOOR1: return img_tile_floor1; + case TILE_FLOOR2: return img_tile_floor2; default: return 0; } } @@ -341,16 +386,38 @@ vec2f world_pos_to_screen_pos(platform_window* window, float x, float y, float z return (vec2f){.x = render_x, .y = render_y}; } +static void draw_backdrop(platform_window* window) +{ + map_info info = get_map_info(window); + + int tilemap_render_min_y = (_global_camera.y / info.tile_height)-1; + int tilemap_render_max_y = tilemap_render_min_y + (window->height/ info.tile_height) + 1; + + int tilemap_render_min_x = (_global_camera.x / info.tile_width)-1; + int tilemap_render_max_x = tilemap_render_min_x + (window->width/ info.tile_width) + 1; + + for (int y = -40; y <= 0; y++) + { + if (y < tilemap_render_min_y) continue; + if (y > tilemap_render_max_y) continue; + + for (int x = -40; x <= MAP_SIZE_X + 40; x++) + { + if (x < tilemap_render_min_x) continue; + if (x > tilemap_render_max_x) continue; + + renderer->render_image(img_mars_surface, x*info.tile_width, y*info.tile_width, info.tile_width, info.tile_height); + } + } +} + static float offset = 0.0f; static bool dir = true; void draw_grid(platform_window* window) { - /*if (dir) offset += 0.005f; - else offset -= 0.005f; - if (offset >= 0.5f) dir = false; - if (offset <= -0.5f) dir = true;*/ - map_info info = get_map_info(window); + draw_backdrop(window); + int tilemap_render_min_y = (_global_camera.y / info.tile_height); int tilemap_render_max_y = tilemap_render_min_y + (window->height/ info.tile_height) + 1; diff --git a/src/objects.c b/src/objects.c index d5dc0ce..c723168 100644 --- a/src/objects.c +++ b/src/objects.c @@ -96,6 +96,8 @@ void add_object(object obj) { image* get_image_from_objecttype(object_type tile) { switch (tile) { + case OBJECT_SPACE_CONTROL_PANEL2: + return img_space_control_panel2; case OBJECT_SPACE_CONTROL_PANEL: return img_space_control_panel; case OBJECT_SPACE_WINDOW: @@ -104,6 +106,8 @@ image* get_image_from_objecttype(object_type tile) { return img_metal_wall; case OBJECT_METAL_WALL2: return img_metal_wall2; + case OBJECT_CHAIR_UP: + return img_chair_up; default: return 0; } @@ -124,16 +128,22 @@ void draw_objects(platform_window* window) { renderer->render_image(img, 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_box_outline(box, rgb(255,0,0)); + //render_box_outline(box, rgb(255,0,0)); if (prev_y < o.position.y) { prev_y = o.position.y; draw_zombies(window, prev_y, prev_y); + #ifdef MODE_DEBUG + if (!is_editing_map) + #endif draw_players(window, prev_y, prev_y); } } draw_zombies(window, prev_y, MAP_SIZE_Y); + #ifdef MODE_DEBUG + if (!is_editing_map) + #endif draw_players(window, prev_y, MAP_SIZE_Y); } |
