diff options
Diffstat (limited to 'src')
| -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 |
5 files changed, 112 insertions, 19 deletions
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); } |
