aboutsummaryrefslogtreecommitdiff
path: root/engines/hugo/schedule.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/hugo/schedule.h')
-rw-r--r--engines/hugo/schedule.h50
1 files changed, 38 insertions, 12 deletions
diff --git a/engines/hugo/schedule.h b/engines/hugo/schedule.h
index 0f6c07e562..c74c0cb640 100644
--- a/engines/hugo/schedule.h
+++ b/engines/hugo/schedule.h
@@ -35,6 +35,7 @@
namespace Hugo {
+#define SIGN(X) ((X < 0) ? -1 : 1)
#define kMaxEvents 50 // Max events in event queue
struct event_t {
@@ -50,8 +51,9 @@ public:
Scheduler(HugoEngine *vm);
virtual ~Scheduler();
+ virtual void insertAction(act *action) = 0;
+
void initEventQueue();
- void insertAction(act *action);
void insertActionList(uint16 actIndex);
void decodeString(char *line);
void runScheduler();
@@ -62,25 +64,24 @@ public:
void saveEvents(Common::WriteStream *f);
void restoreScreen(int screenIndex);
-private:
+protected:
+ HugoEngine *_vm;
+
enum seqTextSchedule {
kSsNoBackground = 0,
kSsBadSaveGame = 1
};
- HugoEngine *_vm;
-
- event_t _events[kMaxEvents]; // Statically declare event structures
-
event_t *_freeEvent; // Free list of event structures
event_t *_headEvent; // Head of list (earliest time)
event_t *_tailEvent; // Tail of list (latest time)
-
- event_t *getQueue();
- void delQueue(event_t *curEvent);
- event_t *doAction(event_t *curEvent);
+ event_t _events[kMaxEvents]; // Statically declare event structures
virtual const char *getCypher() = 0;
+ virtual void delQueue(event_t *curEvent) = 0;
+ virtual event_t *doAction(event_t *curEvent) = 0;
+
+ event_t *getQueue();
};
class Scheduler_v1d : public Scheduler {
@@ -88,17 +89,42 @@ public:
Scheduler_v1d(HugoEngine *vm);
~Scheduler_v1d();
- const char *getCypher();
+ virtual const char *getCypher();
+ virtual void insertAction(act *action);
+protected:
+ virtual void delQueue(event_t *curEvent);
+ virtual event_t *doAction(event_t *curEvent);
+};
+
+class Scheduler_v2d : public Scheduler_v1d {
+public:
+ Scheduler_v2d(HugoEngine *vm);
+ virtual ~Scheduler_v2d();
+
+ virtual void insertAction(act *action);
+protected:
+ virtual void delQueue(event_t *curEvent);
+ virtual event_t *doAction(event_t *curEvent);
};
-class Scheduler_v3d : public Scheduler {
+class Scheduler_v3d : public Scheduler_v2d {
public:
Scheduler_v3d(HugoEngine *vm);
~Scheduler_v3d();
const char *getCypher();
+protected:
+ virtual event_t *doAction(event_t *curEvent);
+
};
+class Scheduler_v1w : public Scheduler_v3d {
+public:
+ Scheduler_v1w(HugoEngine *vm);
+ ~Scheduler_v1w();
+
+ virtual event_t *doAction(event_t *curEvent);
+};
} // End of namespace Hugo
#endif //HUGO_SCHEDULE_H