aboutsummaryrefslogtreecommitdiff
path: root/engines/pegasus/neighborhood/norad/subcontrolroom.h
blob: 6ce599db42e121659cd242e2e86e1877dd638dff (plain)
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
/* 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.
 *
 * Additional copyright for this file:
 * Copyright (C) 1995-1997 Presto Studios, Inc.
 *
 * 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.
 *
 */

#ifndef PEGASUS_NEIGHBORHOOD_NORAD_SUBCONTROLROOM_H
#define PEGASUS_NEIGHBORHOOD_NORAD_SUBCONTROLROOM_H

#include "pegasus/interaction.h"
#include "pegasus/notification.h"

namespace Pegasus {

static const uint32 kClawAtA = 0;
static const uint32 kClawAtB = 1;
static const uint32 kClawAtC = 2;
static const uint32 kClawAtD = 3;

static const int kNumClawButtons = 7;

class Norad;

class SubControlRoom : public GameInteraction, public NotificationReceiver {
public:
	SubControlRoom(Neighborhood *);
	virtual ~SubControlRoom() {}

	void playAgainstRobot();

	virtual void setSoundFXLevel(const uint16);

	bool canSolve();
	void doSolve();

protected:
	virtual void openInteraction();
	virtual void initInteraction();
	virtual void closeInteraction();

	virtual void activateHotspots();
	virtual void clickInHotspot(const Input &, const Hotspot *);

	virtual void receiveNotification(Notification *, const NotificationFlags);

	void robotKillsPlayer(const uint32, Neighborhood *);
	InputBits getInputFilter();

	int findActionIndex(HotSpotID);
	void dispatchClawAction(const int);
	void performActionImmediately(const int, const uint32, Neighborhood *);

	void hideEverything();
	void showButtons();
	void hideButtons();

	void updateGreenBall();
	void moveGreenBallToA();
	void moveGreenBallToB();
	void moveGreenBallToC();
	void moveGreenBallToD();

	void setControlMonitorToTime(const TimeValue, const int, const bool);
	void playControlMonitorSection(const TimeValue, const TimeValue, const NotificationFlags,
			const int, const bool);

	void updateClawMonitor();
	void setClawMonitorToTime(const TimeValue);
	void playClawMonitorSection(const TimeValue, const TimeValue, const NotificationFlags,
			const int, const bool);

	Movie _subControlMovie;
	TimeScale _subControlScale;
	Notification _subControlNotification;
	NotificationCallBack _subControlCallBack;
	Movie _clawMonitorMovie;
	NotificationCallBack _clawMonitorCallBack;
	int _gameState;
	uint32 _clawStartPosition;
	uint32 _clawPosition;
	uint32 _clawNextPosition;
	const uint32 *_clawExtraIDs;

	int _currentAction;
	int _nextAction;

	Sprite *_buttons[kNumClawButtons];
	Sprite _pinchButton;
	Sprite _downButton;
	Sprite _rightButton;
	Sprite _leftButton;
	Sprite _upButton;
	Sprite _ccwButton;
	Sprite _cwButton;

	Sprite _greenBall;
	TimeBase _greenBallTimer;
	Notification _greenBallNotification;
	NotificationCallBack _greenBallCallBack;

	HotSpotID _outSpotID;
	HotSpotID _prepSpotID;
	HotSpotID _clawControlSpotID;
	HotSpotID _clawButtonSpotIDs[kNumClawButtons];

	Notification *_neighborhoodNotification;

	bool _playingAgainstRobot;
	int _robotState;
};

} // End of namespace Pegasus

#endif