Initial commit
This commit is contained in:
146
engines/asylum/puzzles/vcr.h
Normal file
146
engines/asylum/puzzles/vcr.h
Normal file
@@ -0,0 +1,146 @@
|
||||
/* 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 ASYLUM_PUZZLES_VCR_H
|
||||
#define ASYLUM_PUZZLES_VCR_H
|
||||
|
||||
#include "asylum/puzzles/puzzle.h"
|
||||
|
||||
#include "asylum/shared.h"
|
||||
|
||||
namespace Asylum {
|
||||
|
||||
class AsylumEngine;
|
||||
|
||||
typedef struct VCRDrawInfo {
|
||||
int32 resourceId;
|
||||
Common::Point point;
|
||||
} VCRDrawInfo;
|
||||
|
||||
const int16 puzzleVCRPolygons[10][4] = {
|
||||
{0x0F7, 0x157, 0x13A, 0x183}, // rewind button region
|
||||
{0x14B, 0x15C, 0x17B, 0x18B}, // stop button region
|
||||
{0x18C, 0x161, 0x1D2, 0x18F}, // play button region
|
||||
{0x1FB, 0x156, 0x233, 0x185}, // rec button region
|
||||
{0x154, 0x196, 0x173, 0x1AF}, // red jack hole region
|
||||
{0x19A, 0x19B, 0x1B9, 0x1B3}, // yellow jack hole region
|
||||
{0x1E3, 0x1A0, 0x202, 0x1BC}, // black jack hole region
|
||||
{0x0, 0x19B, 0x3C, 0x1E0}, // black jack on table region
|
||||
{0x4C, 0x1AC, 0x0A0, 0x1E0}, // red jack on table region
|
||||
{0x0BB, 0x1B7, 0x0F0, 0x1E0} // yellow jack on table region
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Puzzle 1
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
class PuzzleVCR : public Puzzle {
|
||||
public:
|
||||
PuzzleVCR(AsylumEngine *engine);
|
||||
~PuzzleVCR();
|
||||
|
||||
// Serializable
|
||||
virtual void saveLoadWithSerializer(Common::Serializer &s);
|
||||
|
||||
private:
|
||||
enum Color {
|
||||
kNone = -1,
|
||||
kBlack = 0,
|
||||
kRed = 1,
|
||||
kYellow = 2
|
||||
};
|
||||
|
||||
enum JackState {
|
||||
kOnTable = 0,
|
||||
kPluggedOnRed = 1,
|
||||
kPluggedOnYellow = 2,
|
||||
kPluggedOnBlack = 3,
|
||||
kOnHand = 4
|
||||
};
|
||||
|
||||
enum VCRRegions {
|
||||
kRewindButton = 0,
|
||||
kStopButton = 1,
|
||||
kPlayButton = 2,
|
||||
kPowerButton = 3,
|
||||
kRedHole = 4,
|
||||
kYellowHole = 5,
|
||||
kBlackHole = 6,
|
||||
kBlackJack = 7,
|
||||
kRedJack = 8,
|
||||
kYellowJack = 9
|
||||
};
|
||||
|
||||
enum ButtonState {
|
||||
kOFF = 0,
|
||||
kON = 1,
|
||||
kDownON = 2,
|
||||
kDownOFF = 3
|
||||
};
|
||||
|
||||
JackState _jacksState[3];
|
||||
JackState _holesState[3];
|
||||
ButtonState _buttonsState[4];
|
||||
uint32 _tvScreenFrameIndex;
|
||||
bool _isAccomplished;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Event Handling
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool init(const AsylumEvent &evt);
|
||||
bool mouseLeftDown(const AsylumEvent &evt);
|
||||
bool mouseLeftUp(const AsylumEvent &evt);
|
||||
bool exitPuzzle();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Drawing
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void updateScreen();
|
||||
void updateCursor();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Updates
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void updateJack(Color jack, const VCRDrawInfo &onTable, const VCRDrawInfo &pluggedOnRed, const VCRDrawInfo &pluggedOnYellow, const VCRDrawInfo &pluggedOnBlack, int32 resourceOnHandIndex);
|
||||
void updateBlackJack();
|
||||
void updateRedJack();
|
||||
void updateYellowJack();
|
||||
|
||||
void updateButton(VCRRegions button, const VCRDrawInfo &btON, const VCRDrawInfo &btDown);
|
||||
void updatePowerButton();
|
||||
void updateRewindButton();
|
||||
void updatePlayButton();
|
||||
void updateStopButton();
|
||||
|
||||
void updateTVSync();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Helpers
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
int inPolygon(const Common::Point &point, int polyIdx) const;
|
||||
Color getJackOnHand() const;
|
||||
void setJackOnHole(Color hole, JackState state, JackState newState);
|
||||
void pickJack(Color jack);
|
||||
|
||||
};
|
||||
|
||||
} // end of namespace Asylum
|
||||
|
||||
#endif // ASYLUM_PUZZLES_VCR_H
|
||||
Reference in New Issue
Block a user