suicmez/game/inc/suic_net.h

81 lines
2.5 KiB
C
Raw Normal View History

#pragma once
#include <stdint.h>
#include <stdbool.h>
/**
* 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