diff options
Diffstat (limited to 'src/game/client/gc_client.hpp')
| -rw-r--r-- | src/game/client/gc_client.hpp | 262 |
1 files changed, 31 insertions, 231 deletions
diff --git a/src/game/client/gc_client.hpp b/src/game/client/gc_client.hpp index 2b6ccd46..371338ff 100644 --- a/src/game/client/gc_client.hpp +++ b/src/game/client/gc_client.hpp @@ -14,50 +14,12 @@ enum CHN_GLOBAL, }; -//extern struct data_container *data; - -extern vec2 mouse_pos; -extern vec2 local_character_pos; -extern vec2 local_target_pos; - -// snap pointers -struct SNAPSTATE -{ - const NETOBJ_CHARACTER *local_character; - const NETOBJ_CHARACTER *local_prev_character; - const NETOBJ_PLAYER_INFO *local_info; - const NETOBJ_FLAG *flags[2]; - const NETOBJ_GAME *gameobj; - - const NETOBJ_PLAYER_INFO *player_infos[MAX_CLIENTS]; - const NETOBJ_PLAYER_INFO *info_by_score[MAX_CLIENTS]; - int num_players; -}; - -extern SNAPSTATE netobjects; - -/* -extern const NETOBJ_PLAYER_CHARACTER *local_character; -extern const NETOBJ_PLAYER_CHARACTER *local_prev_character; -extern const NETOBJ_PLAYER_INFO *local_info; -extern const NETOBJ_FLAG *flags[2]; -extern const NETOBJ_GAME *gameobj; -* */ - extern TUNING_PARAMS tuning; // predicted players extern CHARACTER_CORE predicted_prev_char; extern CHARACTER_CORE predicted_char; -// input -extern NETOBJ_PLAYER_INPUT input_data; -extern int input_direction_left; -extern int input_direction_right; - -// debug -extern int64 debug_firedelay; - // extra projs enum { @@ -66,211 +28,49 @@ enum extern NETOBJ_PROJECTILE extraproj_projectiles[MAX_EXTRA_PROJECTILES]; extern int extraproj_num; - void extraproj_reset(); -// chat -enum -{ - CHATMODE_NONE=0, - CHATMODE_ALL, - CHATMODE_TEAM, -}; - -extern int chat_mode; -void chat_add_line(int client_id, int team, const char *line); -void chat_reset(); -bool chat_input_handle(INPUT_EVENT e, void *user_data); - -// broadcasts -extern char broadcast_text[1024]; -extern int64 broadcast_time; - -// motd -extern int64 server_motd_time; -extern char server_motd[900]; // FUGLY - -// line input helter -class line_input -{ - char str[256]; - unsigned len; - unsigned cursor_pos; -public: - class callback - { - public: - virtual ~callback() {} - virtual bool event(INPUT_EVENT e) = 0; - }; - - line_input(); - void clear(); - void process_input(INPUT_EVENT e); - void set(const char *string); - const char *get_string() const { return str; } - int get_length() const { return len; } - unsigned cursor_offset() const { return cursor_pos; } -}; - -class INPUT_STACK_HANDLER -{ -public: - typedef bool (*CALLBACK)(INPUT_EVENT e, void *user); - - INPUT_STACK_HANDLER(); - void add_handler(CALLBACK cb, void *user_data); - void dispatch_input(); - -private: - enum - { - MAX_HANDLERS=16 - }; - - CALLBACK handlers[MAX_HANDLERS]; - void *user_data[MAX_HANDLERS]; - int num_handlers; -}; - -extern INPUT_STACK_HANDLER input_stack; - - -extern int emoticon_selector_active; // TODO: ugly -extern int scoreboard_active; // TODO: ugly - -// client data -struct CLIENT_DATA -{ - char name[64]; - char skin_name[64]; - int skin_id; - int skin_color; - int team; - int emoticon; - int emoticon_start; - CHARACTER_CORE predicted; - - TEE_RENDER_INFO skin_info; // this is what the server reports - TEE_RENDER_INFO render_info; // this is what we use - - float angle; - - void update_render_info(); -}; - -extern CLIENT_DATA client_datas[MAX_CLIENTS]; - -// kill messages -struct KILLMSG -{ - int weapon; - int victim; - int killer; - int mode_special; // for CTF, if the guy is carrying a flag for example - int tick; -}; - -const int killmsg_max = 5; -extern KILLMSG killmsgs[killmsg_max]; -extern int killmsg_current; - -// -void send_switch_team(int team); - // various helpers void snd_play_random(int chn, int setid, float vol, vec2 pos); -void process_events(int snaptype); -void clear_object_pointers(); -void reset_projectile_particles(); -void send_info(bool start); -void send_emoticon(int emoticon); -void chat_say(int team, const char *line); void chat_enable_mode(int team); inline vec2 random_dir() { return normalize(vec2(frandom()-0.5f, frandom()-0.5f)); } - -// effects -void effects_update(); - -void effect_bullettrail(vec2 pos); -void effect_smoketrail(vec2 pos, vec2 vel); -void effect_skidtrail(vec2 pos, vec2 vel); -void effect_explosion(vec2 pos); -void effect_air_jump(vec2 pos); -void effect_damage_indicator(vec2 pos, vec2 dir); -void effect_playerspawn(vec2 pos); -void effect_playerdeath(vec2 pos, int cid); -void effect_powerupshine(vec2 pos, vec2 size); - -// particles -struct PARTICLE +inline float hue_to_rgb(float v1, float v2, float h) { - void set_default() - { - vel = vec2(0,0); - life_span = 0; - start_size = 32; - end_size = 32; - rot = 0; - rotspeed = 0; - gravity = 0; - friction = 0; - flow_affected = 1.0f; - color = vec4(1,1,1,1); - } - - vec2 pos; - vec2 vel; - - int spr; - - float flow_affected; - - float life_span; - - float start_size; - float end_size; - - float rot; - float rotspeed; - - float gravity; - float friction; - - vec4 color; - - // set by the particle system - float life; - int prev_part; - int next_part; -}; - -enum + if(h < 0) h += 1; + if(h > 1) h -= 1; + if((6 * h) < 1) return v1 + ( v2 - v1 ) * 6 * h; + if((2 * h) < 1) return v2; + if((3 * h) < 2) return v1 + ( v2 - v1 ) * ((2.0f/3.0f) - h) * 6; + return v1; +} + +inline vec3 hsl_to_rgb(vec3 in) { - PARTGROUP_PROJECTILE_TRAIL=0, - PARTGROUP_EXPLOSIONS, - PARTGROUP_GENERAL, - NUM_PARTGROUPS -}; + float v1, v2; + vec3 out; -void particle_add(int group, PARTICLE *part); -void particle_render(int group); -void particle_update(float time_passed); -void particle_reset(); + if(in.s == 0) + { + out.r = in.l; + out.g = in.l; + out.b = in.l; + } + else + { + if(in.l < 0.5f) + v2 = in.l * (1 + in.s); + else + v2 = (in.l+in.s) - (in.s*in.l); -// flow grid -vec2 flow_get(vec2 pos); -void flow_add(vec2 pos, vec2 vel, float size); -void flow_dbg_render(); -void flow_init(); -void flow_update(); + v1 = 2 * in.l - v2; -// -void binds_default(); -void binds_save(); -void binds_set(int keyid, const char *str); -const char *binds_get(int keyid); + out.r = hue_to_rgb(v1, v2, in.h + (1.0f/3.0f)); + out.g = hue_to_rgb(v1, v2, in.h); + out.b = hue_to_rgb(v1, v2, in.h - (1.0f/3.0f)); + } + return out; +} |