File: navigationrecords.h

package info (click to toggle)
scummvm 2.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 450,580 kB
  • sloc: cpp: 4,299,825; asm: 28,322; python: 12,901; sh: 11,302; java: 9,289; xml: 7,895; perl: 2,639; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (200 lines) | stat: -rw-r--r-- 6,573 bytes parent folder | download | duplicates (2)
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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
/* 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 3 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, see <http://www.gnu.org/licenses/>.
 *
 */

#ifndef NANCY_ACTION_NAVIGATIONRECORDS_H
#define NANCY_ACTION_NAVIGATIONRECORDS_H

#include "engines/nancy/action/actionrecord.h"

namespace Nancy {
namespace Action {

// Simply changes the scene
class SceneChange : public ActionRecord {
public:
	void readData(Common::SeekableReadStream &stream) override;
	void execute() override;

	SceneChangeDescription _sceneChange;

protected:
	Common::String getRecordTypeName() const override { return "SceneChange"; }
};

// Changes the scene when clicked. Hotspot can move along with scene background frame.
// Nancy4 introduced several sub-types with a specific mouse cursor to show when
// hovering; all of them are handled in this class as well.
class HotMultiframeSceneChange : public SceneChange {
public:
	HotMultiframeSceneChange(CursorManager::CursorType hoverCursor) : _hoverCursor(hoverCursor) {}
	virtual ~HotMultiframeSceneChange() {}

	void readData(Common::SeekableReadStream &stream) override;
	void execute() override;

	CursorManager::CursorType getHoverCursor() const override { return _hoverCursor; }

	Common::Array<HotspotDescription> _hotspots;

protected:
	bool canHaveHotspot() const override { return true; }
	Common::String getRecordTypeName() const override {
		switch (_hoverCursor) {
		case CursorManager::kMoveForward:
			return "HotMultiframeForwardSceneChange";
		case CursorManager::kMoveUp:
			return "HotMultiframeUpSceneChange";
		case CursorManager::kMoveDown:
			return "HotMultiframeDownSceneChange";
		default:
			return "HotMultiframeSceneChange";
		}
	}

	CursorManager::CursorType _hoverCursor;
};

// Changes the scene when clicked; does _not_ move with scene background.
// Nancy4 introduced several sub-types with a specific mouse cursor to show when
// hovering; all of them are handled in this class as well.
class Hot1FrSceneChange : public SceneChange {
public:
	Hot1FrSceneChange(CursorManager::CursorType hoverCursor) : _hoverCursor(hoverCursor) {}
	virtual ~Hot1FrSceneChange() {}

	void readData(Common::SeekableReadStream &stream) override;
	void execute() override;

	CursorManager::CursorType getHoverCursor() const override { return _hoverCursor; }

	HotspotDescription _hotspotDesc;
	bool _isTerse = false;

protected:
	bool canHaveHotspot() const override { return true; }
	Common::String getRecordTypeName() const override {
		if (_isTerse) {
			return "HotSceneChangeTerse";
		}

		switch (_hoverCursor) {
		case CursorManager::kExit:
			return "Hot1FrExitSceneChange";
		case CursorManager::kMoveForward:
			return "Hot1FrForwardSceneChange";
		case CursorManager::kMoveBackward:
			return "Hot1FrBackSceneChange";
		case CursorManager::kMoveUp:
			return "Hot1FrUpSceneChange";
		case CursorManager::kMoveDown:
			return "Hot1FrDownSceneChange";
		case CursorManager::kMoveLeft:
			return "Hot1FrLeftSceneChange";
		case CursorManager::kMoveRight:
			return "Hot1FrRightSceneChange";
		default:
			return "Hot1FrSceneChange";
		}
	}

	CursorManager::CursorType _hoverCursor;
};

// Changes the scene when clicked. Hotspot can move along with scene background frame.
// However, the scene it changes to can be one of two options, picked based on
// a provided condition.
class HotMultiframeMultisceneChange : public ActionRecord {
public:
	void readData(Common::SeekableReadStream &stream) override;
	void execute() override;

	SceneChangeWithFlag _onTrue;
	SceneChangeWithFlag _onFalse;
	byte _condType;
	uint16 _conditionID;
	byte _conditionPayload;
	Common::Array<HotspotDescription> _hotspots;

protected:
	bool canHaveHotspot() const override { return true; }
	Common::String getRecordTypeName() const override { return "HotMultiframeMultisceneChange"; }
};

// Changes the scene when clicked. Hotspot can move along with scene background frame.
// However, the scene it changes to can be one of several options, picked based on
// the item the player is currently holding.
class HotMultiframeMultisceneCursorTypeSceneChange : public ActionRecord {
public:
	void readData(Common::SeekableReadStream &stream) override;
	void execute() override;

	Common::Array<SceneChangeDescription> _scenes;
	Common::Array<uint16> _cursorTypes;

	SceneChangeDescription _defaultScene;
	Common::Array<HotspotDescription> _hotspots;

protected:
	Common::String getRecordTypeName() const override { return "HotMultiframeMultisceneCursorTypeSceneChange"; }
};

// Simply switches to the Map state. TVD/nancy1 only.
class MapCall : public ActionRecord {
public:
	void readData(Common::SeekableReadStream &stream) override;
	void execute() override;

	CursorManager::CursorType getHoverCursor() const override { return CursorManager::kExit; }

protected:
	Common::String getRecordTypeName() const override { return "MapCall"; }
};

// Switches to the Map state when clicked; does _not_ move with background frame. TVD/nancy1 only.
class MapCallHot1Fr : public MapCall {
public:
	void readData(Common::SeekableReadStream &stream) override;
	void execute() override;

	HotspotDescription _hotspotDesc;

protected:
	bool canHaveHotspot() const override { return true; }
	Common::String getRecordTypeName() const override { return "MapCallHot1Fr"; }
};

// Switches to the Map state when clicked. Hotspot can move along with scene background frame. TVD/nancy1 only.
class MapCallHotMultiframe : public MapCall {
public:
	void readData(Common::SeekableReadStream &stream) override;
	void execute() override;

	Common::Array<HotspotDescription> _hotspots;

protected:
	bool canHaveHotspot() const override { return true; }
	Common::String getRecordTypeName() const override { return "MapCallHotMultiframe"; }
};

} // End of namespace Action
} // End of namespace Nancy

#endif // NANCY_ACTION_NAVIGATIONRECORDS_H