aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/ringworld2/ringworld2_vampire.h
blob: ca7aa34544fa6e77f5acd1061064f312fbd966be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef TSAGE_RINGWORLD2_VAMPIRE_H
#define TSAGE_RINGWORLD2_VAMPIRE_H

#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"
#include "tsage/sound.h"
#include "tsage/ringworld2/ringworld2_logic.h"

namespace TsAGE {

namespace Ringworld2 {

using namespace TsAGE;

class Scene1950 : public SceneExt {
	/* Windows */
	class KeypadWindow: public ModalWindow {
	public:
		class KeypadButton : public SceneActor {
		public:
			int _buttonIndex;
			bool _pressed;
			bool _toggled;

			KeypadButton();
			void synchronize(Serializer &s);

			void init(int indx);
			virtual void process(Event &event);
			virtual bool startAction(CursorType action, Event &event);
		};

		SceneActor _areaActor;
		KeypadButton _buttons[16];

		int _buttonIndex;

		KeypadWindow();
		virtual void synchronize(Serializer &s);
		virtual void remove();
		virtual void setup2(int visage, int stripFrameNum, int frameNum, int posX, int posY);
		virtual void setup3(int resNum, int lookLineNum, int talkLineNum, int useLineNum);
	};

	class Keypad : public NamedHotspot {
	public:
		virtual bool startAction(CursorType action, Event &event);
	};

	/* Actors */
	class Door : public SceneActor {
	public:
		virtual bool startAction(CursorType action, Event &event);
	};
	class Scrolls : public SceneActor {
	public:
		virtual bool startAction(CursorType action, Event &event);
	};
	class Gem : public SceneActor {
	public:
		virtual bool startAction(CursorType action, Event &event);
	};
	class Vampire : public SceneActor {
	public:
		Common::Point _deadPosition;
		int _deltaX;
		int _deltaY;
		int _vampireMode;

		Vampire();
		void synchronize(Serializer &s);

		virtual void signal();
		virtual bool startAction(CursorType action, Event &event);
	};

	/* Exits */
	class NorthExit : public SceneExit {
	public:
		virtual void changeScene();
	};
	class UpExit : public SceneExit {
	public:
		virtual void changeScene();
	};
	class EastExit : public SceneExit {
	public:
		virtual void changeScene();
	};
	class DownExit : public SceneExit {
	public:
		virtual void changeScene();
	};
	class SouthExit : public SceneExit {
	public:
		virtual void changeScene();
	};
	class WestExit : public SceneExit {
	public:
		virtual void changeScene();
	};
	class ShaftExit : public SceneExit {
	public:
		virtual void changeScene();
	};
	class DoorExit : public SceneExit {
	public:
		virtual void changeScene();
	};
private:
	void initArea();
	void enterArea();
	void doButtonPress(int indx);
public:
	NamedHotspot _background;
	Keypad _keypad;
	SceneActor _southDoorway;
	SceneObject _northDoorway;
	Door _door;
	Scrolls _scrolls;
	SceneActor _containmentField;
	Gem _gem;
	SceneActor _cube;
	SceneActor _pulsingLights;
	Vampire _vampire;
	KeypadWindow _KeypadWindow;
	NorthExit _northExit;
	UpExit _upExit;
	EastExit _eastExit;
	DownExit _downExit;
	SouthExit _southExit;
	WestExit _westExit;
	ShaftExit _shaftExit;
	DoorExit _doorExit;
	SequenceManager _sequenceManager;

	bool _upExitStyle;
	bool _removeFlag;
	bool _vampireActive;
	Common::Point _vampireDestPos;
	int _vampireIndex;

	Scene1950();
	void synchronize(Serializer &s);

	virtual void postInit(SceneObjectList *OwnerList = NULL);
	virtual void remove();
	virtual void signal();
	virtual void process(Event &event);
};

} // End of namespace Ringworld2
} // End of namespace TsAGE

#endif