mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-05 02:17:05 +00:00
cdfcaa4d48
svn-id: r53883
211 lines
5.2 KiB
C++
211 lines
5.2 KiB
C++
/* 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.
|
|
*
|
|
* $URL$
|
|
* $Id$
|
|
*
|
|
*/
|
|
|
|
#ifndef LASTEXPRESS_MENU_H
|
|
#define LASTEXPRESS_MENU_H
|
|
|
|
#include "lastexpress/data/sequence.h"
|
|
|
|
#include "lastexpress/eventhandler.h"
|
|
|
|
#include "lastexpress/shared.h"
|
|
|
|
#include "common/hashmap.h"
|
|
|
|
namespace LastExpress {
|
|
|
|
class LastExpressEngine;
|
|
class Scene;
|
|
class SceneHotspot;
|
|
|
|
class Clock;
|
|
class TrainLine;
|
|
|
|
class Menu : public EventHandler {
|
|
public:
|
|
Menu(LastExpressEngine *engine);
|
|
~Menu();
|
|
|
|
void show(bool doSavegame, SavegameType type, uint32 value);
|
|
|
|
// Event handling
|
|
void eventMouse(const Common::Event &ev);
|
|
void eventTick(const Common::Event &ev);
|
|
|
|
bool isShown() const { return _isShowingMenu; }
|
|
|
|
GameId getGameId() const { return _gameId; }
|
|
|
|
private:
|
|
// Start menu events
|
|
enum StartMenuAction {
|
|
kMenuContinue = 1,
|
|
kMenuCredits = 2,
|
|
kMenuQuitGame = 3,
|
|
kMenuCase4 = 4,
|
|
kMenuSwitchSaveGame = 6,
|
|
kMenuRewindGame = 7,
|
|
kMenuForwardGame = 8,
|
|
kMenuParis = 10,
|
|
kMenuStrasBourg = 11,
|
|
kMenuMunich = 12,
|
|
kMenuVienna = 13,
|
|
kMenuBudapest = 14,
|
|
kMenuBelgrade = 15,
|
|
kMenuConstantinople = 16,
|
|
kMenuDecreaseVolume = 17,
|
|
kMenuIncreaseVolume = 18,
|
|
kMenuDecreaseBrightness = 19,
|
|
kMenuIncreaseBrightness = 20
|
|
};
|
|
|
|
// City buttons
|
|
enum CityButton {
|
|
kParis = 0,
|
|
kStrasbourg = 1,
|
|
kMunich = 2,
|
|
kVienna = 3,
|
|
kBudapest = 4,
|
|
kBelgrade = 5,
|
|
kConstantinople = 6
|
|
};
|
|
|
|
// Start menu overlay elements
|
|
enum StartMenuOverlay {
|
|
kOverlayTooltip, // 0
|
|
kOverlayEggButtons,
|
|
kOverlayButtons,
|
|
kOverlayAcorn,
|
|
kOverlayCity1,
|
|
kOverlayCity2, // 5
|
|
kOverlayCity3,
|
|
kOverlayCredits
|
|
};
|
|
|
|
LastExpressEngine *_engine;
|
|
|
|
// Sequences
|
|
Sequence *_seqTooltips;
|
|
Sequence *_seqEggButtons;
|
|
Sequence *_seqButtons;
|
|
Sequence *_seqAcorn;
|
|
Sequence *_seqCity1;
|
|
Sequence *_seqCity2;
|
|
Sequence *_seqCity3;
|
|
Sequence *_seqCredits;
|
|
|
|
GameId _gameId;
|
|
|
|
// Indicator to know if we need to show the start animation when showMenu is called
|
|
bool _hasShownStartScreen;
|
|
bool _hasShownIntro;
|
|
|
|
bool _isShowingCredits;
|
|
bool _isGameStarted;
|
|
bool _isShowingMenu;
|
|
|
|
|
|
uint16 _creditsSequenceIndex;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Event handling
|
|
uint32 _checkHotspotsTicks;
|
|
Common::EventType _mouseFlags;
|
|
SceneHotspot *_lastHotspot;
|
|
|
|
void init(bool doSavegame, SavegameType type, uint32 value);
|
|
void setup();
|
|
bool handleEvent(StartMenuAction action, Common::EventType type);
|
|
void checkHotspots();
|
|
void setLogicEventHandlers();
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Game-related
|
|
void startGame();
|
|
void switchGame();
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Overlays & elements
|
|
Clock *_clock;
|
|
TrainLine *_trainLine;
|
|
|
|
struct MenuOverlays_EqualTo {
|
|
bool operator()(const StartMenuOverlay &x, const StartMenuOverlay &y) const { return x == y; }
|
|
};
|
|
|
|
struct MenuOverlays_Hash {
|
|
uint operator()(const StartMenuOverlay &x) const { return x; }
|
|
};
|
|
|
|
typedef Common::HashMap<StartMenuOverlay, SequenceFrame *, MenuOverlays_Hash, MenuOverlays_EqualTo> MenuFrames;
|
|
|
|
MenuFrames _frames;
|
|
|
|
void hideOverlays();
|
|
void showFrame(StartMenuOverlay overlay, int index, bool redraw);
|
|
|
|
void clear();
|
|
|
|
// TODO: remove?
|
|
void moveToCity(CityButton city, bool clicked);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Misc
|
|
Common::String getAcornSequenceName(GameId id) const;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Time
|
|
uint32 _currentTime; // current game time
|
|
uint32 _lowerTime; // lower time value
|
|
uint32 _time;
|
|
|
|
uint32 _currentIndex; // current savegame entry
|
|
uint32 _index;
|
|
uint32 _lastIndex;
|
|
uint32 _delta;
|
|
bool _handleTimeDelta;
|
|
|
|
void initTime(SavegameType type, uint32 val);
|
|
void updateTime(uint32 time);
|
|
void adjustTime();
|
|
void adjustIndex(uint32 time1, uint32 time2, bool searchEntry);
|
|
void goToTime(uint32 time);
|
|
void setTime();
|
|
void forwardTime();
|
|
void rewindTime();
|
|
bool hasTimeDelta() { return (_currentTime - _time) >= 1; }
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Sound/Brightness related
|
|
uint32 getVolume() const;
|
|
void setVolume(uint32 volume) const;
|
|
uint32 getBrightness() const;
|
|
void setBrightness(uint32 brightness) const;
|
|
};
|
|
|
|
} // End of namespace LastExpress
|
|
|
|
#endif // LASTEXPRESS_MENU_H
|