89 lines
2.2 KiB
C
89 lines
2.2 KiB
C
|
#ifndef FALLOUT_VCR_H_
|
||
|
#define FALLOUT_VCR_H_
|
||
|
|
||
|
#include "db.h"
|
||
|
|
||
|
namespace fallout {
|
||
|
|
||
|
#define VCR_BUFFER_CAPACITY 4096
|
||
|
|
||
|
typedef enum VcrState {
|
||
|
VCR_STATE_RECORDING,
|
||
|
VCR_STATE_PLAYING,
|
||
|
VCR_STATE_TURNED_OFF,
|
||
|
} VcrState;
|
||
|
|
||
|
#define VCR_STATE_STOP_REQUESTED 0x80000000
|
||
|
|
||
|
typedef enum VcrTerminationFlags {
|
||
|
// Specifies that VCR playback should stop if any key is pressed.
|
||
|
VCR_TERMINATE_ON_KEY_PRESS = 0x01,
|
||
|
|
||
|
// Specifies that VCR playback should stop if mouse is mouved.
|
||
|
VCR_TERMINATE_ON_MOUSE_MOVE = 0x02,
|
||
|
|
||
|
// Specifies that VCR playback should stop if any mouse button is pressed.
|
||
|
VCR_TERMINATE_ON_MOUSE_PRESS = 0x04,
|
||
|
} VcrTerminationFlags;
|
||
|
|
||
|
typedef enum VcrPlaybackCompletionReason {
|
||
|
VCR_PLAYBACK_COMPLETION_REASON_NONE = 0,
|
||
|
|
||
|
// Indicates that VCR playback completed normally.
|
||
|
VCR_PLAYBACK_COMPLETION_REASON_COMPLETED = 1,
|
||
|
|
||
|
// Indicates that VCR playback terminated according to termination flags.
|
||
|
VCR_PLAYBACK_COMPLETION_REASON_TERMINATED = 2,
|
||
|
} VcrPlaybackCompletionReason;
|
||
|
|
||
|
typedef enum VcrEntryType {
|
||
|
VCR_ENTRY_TYPE_NONE = 0,
|
||
|
VCR_ENTRY_TYPE_INITIAL_STATE = 1,
|
||
|
VCR_ENTRY_TYPE_KEYBOARD_EVENT = 2,
|
||
|
VCR_ENTRY_TYPE_MOUSE_EVENT = 3,
|
||
|
} VcrEntryType;
|
||
|
|
||
|
typedef void(VcrPlaybackCompletionCallback)(int reason);
|
||
|
|
||
|
typedef struct VcrEntry {
|
||
|
unsigned int type;
|
||
|
unsigned int time;
|
||
|
unsigned int counter;
|
||
|
union {
|
||
|
struct {
|
||
|
int mouseX;
|
||
|
int mouseY;
|
||
|
int keyboardLayout;
|
||
|
} initial;
|
||
|
struct {
|
||
|
short key;
|
||
|
} keyboardEvent;
|
||
|
struct {
|
||
|
int dx;
|
||
|
int dy;
|
||
|
int buttons;
|
||
|
} mouseEvent;
|
||
|
};
|
||
|
} VcrEntry;
|
||
|
|
||
|
extern VcrEntry* _vcr_buffer;
|
||
|
extern int _vcr_buffer_index;
|
||
|
extern unsigned int gVcrState;
|
||
|
extern unsigned int _vcr_time;
|
||
|
extern unsigned int _vcr_counter;
|
||
|
extern unsigned int gVcrTerminateFlags;
|
||
|
extern int gVcrPlaybackCompletionReason;
|
||
|
|
||
|
bool vcrRecord(const char* fileName);
|
||
|
bool vcrPlay(const char* fileName, unsigned int terminationFlags, VcrPlaybackCompletionCallback* callback);
|
||
|
void vcrStop();
|
||
|
int vcrGetState();
|
||
|
int vcrUpdate();
|
||
|
bool vcrDump();
|
||
|
bool vcrWriteEntry(VcrEntry* ptr, File* stream);
|
||
|
bool vcrReadEntry(VcrEntry* ptr, File* stream);
|
||
|
|
||
|
} // namespace fallout
|
||
|
|
||
|
#endif /* FALLOUT_VCR_H_ */
|