summaryrefslogtreecommitdiff
path: root/src/players.c
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2024-05-09 11:31:07 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2024-05-09 11:31:07 +0200
commit962ebf95459a8da08f44898d13d185e60de59b45 (patch)
treeb7b8d5bd0760f760f99fd6e2703752f6137e306e /src/players.c
parentc13e3bce702003aea65eef54ee462fd20cdf4fa1 (diff)
work
Diffstat (limited to 'src/players.c')
-rw-r--r--src/players.c55
1 files changed, 42 insertions, 13 deletions
diff --git a/src/players.c b/src/players.c
index 32b62cd..cb7842e 100644
--- a/src/players.c
+++ b/src/players.c
@@ -57,14 +57,17 @@ void spawn_player(u32 id, network_client client) {
players[i].guny = 0.0f;
players[i].gun_height = 0.0f;
players[i].id = id;
+ players[i].move_state = PLAYER_MOVE_STATE_IDLE;
players[i].guntype = GUN_MP5;
players[i].height = 0.0f;
players[i].client = client;
players[i].sprite = create_sprite(img_gunner_blue_run, 6, 48, 48, 0.1f);
players[i].sprite_death = create_sprite(img_gunner_blue_run, 8, 48, 48, 0.1f);
+ players[i].sprite_idle = create_sprite(img_gunner_blue_idle, 5, 48, 48, 0.1f);
players[i].sprite_death.loop = false;
players[i].sprite.zoom = 1.1f;
players[i].sprite_death.zoom = 1.1f;
+ players[i].sprite_idle.zoom = 1.1f;
players[i].health = 500;
players[i].max_health = 500;
@@ -133,6 +136,12 @@ void move_user(platform_window* window, u32 id, protocol_move_type move, float d
if (p->interact_state == INTERACT_DEAD) return;
+ if (move == MOVE_NONE) {
+ p->move_state = PLAYER_MOVE_STATE_IDLE;
+ return;
+ }
+ p->move_state = PLAYER_MOVE_STATE_RUNNING;
+
if (p->sec_since_last_step > 0.2f) {
add_audio_event_to_queue(EVENT_FOOTSTEP, p->id, (vec3f){.x = p->playerx, .y = p->playery, .z = p->height});
p->sec_since_last_step = 0.0f;
@@ -274,6 +283,11 @@ void take_player_input(platform_window* window) {
add_message_to_outgoing_queuex(message, *global_state.client);
move_user(window, player_id,MOVE_DOWN, update_delta);
}
+ else if (p->move_state == PLAYER_MOVE_STATE_RUNNING) {
+ network_message message = create_protocol_user_moved(MOVE_NONE, player_id);
+ add_message_to_outgoing_queuex(message, *global_state.client);
+ move_user(window, player_id,MOVE_NONE, update_delta);
+ }
#ifdef MODE_DEBUG
@@ -514,6 +528,17 @@ image* get_player_run_sprite_from_index(int index) {
return imgs[index];
}
+image* get_player_idle_sprite_from_index(int index) {
+ image* imgs[] = {
+ img_gunner_blue_idle,
+ img_gunner_black_idle,
+ img_gunner_green_idle,
+ img_gunner_yellow_idle,
+ img_gunner_red_idle,
+ };
+ return imgs[index];
+}
+
void draw_player(platform_window* window, player* p, int index) {
float size = get_player_size(window);
map_info info = get_map_info(window);
@@ -528,27 +553,31 @@ void draw_player(platform_window* window, player* p, int index) {
{
sprite_frame frame = sprite_get_frame(img_gunner_blue_run, &p->sprite);
float rads = -atan2(p->diry, p->dirx);
- if (rads > M_PI/2 || rads < -M_PI/2) {
- frame = sprite_swap_frame_horizontally(frame);
- }
+ image* img;
if (p->interact_state == INTERACT_DEAD) {
- frame = sprite_get_frame(img_gunner_blue_die, &p->sprite_death);
- renderer->render_image_quad_partial(get_player_death_sprite_from_index(index),
- player_render_x, player_render_y,
- player_render_x, player_render_y + size,
- player_render_x + size, player_render_y + size,
- player_render_x + size, player_render_y,
- frame.tl, frame.tr, frame.bl, frame.br);
+ frame = sprite_get_frame(get_player_death_sprite_from_index(index), &p->sprite_death);
+ img = get_player_death_sprite_from_index(index);
+ }
+ else if (p->move_state == PLAYER_MOVE_STATE_IDLE) {
+ frame = sprite_get_frame(get_player_idle_sprite_from_index(index), &p->sprite_idle);
+ img = get_player_idle_sprite_from_index(index);
+ }
+ // TODO: other movement states
+ else if (p->move_state == PLAYER_MOVE_STATE_RUNNING) {
+ img = get_player_run_sprite_from_index(index);
}
- else {
- renderer->render_image_quad_partial(get_player_run_sprite_from_index(index),
+
+ if (rads > M_PI/2 || rads < -M_PI/2) {
+ frame = sprite_swap_frame_horizontally(frame);
+ }
+
+ renderer->render_image_quad_partial(img,
player_render_x, player_render_y,
player_render_x, player_render_y + size,
player_render_x + size, player_render_y + size,
player_render_x + size, player_render_y,
frame.tl, frame.tr, frame.bl, frame.br);
- }
}
// Nametag