22 #ifndef NANCY_STATE_SCENE_H 23 #define NANCY_STATE_SCENE_H 25 #include "common/singleton.h" 26 #include "common/queue.h" 28 #include "engines/nancy/commontypes.h" 29 #include "engines/nancy/puzzledata.h" 31 #include "engines/nancy/action/actionmanager.h" 33 #include "engines/nancy/state/state.h" 35 #include "engines/nancy/ui/fullscreenimage.h" 36 #include "engines/nancy/ui/viewport.h" 37 #include "engines/nancy/ui/textbox.h" 38 #include "engines/nancy/ui/inventorybox.h" 39 #include "engines/nancy/ui/inventorypopup.h" 40 #include "engines/nancy/ui/notebookpopup.h" 41 #include "engines/nancy/ui/cellphonepopup.h" 42 #include "engines/nancy/ui/conversationpopup.h" 45 class SeekableReadStream;
53 struct SceneChangeDescription;
56 class ConversationSound;
57 class PlaySecondaryMovie;
68 class ViewportOrnaments;
69 class TextboxOrnaments;
70 class InventoryBoxOrnaments;
85 uint16 videoFormat = kLargeVideoFormat;
89 byte panningType = kPan360;
90 uint16 numberOfVideoFrames = 0;
91 uint16 degreesPerRotation = 18;
92 uint16 totalViewAngle = 0;
93 uint16 horizontalScrollDelta = 1;
94 uint16 verticalScrollDelta = 10;
95 uint16 horizontalEdgeSize = 15;
96 uint16 verticalEdgeSize = 15;
97 Time slowMoveTimeDelta = 400;
98 Time fastMoveTimeDelta = 66;
101 Math::Vector3d listenerPosition;
111 void process()
override;
112 void onStateEnter(
const NancyState::NancyState prevState)
override;
113 bool onStateExit(
const NancyState::NancyState nextState)
override;
116 void setDestroyOnExit() { _destroyOnExit =
true; }
118 bool isRunningAd()
const {
return _isRunningAd; }
121 void pushScene(int16 itemID = -1);
122 void popScene(
bool inventory =
false);
123 uint16 getSceneCounts(int16 hours)
const {
124 return _flags.sceneCounts.contains(hours) ? _flags.sceneCounts[hours] : 0;
127 void setPlayerTime(
Time time, byte relative);
128 Time getPlayerTime()
const {
return _timers.playerTime; }
129 Time getTimerTime()
const {
return _timers.timerIsActive ? _timers.timerTime : 0; }
130 byte getPlayerTOD()
const;
132 void addItemToInventory(int16
id);
133 void removeItemFromInventory(int16
id,
bool pickUp =
true);
134 int16 getHeldItem()
const {
return _flags.heldItem; }
135 void setHeldItem(int16
id);
136 void setNoHeldItem();
137 byte hasItem(int16
id)
const;
138 byte getItemDisabledState(int16
id)
const {
return _flags.disabledItems[id]; }
139 void setItemDisabledState(int16
id, byte state) {
140 if ((uint16)
id < _flags.disabledItems.size())
141 _flags.disabledItems[
id] = state;
145 void playItemCantSound(int16 itemID = -1,
bool notHoldingSound =
false);
147 void setEventFlag(int16 label, byte flag);
149 bool getEventFlag(int16 label, byte flag)
const;
152 void setLogicCondition(int16 label, byte flag);
153 bool getLogicCondition(int16 label, byte flag)
const;
154 void clearLogicConditions();
155 Time getLogicConditionTimestamp(int16 label)
const {
156 return _flags.logicConditions[label].timestamp;
159 void setDifficulty(uint difficulty) { _difficulty = difficulty; }
160 uint16 getDifficulty()
const {
return _difficulty; }
162 byte getHintsRemaining()
const {
return _hintsRemaining[_difficulty]; }
163 void useHint(uint16 characterID, uint16 hintID);
165 void requestStateChange(NancyState::NancyState state) { _gameStateRequested = state; }
166 void resetStateToInit() { _state = kInit; }
168 void resetAndStartTimer() { _timers.timerIsActive =
true; _timers.timerTime = 0; }
169 void stopTimer() { _timers.timerIsActive =
false; _timers.timerTime = 0; }
171 Time getMovementTimeDelta(
bool fast)
const {
return fast ? _sceneState.summary.fastMoveTimeDelta : _sceneState.summary.slowMoveTimeDelta; }
176 void setPlayerScrolling(
bool enabled);
177 bool getPlayerScrolling()
const;
179 void registerGraphics();
198 const SceneSummary &getSceneSummary()
const {
return _sceneState.summary; }
204 void notifyRandomMovieARLoaded() { _hadRandomMovieARThisScene =
true; }
211 void beginLightning(int16 distance, uint16 pulseTime, int16 rgbPercent);
214 void specialEffect(byte type, uint16 fadeToBlackTime, uint16 frameTime);
215 void specialEffect(byte type, uint16 totalTime, uint16 fadeToBlackTime,
Common::Rect rect);
227 State getState()
const {
return _state; }
228 void setState(State state) { _state = state; }
235 bool timerIsActive =
false;
237 Time playerTimeNextMinute;
246 void load(
bool fromSaveFile =
false);
252 void tickSoftwareTimers(uint32 deltaMs);
258 void initStaticData();
260 void clearSceneData();
261 void clearPuzzleData();
268 bool isScenePushed =
false;
270 int16 pushedInvItemID = -1;
271 bool isInvScenePushed =
false;
287 int16 primaryVideoResponsePicked = -1;
290 struct InventorySoundOverride {
291 bool isDefault =
false;
309 Time _buttonPressActivationTime;
319 SceneState _sceneState;
323 int16 _lastHintCharacter;
325 NancyState::NancyState _gameStateRequested;
339 bool _hadRandomMovieARThisScene =
false;
350 #define NancySceneState Nancy::State::Scene::instance() 355 #endif // NANCY_STATE_SCENE_H Definition: managed_surface.h:51
Definition: viewport.h:41
Definition: commontypes.h:152
Definition: puzzledata.h:37
Definition: inventorybox.h:42
Definition: secondarymovie.h:49
Definition: conversation.h:42
Definition: serializer.h:80
Definition: actionmanager.h:48
Definition: soundequalizerpuzzle.h:27
Definition: renderobject.h:36
Definition: ornaments.h:30
Definition: lightning.h:32
Definition: algorithm.h:29
Definition: commontypes.h:255
Definition: puzzledata.h:263
Definition: ornaments.h:38
Definition: fullscreenimage.h:30
Definition: ornaments.h:46
Definition: commontypes.h:167
Definition: actionmanager.h:32
Definition: singleton.h:42