diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/game.c | 1 | ||||
| -rw-r--r-- | src/glass_doors.c | 49 | ||||
| -rw-r--r-- | src/map.c | 5 | ||||
| -rw-r--r-- | src/objects.c | 5 | ||||
| -rw-r--r-- | src/players.c | 2 |
5 files changed, 61 insertions, 1 deletions
@@ -222,6 +222,7 @@ void update_server(platform_window* window) { update_zombie_chunks_server(); update_round_server(); update_points_animation_server(); + update_glass_doors_server(); broadcast_players = platform_get_time(TIME_FULL, TIME_NS); update_players_server(); diff --git a/src/glass_doors.c b/src/glass_doors.c new file mode 100644 index 0000000..dc5ed5e --- /dev/null +++ b/src/glass_doors.c @@ -0,0 +1,49 @@ +#include "../include/glass_doors.h" + +void create_glass_door(object o) +{ + for (int i = 0; i < MAX_GLASS_DOORS; i++) + { + if (glass_doors[i].obj.active) continue; + glass_doors[i].obj = o; + glass_doors[i].time_since_open = 0.0f; + glass_doors[i].is_open = 0; + return; + } +} + +void update_glass_doors_server() +{ + for (int i = 0; i < MAX_GLASS_DOORS; i++) + { + if (!glass_doors[i].obj.active) continue; + glass_doors[i].is_open = 0; + + for (int x = 0; x < MAX_PLAYERS; x++) { + if (!players[x].active) continue; + + if (distance_between((vec2f){.x = glass_doors[i].obj.position.x, .y = glass_doors[i].obj.position.y}, + (vec2f){.x = players[x].playerx, .y = players[x].playery}) < 3.0f) { + glass_doors[i].is_open = 1; + } + } + } +} + +void draw_glass_doors(platform_window* window, uint32_t ystart, uint32_t yend) +{ + for (int i = 0; i < MAX_GLASS_DOORS; i++) + { + if (!glass_doors[i].obj.active) continue; + if (!((int)glass_doors[i].obj.position.y >= ystart && (int)glass_doors[i].obj.position.y <= yend+1)) continue; + + object o = glass_doors[i].obj; + box box = get_box_of_object(window, o); + + image* img = glass_doors[i].is_open ? img_glass_door_h_open : img_glass_door_h_closed; + if (img) { + 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); + } + } +}
\ No newline at end of file @@ -1,4 +1,5 @@ #include "../include/map.h" +#include "../include/glass_doors.h" int player_zoom = 30; static int get_height_of_tile_tl(int current_height, int x, int y) { @@ -271,6 +272,10 @@ void load_mapdata_into_world() { if (o.type == OBJECT_ZOMBIE_SPAWNER) { create_spawner((vec2){.x = o.position.x, .y = o.position.y}); } + + if (o.type == OBJECT_GLASS_DOOR_H) { + create_glass_door(o); + } } } diff --git a/src/objects.c b/src/objects.c index c1caad7..e551544 100644 --- a/src/objects.c +++ b/src/objects.c @@ -1,5 +1,6 @@ #include "../include/objects.h" #include "../include/wall_item.h" +#include "../include/glass_doors.h" box get_box_of_object(platform_window* window, object o) { return get_render_box_of_square(window, (vec3f){o.position.x, o.position.y, o.position.z}, o.size); @@ -132,6 +133,8 @@ void draw_objects(platform_window* window) { for (int i = 0; i < MAX_OBJECTS; i++) { if (!loaded_map.objects[i].active) continue; object o = loaded_map.objects[i]; + + if (o.type == OBJECT_GLASS_DOOR_H) continue; box box = get_box_of_object(window, o); @@ -149,6 +152,7 @@ void draw_objects(platform_window* window) { if (!is_editing_map) #endif draw_players(window, prev_y, prev_y); + draw_glass_doors(window, prev_y, prev_y); } } @@ -157,6 +161,7 @@ void draw_objects(platform_window* window) { if (!is_editing_map) #endif draw_players(window, prev_y, MAP_SIZE_Y); + draw_glass_doors(window, prev_y, MAP_SIZE_Y); } void create_objects() { diff --git a/src/players.c b/src/players.c index 5ad954f..4fb513e 100644 --- a/src/players.c +++ b/src/players.c @@ -51,7 +51,7 @@ void spawn_player(u32 id, network_client client) { players[i].active = true; players[i].sec_since_last_shot = 10.0f; players[i].sec_since_last_damage_taken = 10.0f; - players[i].playerx = 30; + players[i].playerx = 40; players[i].playery = 3; players[i].gunx = 0.0f; players[i].guny = 0.0f; |
