home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C++ Games Programming
/
CPPGAMES.ISO
/
thx
/
include
/
hand.h
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-08
|
7KB
|
298 lines
// --------------- hand.h
#ifndef HAND_H
#define HAND_H
#include <typeinfo.h>
#include <fastgraf.h>
#include "debug.h"
#include "settings.h"
class Hand;
typedef void(Hand::*callback)(int,int,int);
enum EventCode {
TERMINAL_EVENT,
HOTKEY_EVENT,
TIMER_EVENT,
MESSAGE_EVENT,
KEYSTROKE_EVENT,
MOUSECLICK_EVENT,
MOUSEMOVE_EVENT,
JOYSTICKBUTTON_EVENT,
JOYSTICKMOVE_EVENT,
NETPACK_EVENT
};
struct Event {
EventCode evtype;
int code;
callback func;
};
#define DECLARE_CUELIST \
static Event MessageEntries[]; \
virtual Event *GetMessageMap() \
{ return MessageEntries; }
#define CUELIST(hand) \
Event hand::MessageEntries[] = {
#define HOTKEY(k,fn) \
{ HOTKEY_EVENT, k, (callback)fn },
#define TIMER(t,fn) \
{ TIMER_EVENT, t, (callback)fn },
#define MESSAGE(m,fn) \
{ MESSAGE_EVENT, m, (callback)fn },
#define KEYSTROKE(k,fn) \
{ KEYSTROKE_EVENT, k, (callback)fn },
#define MOUSECLICK(b,fn) \
{ MOUSECLICK_EVENT, b, (callback)fn },
#define MOUSEMOVE(fn) \
{ MOUSEMOVE_EVENT, 0, (callback)fn },
#define JOYSTICKMOVE(fn) \
{ JOYSTICKMOVE_EVENT, 0, (callback)fn },
#define JOYSTICKBUTTON(b,fn) \
{ JOYSTICKBUTTON_EVENT, b, (callback)fn },
#define NETPACK(p,fn) \
{ NETPACK_EVENT, p, (callback)fn },
#define ENDCUELIST \
{ TERMINAL_EVENT, 0, 0 } \
};
class Director;
class Hand {
Director* director;
static int numhands;
static Hand *hand[MAXHANDS];
static void initialize_hands();
virtual void request_cues() { }
void thx_request_keystroke_cue(int key,callback);
void thx_stop_keystroke_cue(int key,callback);
void thx_request_hotkey_cue(int scancode,callback);
void thx_stop_hotkey_cue(int scancode,callback);
void thx_request_timer_cue(int rate,callback);
void thx_stop_timer_cue(int rate,callback);
void thx_request_message_cue(int msg,callback);
void thx_stop_message_cue(int msg,callback);
void thx_post_message(int msg,int data1, int data2);
void thx_request_mouseclick_cue(int msg,callback);
void thx_stop_mouseclick_cue(int msg,callback);
void thx_request_joystickbutton_cue(int msg,callback);
void thx_stop_joystickbutton_cue(int msg,callback);
void thx_request_mousemove_cue(callback);
void thx_stop_mousemove_cue(callback);
void thx_request_joystickmove_cue(callback);
void thx_stop_joystickmove_cue(callback);
void thx_request_netpack_cue(int,callback);
void thx_stop_netpack_cue(int,callback);
void thx_post_netpack(int);
virtual Event *GetMessageMap() { return 0; }
friend class Director;
friend class Theatrix;
protected:
static short int mouseinuse;
Hand(Director* dir=0);
virtual ~Hand();
virtual void initialize() { }
virtual void stop_director();
virtual void start_director(const Type_info&);
Director* my_director() { return director; }
void set_hotkeys(int on);
void request_keystroke_cue(int key,callback);
void stop_keystroke_cue(int key,callback);
void request_hotkey_cue(int scancode,callback);
void stop_hotkey_cue(int scancode,callback);
void request_timer_cue(int rate,callback);
void stop_timer_cue(int rate,callback);
void request_message_cue(int msg,callback);
void stop_message_cue(int msg,callback);
void post_message(int msg,int data1, int data2);
void request_mouseclick_cue(int b,callback);
void stop_mouseclick_cue(int b,callback);
void request_mousemove_cue(callback);
void stop_mousemove_cue(callback);
void request_joystickbutton_cue(int b,callback);
void stop_joystickbutton_cue(int b,callback);
void request_joystickmove_cue(callback);
void stop_joystickmove_cue(callback);
void request_netpack_cue(int,callback);
void stop_netpack_cue(int,callback);
void post_netpack(int);
void init_mouse()
{ fg_mouseini(); }
void mouse_visible()
{ fg_mousevis(1); mouseinuse = 1; }
void mouse_invisible()
{ fg_mousevis(0); mouseinuse = 0; }
void mouse_cursorshape(char *bitmap)
{ fg_mouse256(bitmap+2, *bitmap, *(bitmap+1)); }
void get_mouseposition(int *x, int *y, int *b)
{ fg_mousepos(x, y, b); }
void get_mouseposition(int *x, int *y)
{ int b; fg_mousepos(x, y, &b); }
void set_mouseposition(int x, int y)
{ fg_mousemov(x, y); }
public:
void set_director(Director* d) { director=d; }
};
// ------------------ Keystroke
inline void Hand::request_keystroke_cue(int key,callback cb)
{
Assert(director != 0);
thx_request_keystroke_cue(key,cb);
}
inline void Hand::stop_keystroke_cue(int key,callback cb)
{
Assert(director != 0);
thx_stop_keystroke_cue(key,cb);
}
// ------------------ Keydown
inline void Hand::request_hotkey_cue(int key,callback cb)
{
Assert(director != 0);
thx_request_hotkey_cue(key, cb);
}
inline void Hand::stop_hotkey_cue(int key,callback cb)
{
Assert(director != 0);
thx_stop_hotkey_cue(key, cb);
}
// ------------------ Timer
inline void Hand::request_timer_cue(int r,callback cb)
{
Assert(director != 0);
thx_request_timer_cue(r, cb);
}
inline void Hand::stop_timer_cue(int r,callback cb)
{
Assert(director != 0);
thx_stop_timer_cue(r, cb);
}
// ------------------ Message
inline void Hand::request_message_cue(int msg,callback cb)
{
Assert(director != 0);
thx_request_message_cue(msg, cb);
}
inline void Hand::stop_message_cue(int msg,callback cb)
{
Assert(director != 0);
thx_stop_message_cue(msg, cb);
}
inline void Hand::post_message(int msg,int data1=0,int data2=0)
{
Assert(director != 0);
thx_post_message(msg, data1, data2);
}
// ------------------ mouseclick
inline void Hand::request_mouseclick_cue(int b,callback cb)
{
Assert(director != 0);
thx_request_mouseclick_cue(b,cb);
}
inline void Hand::stop_mouseclick_cue(int b,callback cb)
{
Assert(director != 0);
thx_stop_mouseclick_cue(b,cb);
}
// ------------------ mousemove
inline void Hand::request_mousemove_cue(callback cb)
{
Assert(director != 0);
thx_request_mousemove_cue(cb);
}
inline void Hand::stop_mousemove_cue(callback cb)
{
Assert(director != 0);
thx_stop_mousemove_cue(cb);
}
// ------------------ joystickbutton
inline void Hand::request_joystickbutton_cue(int b,callback cb)
{
Assert(director != 0);
thx_request_joystickbutton_cue(b,cb);
}
inline void Hand::stop_joystickbutton_cue(int b,callback cb)
{
Assert(director != 0);
thx_stop_joystickbutton_cue(b,cb);
}
// ------------------ joystickmove
inline void Hand::request_joystickmove_cue(callback cb)
{
Assert(director != 0);
thx_request_joystickmove_cue(cb);
}
inline void Hand::stop_joystickmove_cue(callback cb)
{
Assert(director != 0);
thx_stop_joystickmove_cue(cb);
}
// ------------------ netpack
inline void Hand::request_netpack_cue(int p,callback cb)
{
Assert(director != 0);
thx_request_netpack_cue(p,cb);
}
inline void Hand::stop_netpack_cue(int p,callback cb)
{
Assert(director != 0);
thx_stop_netpack_cue(p,cb);
}
inline void Hand::post_netpack(int p)
{
Assert(director != 0);
thx_post_netpack(p);
}
#endif