/**************************************************************************/ // track.h - /*************************************************************************** * The Dawn of Time v1.69r (c)1997-2004 Michael Garratt * * >> A number of people have contributed to the Dawn codebase, with the * * majority of code written by Michael Garratt - www.dawnoftime.org * * >> To use this source code, you must fully comply with the dawn license * * in licenses.txt... In particular, you may not remove this copyright * * notice. * **************************************************************************/ #ifndef TRACK_H #define TRACK_H // prototypes void tracktime_update(); void init_track_table(); void init_room_tracks(); enum tracktype {TRACKTYPE_NONE, TRACKTYPE_MOVE, TRACKTYPE_FLY, TRACKTYPE_SNEAK, TRACKTYPE_WALK, TRACKTYPE_BLOODTRAIL, TRACKTYPE_BLOODPOOL, TRACKTYPE_WIZIIMM, TRACKTYPE_PASSWOTRACE }; #define MTC MAX_TRACKABLE_CHARACTERS_IN_GAME /**************************************************************************/ class C_track_table { public: C_track_table(); // constructor char * get_pers(int index, char_data *looker); char_data * get_char(int index); int add_char(char_data *ch); void del_char(int index); void del_char(char_data *ch); char *get_race(int index); bool is_npc(int index); bool is_active(int index); int get_total_tracked_characters(); private: int get_race_value(int index); // VALUES STORED IN CLASS BELOW HERE unsigned short race_oldchar[MTC];// stores the race and MSB is true // if the character pointer is invalid char_data *character[MTC]; // if MSB of race_oldchar is 1, then that means // character doesnt point to any char_data // but is used as a bit array. int total_tracked_characters; int next_free_track; }; /**************************************************************************/ class C_track_data{ public: C_track_data(); // constructor void add_track(char_data *ch, int direction, tracktype type); void show_tracks(char_data *ch); private: tracktype get_tracktype(int index); void set_tracktype(int index, tracktype type); int get_direction(int index); void set_direction(int index, int direction); // the reason the array is in here, is because most compilers expand // a struct with 2 unsigned shorts and 1 unsigned char to 6bytes unsigned short trackindex[MAX_TRACKS_PER_ROOM]; unsigned short time_of_track[MAX_TRACKS_PER_ROOM]; unsigned char direction_type[MAX_TRACKS_PER_ROOM]; unsigned char nexttrack; // direction_type - first 4 bits are direction, second are type }; /**************************************************************************/ extern C_track_table *track_table; #endif // TRACK_H