aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/tattoo/tattoo_user_interface.h
blob: e2732c5ae21654c3b0777b8eda89db3e6930c749 (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
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
/* 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.
 *
 */

#ifndef SHERLOCK_TATTOO_UI_H
#define SHERLOCK_TATTOO_UI_H

#include "common/scummsys.h"
#include "sherlock/saveload.h"
#include "sherlock/user_interface.h"
#include "sherlock/tattoo/widget_tooltip.h"
#include "sherlock/tattoo/widget_verbs.h"

namespace Sherlock {

namespace Tattoo {

class TattooUserInterface : public UserInterface {
private:
	Common::Rect _menuBounds;
	Common::Rect _oldMenuBounds;
	Common::Rect _invMenuBounds;
	Common::Rect _oldInvMenuBounds;
	Common::Rect _invGraphicBounds;
	Common::Rect _oldInvGraphicBounds;
	Surface *_menuBuffer;
	Surface *_invMenuBuffer;
	Surface *_invGraphic;
	Common::Array<Common::Rect> _grayAreas;
	int _lockoutTimer;
	SaveMode _fileMode;
	int _exitZone;
	int _scriptZone;
	WidgetTooltip _tooltipWidget;
	WidgetVerbs _verbsWidget;
private:
	/**
	 * Draws designated areas of the screen that are meant to be grayed out using grayscale colors
	 */
	void drawGrayAreas();

	/**
	 * Handle any input when we're in standard mode (with no windows open)
	 */
	void doStandardControl();

	/**
	 * Handle input when in look mode
	 */
	void doLookControl();

	/**
	 * Handle input when the File window is open
	 */
	void doFileControl();

	/**
	 * Handle input if an inventory command (INVENT, LOOK, or USE) has an open window and is active
	 */
	void doInventoryControl();

	/**
	 * Handle input while the verb menu is open
	 */
	void doVerbControl();

	/**
	 * Handles input when in talk mode. It highlights the buttons and response statements,
	 * and handles any actions for clicking on the buttons or statements.
	 */
	void doTalkControl();

	/**
	 * Handles input when a message window is open at the bottom of the screen
	 */
	void doMessageControl();
	
	/**
	 * Handles input when the player is in the Lab Table scene
	 */
	void doLabControl();

	/**
	 * If the mouse cursor is point at the cursor, then display the name of the object on the screen.
	 * If there is no object being pointed it, clear any previously displayed name
	 */
	void displayObjectNames();

	/**
	 * Set up to display the Files menu
	 */
	void initFileMenu();

	/**
	 * Turn off any active object description text
	 */
	void turnTextOff();

	/**
	 * Handle displaying the quit menu
	 */
	void doQuitMenu();
public:
	Common::Point _currentScroll, _targetScroll;
	int _scrollSize, _scrollSpeed;
	bool _drawMenu;
	int _bgFound, _oldBgFound;
	int _arrowZone, _oldArrowZone;
	Object *_bgShape;
	bool _personFound;
	int _activeObj;
	Common::KeyState _keyState;
public:
	TattooUserInterface(SherlockEngine *vm);

	/**
	 * Handles restoring any areas of the back buffer that were/are covered by UI elements
	 */
	void doBgAnimRestoreUI();

	/**
	 * Checks to see if the screen needs to be scrolled. If so, scrolls it towards the target position
	 */
	void doScroll();

	/**
	 * Initializes scroll variables
	 */
	void initScrollVars();

	/**
	 * Display the long description for an object stored in it's _examine field, in a window that
	 * will be shown at the bottom of the screen
	 */
	void lookAtObject();

	/**
	 * Handles displaying the journal
	 */
	void doJournal();

	/**
	 * Put the game in inventory mode by opening the inventory dialog
	 */
	void doInventory(int mode);

	/**
	 * Handle the display of the options/setup menu
	 */
	void doControls();

	/**
	 * Pick up the selected object
	 */
	void pickUpObject(int objNum);
public:
	virtual ~TattooUserInterface() {}

	/**
	 * Main input handler for the user interface
	 */
	virtual void handleInput();

	/**
	 * Draw the user interface onto the screen's back buffers
	 */	
	virtual void drawInterface(int bufferNum = 3);
};

} // End of namespace Tattoo

} // End of namespace Sherlock

#endif