#pragma once #include #include /** * Network protocol API for game client. * Abstracts UDP socket communication with the game server. */ #define SUIC_NET_MAX_PLAYERS 16 #define SUIC_NET_USERNAME_MAX 16 #define SUIC_NET_MAX_ITEMS 64 /* Connection lifecycle */ int suic_net_init(const char* server_ip, int port); void suic_net_shutdown(void); bool suic_net_is_connected(void); /* Sending */ void suic_net_send_hello(const char* username); void suic_net_send_input(uint8_t playerId, uint32_t clientTick, float moveX, float moveZ, float yaw, float pitch, uint8_t buttons); void suic_net_send_shoot(uint8_t playerId, uint32_t clientTick); /* Receiving (poll-based) */ bool suic_net_poll(void); uint8_t suic_net_get_my_id(void); /* Player accessors */ bool suic_net_player_present(int index); bool suic_net_player_alive(int index); int suic_net_player_hp(int index); float suic_net_player_x(int index); float suic_net_player_y(int index); float suic_net_player_z(int index); float suic_net_player_prev_x(int index); float suic_net_player_prev_y(int index); float suic_net_player_prev_z(int index); float suic_net_player_yaw(int index); float suic_net_player_pitch(int index); uint8_t suic_net_player_weapon(int index); int16_t suic_net_player_pistol_mag(int index); int16_t suic_net_player_rifle_mag(int index); int16_t suic_net_player_pistol_ammo(int index); int16_t suic_net_player_rifle_ammo(int index); int16_t suic_net_player_medkits(int index); int16_t suic_net_player_reload_time(int index); const char* suic_net_player_username(int index); /* Item accessors */ bool suic_net_item_present(int index); uint16_t suic_net_item_id(int index); uint8_t suic_net_item_type(int index); int16_t suic_net_item_qty(int index); float suic_net_item_x(int index); float suic_net_item_y(int index); float suic_net_item_z(int index); /* Room state */ int suic_net_room_state(void); float suic_net_countdown(void); const char* suic_net_winner_name(void); /* Button flags */ #define SUIC_BTN_RELOAD (1u << 0) #define SUIC_BTN_SWITCH_PISTOL (1u << 1) #define SUIC_BTN_SWITCH_RIFLE (1u << 2) #define SUIC_BTN_PICK (1u << 3) #define SUIC_BTN_USE_MEDKIT (1u << 4) #define SUIC_BTN_JUMP (1u << 5) /* Weapon types */ #define SUIC_WEAPON_PISTOL 0 #define SUIC_WEAPON_RIFLE 1 /* Item types */ #define SUIC_ITEM_NONE 0 #define SUIC_ITEM_MEDKIT 1 #define SUIC_ITEM_AMMO_PISTOL 2 #define SUIC_ITEM_AMMO_RIFLE 3