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
|