81 lines
2.5 KiB
C
81 lines
2.5 KiB
C
#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
|