cleaned up some things, fixed some mem leaks
[riven-wahrk.git] / src / Script.h
blob0a6f7a1aca50eebdd5aca20f0d933124f71e2d48
2 /*
4 * Riven-Wahrk - a reimplementation of the game Riven, by Cyan
5 * Copyright (C) 2009 Tyler Genter <tylergenter@gmail.com>
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #ifndef _SCRIPT_H_
23 #define _SCRIPT_H_
25 #include <map>
26 #include <list>
28 #include "Common.h"
29 #include "File.h"
31 using namespace std;
33 class Game;
35 class Handler {
37 public:
39 enum Event {
40 MouseDown = 0,
41 MouseUp = 2,
42 MouseWithin = 4,
43 MouseLeave = 5,
44 CardLoad = 6,
45 CardClose = 7,
46 CardOpen = 9,
47 DisplayUpdate = 10 };
49 private:
51 Event eventType;
52 uint16_t *cmdList;
53 // we don't know how many shorts long a handler is, so
54 // we find it for each segment, and save it in a cache.
55 std::map<int, uint16_t> cmdLength;
57 Game *game; // pointer to Game
59 int findSegmentSize (int offset);
61 void runSegment (int addr);
62 void runCmd (uint16_t *cmd);
64 public:
66 Handler (uint16_t *cmdListIn, Game *gameIn);
67 void run () {
68 runSegment (1);
71 uint16_t getLength () { // number of shorts
72 return cmdLength.find(1)->second + 1;
75 Event getEventType () {
76 return eventType;
82 class Script {
84 uint16_t *cmdList;
85 std::list<Handler> handler;
87 public:
89 Script (File *fileIn, int start, Game *game);
90 ~Script () { delete cmdList; }
92 void runHandler (Handler::Event event);
93 int getSize ();
97 #endif