summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build/zombies.exebin1748007 -> 1748556 bytes
-rw-r--r--include/drops.h2
-rw-r--r--include/overlay.h2
-rw-r--r--include/players.h2
-rw-r--r--include/protocol.h1
-rw-r--r--main.c2
-rw-r--r--src/bullets.c4
-rw-r--r--src/drops.c21
-rw-r--r--src/game.c13
-rw-r--r--src/objects.c8
-rw-r--r--src/overlay.c8
-rw-r--r--src/players.c12
-rw-r--r--src/protocol.c1
13 files changed, 49 insertions, 27 deletions
diff --git a/build/zombies.exe b/build/zombies.exe
index e6928ea..af6cba0 100644
--- a/build/zombies.exe
+++ b/build/zombies.exe
Binary files differ
diff --git a/include/drops.h b/include/drops.h
index e7ab661..aa48e24 100644
--- a/include/drops.h
+++ b/include/drops.h
@@ -25,6 +25,8 @@ typedef struct t_drop {
#define MAX_DROPS 50
drop drops[MAX_DROPS] = {0};
+#define DROP_MAX_DURATION (4.0f)
+#define DROP_FADE_TIME (2.0f)
void update_drops();
void draw_drops(platform_window* window);
diff --git a/include/overlay.h b/include/overlay.h
index 7441003..de7410c 100644
--- a/include/overlay.h
+++ b/include/overlay.h
@@ -3,6 +3,8 @@
#include <projectbase/project_base.h>
+u64 server_update_time = 0;
+
void draw_overlay(platform_window* window);
#endif \ No newline at end of file
diff --git a/include/players.h b/include/players.h
index ce88688..f76e620 100644
--- a/include/players.h
+++ b/include/players.h
@@ -42,7 +42,7 @@ void draw_players(platform_window* window);
void draw_bullets(platform_window* window);
object check_if_player_collided_with_object(platform_window* window, player p);
float get_player_size(platform_window* window);
-void move_user(platform_window* window, u32 id, protocol_move_type move);
+void move_user(platform_window* window, u32 id, protocol_move_type move, float delta);
void update_players_server();
void spawn_player(u32 id, network_client client);
diff --git a/include/protocol.h b/include/protocol.h
index a49aaab..0ec87d7 100644
--- a/include/protocol.h
+++ b/include/protocol.h
@@ -73,6 +73,7 @@ typedef struct t_protocol_move
network_message_type type;
protocol_move_type move;
u32 id;
+ float delta;
} protocol_move;
typedef struct t_protocol_user_look
diff --git a/main.c b/main.c
index b7ce26e..b0c53a8 100644
--- a/main.c
+++ b/main.c
@@ -69,7 +69,7 @@ int main(int argc, char **argv)
platform_init(argc, argv, CONFIG_DIRECTORY);
settings_set_number("USE_GPU", 1);
- platform_window *window = platform_open_window_ex("Zombies!", 1920, 1080, 1920, 1080, 500, 500, FLAGS_MINIMIZE, update_func, 0, 0, 0, 0);
+ platform_window *window = platform_open_window_ex("Zombies!", 800, 600, 1920, 1080, 500, 500, FLAGS_MINIMIZE, update_func, 0, 0, 0, 0);
platform_toggle_vsync(window, false);
//platform_toggle_fullscreen(window, true);
diff --git a/src/bullets.c b/src/bullets.c
index 8012c83..704728e 100644
--- a/src/bullets.c
+++ b/src/bullets.c
@@ -182,6 +182,8 @@ static bool check_if_bullet_collided_with_ground(bullet *b, platform_window* win
void clear_bullets() {
for (int i = 0; i < max_bullets; i++) {
+ if (!bullets[i].active) continue;
+ bullets[i].alive_time += update_delta;
if (bullets[i].alive_time >= 0.05f) {
bullets[i].active = false;
}
@@ -213,8 +215,6 @@ void update_bullets(platform_window* window) {
if (check_if_bullet_collided_with_zombie(b, window, true)) {
p->kills++;
}
-
- bullets[i].alive_time += update_delta;
}
}
diff --git a/src/drops.c b/src/drops.c
index e5e1d7b..881c207 100644
--- a/src/drops.c
+++ b/src/drops.c
@@ -31,6 +31,10 @@ void update_drops() {
handle_drop_pickup(p, &drops[i]);
}
}
+
+ if (b.time_active >= DROP_MAX_DURATION) {
+ drops[i].active = false;
+ }
}
}
@@ -40,23 +44,22 @@ void draw_drops(platform_window* window) {
if (!b.active) continue;
DROP_RENDER_DEPTH((int)(b.position.y));
+
+ int alpha = 255;
+ if (b.time_active >= DROP_MAX_DURATION - DROP_FADE_TIME) {
+ alpha = 255 - ((b.time_active - (DROP_MAX_DURATION - DROP_FADE_TIME)) / DROP_FADE_TIME)*255;
+ }
b.position.z = b.start_h;
b.size.z = 0.0f;
b.position.y += 0.2f;
b.position.x -= 0.07f;
box shadow_box = get_render_box_of_square(window, b.position, b.size);
- render_quad_with_outline(shadow_box.tl_d, shadow_box.tr_d, shadow_box.bl_d, shadow_box.br_d, rgba(0,0,0,120));
- render_quad_with_outline(shadow_box.tl_u, shadow_box.tr_u, shadow_box.bl_u, shadow_box.br_u, rgba(0,0,0,120));
- render_quad_with_outline(shadow_box.tl_u, shadow_box.tl_d, shadow_box.bl_u, shadow_box.bl_d, rgba(0,0,0,120));
- render_quad_with_outline(shadow_box.bl_u, shadow_box.br_u, shadow_box.bl_d, shadow_box.br_d, rgba(0,0,0,120));
+ render_box_with_outline(shadow_box, rgba(0,0,0,alpha * (120.0f/255.0f)));
b = drops[i];
box full_box = get_render_box_of_square(window, b.position, b.size);
- render_quad_with_outline(full_box.tl_d, full_box.tr_d, full_box.bl_d, full_box.br_d, rgb(218,112,214));
- render_quad_with_outline(full_box.tl_u, full_box.tr_u, full_box.bl_u, full_box.br_u, rgb(218,112,214));
- render_quad_with_outline(full_box.tl_u, full_box.tl_d, full_box.bl_u, full_box.bl_d, rgb(218,112,214));
- render_quad_with_outline(full_box.bl_u, full_box.br_u, full_box.bl_d, full_box.br_d, rgb(218,112,214));
+ render_box_with_outline(full_box, rgba(218,112,214, alpha));
int drop_h = full_box.br_d.y - full_box.tr_d.y;
@@ -65,7 +68,7 @@ void draw_drops(platform_window* window) {
int icon_y = full_box.tl_u.y - icon_size + (drop_h/2);
switch(b.type) {
case DROP_AMMO: {
- renderer->render_image(img_icon_bullets, icon_x, icon_y, icon_size, icon_size);
+ renderer->render_image_tint(img_icon_bullets, icon_x, icon_y, icon_size, icon_size, rgba(255,255,255, alpha));
} break;
default: break;
diff --git a/src/game.c b/src/game.c
index 7a2fc24..cb39c28 100644
--- a/src/game.c
+++ b/src/game.c
@@ -113,6 +113,8 @@ static void set_ping_for_player(protocol_generic_message* msg) {
float update_timer = 0.0f;
void update_server(platform_window* window) {
+ server_update_time = platform_get_time(TIME_NS, TIME_FULL);
+
for (int i = 0; i < messages_received_on_server.length; i++) {
protocol_generic_message* msg = *(protocol_generic_message**)array_at(&messages_received_on_server, i);
set_ping_for_player(msg);
@@ -126,9 +128,10 @@ void update_server(platform_window* window) {
log_info("Player connected to server");
} break;
+ /*
case MESSAGE_USER_MOVED: {
protocol_move* move_msg = (protocol_move*)msg->message;
- move_user(window, move_msg->id, move_msg->move);
+ move_user(window, move_msg->id, move_msg->move, move_msg->delta);
} break;
case MESSAGE_USER_LOOK: {
@@ -139,6 +142,7 @@ void update_server(platform_window* window) {
protocol_user_shoot* shoot_msg = (protocol_user_shoot*)msg->message;
shoot(window, shoot_msg->id, shoot_msg->dirx, shoot_msg->diry);
} break;
+ */
default:
log_info("Unhandled message received");
@@ -162,6 +166,11 @@ void update_server(platform_window* window) {
broadcast_to_clients(create_protocol_zombie_list());
broadcast_to_clients(create_protocol_bullets_list());
broadcast_to_clients(create_protocol_drop_list());
+
+ server_update_time = platform_get_time(TIME_NS, TIME_FULL) - server_update_time;
+ if ((server_update_time/1000000.0f) > 5.0f) {
+ log_infox("Server update took %.2fms", (server_update_time/1000000.0f));
+ }
}
static void apply_user_list(protocol_user_list* msg_players) {
@@ -186,7 +195,7 @@ static void load_bullets_into_existing_list(protocol_bullets_list* msg_bullets)
for (int x = 0; x < max_bullets; x++) {
if (!msg_bullets->bullets[x].active) continue;
bullets[i] = msg_bullets->bullets[x];
- bullets[i].alive_time = 0.0f;
+ //bullets[i].alive_time = 0.0f;
msg_bullets->bullets[x].active = false;
}
}
diff --git a/src/objects.c b/src/objects.c
index a925dc4..b296c9d 100644
--- a/src/objects.c
+++ b/src/objects.c
@@ -23,10 +23,10 @@ void render_quad_with_outline(vec2f tl, vec2f tr, vec2f bl, vec2f br, color c) {
tr.x, tr.y,
c);
- renderer->render_line(tl.x, tl.y, tr.x, tr.y, 1, rgb(0,0,255)); // top
- renderer->render_line(tl.x, tl.y, bl.x, bl.y, 1, rgb(0,0,255)); // left
- renderer->render_line(tr.x, tr.y, br.x, br.y, 1, rgb(0,0,255)); // right
- renderer->render_line(bl.x, bl.y, br.x, br.y, 1, rgb(0,0,255)); // bottom
+ renderer->render_line(tl.x, tl.y, tr.x, tr.y, 1, rgba(0,0,255, c.a)); // top
+ renderer->render_line(tl.x, tl.y, bl.x, bl.y, 1, rgba(0,0,255, c.a)); // left
+ renderer->render_line(tr.x, tr.y, br.x, br.y, 1, rgba(0,0,255, c.a)); // right
+ renderer->render_line(bl.x, bl.y, br.x, br.y, 1, rgba(0,0,255, c.a)); // bottom
}
object get_object_at_tile(float x, float y) {
diff --git a/src/overlay.c b/src/overlay.c
index e8bd2a9..298f460 100644
--- a/src/overlay.c
+++ b/src/overlay.c
@@ -67,9 +67,13 @@ void draw_debug_stats(platform_window* window) {
float usage = (update_delta / (1.0f / 60.0f) * 100);
char fps_text[50];
- snprintf(fps_text, 50, "FPS: %d, MS: %.4f, USAGE: %.2f", (int)fps, update_delta*1000.0f, usage);
+ snprintf(fps_text, 50, "FPS: %d, MS: %.4f, USAGE: %.0f%%", (int)fps, update_delta*1000.0f, usage);
- renderer->render_text(fnt_20, _global_camera.x, _global_camera.y, fps_text, rgb(0,0,0));
+ char update_text[50];
+ snprintf(update_text, 50, "server: %.2fms", server_update_time/1000000.0f);
+
+ renderer->render_text(fnt_20, _global_camera.x, _global_camera.y + fnt_20->px_h*0, fps_text, rgb(0,0,0));
+ renderer->render_text(fnt_20, _global_camera.x, _global_camera.y + fnt_20->px_h*1, update_text, rgb(0,0,0));
}
void draw_overlay(platform_window* window) {
diff --git a/src/players.c b/src/players.c
index a8a3cac..e6fab6d 100644
--- a/src/players.c
+++ b/src/players.c
@@ -49,8 +49,8 @@ void spawn_player(u32 id, network_client client) {
}
-void move_user(platform_window* window, u32 id, protocol_move_type move) {
- float speed = 5.5f * update_delta;
+void move_user(platform_window* window, u32 id, protocol_move_type move, float delta) {
+ float speed = 5.5f * delta;
float pad_between_player_and_obj = 0.01f;
player* p = get_player_by_id(id);
@@ -148,28 +148,28 @@ void take_player_input(platform_window* window) {
network_message message = create_protocol_user_moved(MOVE_UP, player_id);
network_client_send(global_state.client, message);
}
- move_user(window, player_id, MOVE_UP);
+ move_user(window, player_id, MOVE_UP, update_delta);
}
if (keyboard_is_key_down(KEY_S)) {
if (!global_state.server) {
network_message message = create_protocol_user_moved(MOVE_DOWN, player_id);
network_client_send(global_state.client, message);
}
- move_user(window, player_id, MOVE_DOWN);
+ move_user(window, player_id, MOVE_DOWN, update_delta);
}
if (keyboard_is_key_down(KEY_A)) {
if (!global_state.server) {
network_message message = create_protocol_user_moved(MOVE_LEFT, player_id);
network_client_send(global_state.client, message);
}
- move_user(window, player_id, MOVE_LEFT);
+ move_user(window, player_id, MOVE_LEFT, update_delta);
}
if (keyboard_is_key_down(KEY_D)) {
if (!global_state.server) {
network_message message = create_protocol_user_moved(MOVE_RIGHT, player_id);
network_client_send(global_state.client, message);
}
- move_user(window, player_id, MOVE_RIGHT);
+ move_user(window, player_id, MOVE_RIGHT, update_delta);
}
// Send gun position
diff --git a/src/protocol.c b/src/protocol.c
index 628dc6f..56d8c6c 100644
--- a/src/protocol.c
+++ b/src/protocol.c
@@ -56,6 +56,7 @@ network_message create_protocol_user_moved(protocol_move_type move, u32 id)
buf->type = MESSAGE_USER_MOVED;
buf->move = move;
buf->id = id;
+ buf->delta = update_delta;
return network_create_message(network_buffer, sizeof(protocol_move), MAX_NETWORK_BUFFER_SIZE);
}