scummvm/saga/interface.h
Andrew Kurushin 31ceb0bb71 - GameModule is gone
- structures renamed
- SagaEngine class gives all current game descriptions
regression : "verb" is broken cause work in  progress

svn-id: r16511
2005-01-09 23:41:22 +00:00

270 lines
5.9 KiB
C++

/* ScummVM - Scumm Interpreter
* Copyright (C) 2004-2005 The ScummVM project
*
* The ReInherit Engine is (C)2000-2003 by Daniel Balsom.
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header$
*
*/
// Game interface module private header file
#ifndef SAGA_INTERFACE_H__
#define SAGA_INTERFACE_H__
#include "saga/sprite.h"
#include "saga/script.h"
namespace Saga {
enum INTERFACE_UPDATE_FLAGS {
UPDATE_MOUSEMOVE = 1,
UPDATE_MOUSECLICK
};
#define ITE_INVENTORY_SIZE 24
#define VERB_STRLIMIT 32
#define STATUS_TEXT_LEN 128
#define COMMAND_DEFAULT_BUTTON 1
// Inherit the Earth interface values
#define ITE_STATUS_Y 137
#define ITE_STATUS_W 320
#define ITE_STATUS_H 12
#define ITE_STATUS_TEXT_Y 2
#define ITE_STATUS_TXTCOL 186
#define ITE_STATUS_BGCOL 15
#define ITE_CMD_TEXT_COL 147
#define ITE_CMD_TEXT_SHADOWCOL 15
#define ITE_CMD_TEXT_HILITECOL 96
#define ITE_LPORTRAIT_X 5
#define ITE_LPORTRAIT_Y 4
#define ITE_RPORTRAIT_X 274
#define ITE_RPORTRAIT_Y 4
#define ITE_INVENTORY_XSTART 181
#define ITE_INVENTORY_YSTART 155
#define ITE_INVENTORY_ROWS 2
#define ITE_INVENTORY_COLUMNS 4
#define ITE_INVENTORY_ICON_WIDTH 29
#define ITE_INVENTORY_ICON_HEIGHT 20
#define ITE_INVENTORY_ICON_XOFFSET 1
#define ITE_INVENTORY_ICON_YOFFSET 0
#define ITE_INVENTORY_XSPACING 3
#define ITE_INVENTORY_YSPACING 1
// IHNMAIMS interface values
#define IHNM_STATUS_Y 304
#define IHNM_STATUS_W 640
#define IHNM_STATUS_H 24
#define IHNM_STATUS_TEXT_Y 8
#define IHNM_STATUS_TXTCOL 186
#define IHNM_STATUS_BGCOL 11
#define IHNM_CMD_TEXT_COL 147
#define IHNM_CMD_TEXT_SHADOWCOL 15
#define IHNM_CMD_TEXT_HILITECOL 96
#define IHNM_LPORTRAIT_X 5
#define IHNM_LPORTRAIT_Y 4
#define IHNM_RPORTRAIT_X -1
#define IHNM_RPORTRAIT_Y -1
// TODO
#define IHNM_INVENTORY_XSTART 0
#define IHNM_INVENTORY_YSTART 0
#define IHNM_INVENTORY_ROWS 0
#define IHNM_INVENTORY_COLUMNS 0
#define IHNM_INVENTORY_ICON_WIDTH 0
#define IHNM_INVENTORY_ICON_HEIGHT 0
#define IHNM_INVENTORY_ICON_XOFFSET 0
#define IHNM_INVENTORY_ICON_YOFFSET 0
#define IHNM_INVENTORY_XSPACING 0
#define IHNM_INVENTORY_YSPACING 0
enum PANEL_MODES {
kPanelNull,
kPanelMain,
kPanelOption,
kPanelTextBox,
kPanelQuit,
kPanelError,
kPanelLoad,
kPanelConverse,
kPanelProtect,
kPanelPlacard,
kPanelMap,
kPanelInventory,
kPanelFade
};
enum BUTTON_FLAGS {
BUTTON_NONE = 0x0,
BUTTON_LABEL = 0x01,
BUTTON_BITMAP = 0x02,
BUTTON_SET = 0x04
};
#define BUTTON_VERB ( BUTTON_LABEL | BUTTON_BITMAP | BUTTON_SET )
struct InterfaceButton {
int x1;
int y1;
int x2;
int y2;
const char *label;
int inactive_sprite;
int active_sprite;
int flags;
int data;
};
struct InterfacePanel {
byte *res;
size_t res_len;
int x;
int y;
byte *img;
size_t img_len;
int img_w;
int img_h;
int set_button;
int nbuttons;
InterfaceButton *buttons;
SpriteList sprites;
};
struct INTERFACE_DESC {
int status_y;
int status_w;
int status_h;
int status_txt_y;
int status_txt_col;
int status_bgcol;
int cmd_txt_col;
int cmd_txt_shadowcol;
int cmd_txt_hilitecol;
int cmd_defaultbutton;
int lportrait_x;
int lportrait_y;
int rportrait_x;
int rportrait_y;
int inv_xstart;
int inv_ystart;
int inv_rows;
int inv_columns;
int inv_icon_width;
int inv_icon_height;
int inv_icon_xoffset;
int inv_icon_yoffset;
int inv_xspacing;
int inv_yspacing;
};
struct INTERFACE_MODULE {
};
enum INTERFACE_VERBS {
I_VERB_WALKTO,
I_VERB_LOOKAT,
I_VERB_PICKUP,
I_VERB_TALKTO,
I_VERB_OPEN,
I_VERB_CLOSE,
I_VERB_USE,
I_VERB_GIVE
};
struct VERB_DATA {
int i_verb;
const char *verb_cvar;
char verb_str[VERB_STRLIMIT];
int s_verb;
};
class Interface {
public:
Interface(SagaEngine *vm);
~Interface(void);
int registerLang();
int activate();
int deactivate();
int setMode(int mode, bool force = false);
int getMode(void) { return _panelMode; }
void rememberMode();
void restoreMode();
void lockMode() { _lockedMode = _panelMode; }
void unlockMode() { _panelMode = _lockedMode; }
bool isInMainMode() { return _inMainMode; }
int setStatusText(const char *new_txt);
int loadScenePortraits(int resourceId);
int setLeftPortrait(int portrait);
int setRightPortrait(int portrait);
int draw();
int drawStatusBar(SURFACE *ds);
int update(const Point& imousePt, int update_flag);
void addToInventory(int sprite);
void removeFromInventory(int sprite);
void drawInventory();
int inventoryTest(const Point& imousePt, int *ibutton);
private:
int hitTest(const Point& imousePt, int *ibutton);
int handleCommandUpdate(SURFACE *ds, const Point& imousePt);
int handleCommandClick(SURFACE *ds, const Point& imousePt);
int handlePlayfieldUpdate(SURFACE *ds, const Point& imousePt);
int handlePlayfieldClick(SURFACE *ds, const Point& imousePt);
void drawVerb(int verb, int state);
private:
SagaEngine *_vm;
bool _initialized;
bool _active;
RSCFILE_CONTEXT *_interfaceContext;
INTERFACE_DESC _iDesc;
int _panelMode;
int _savedMode;
int _lockedMode;
bool _inMainMode;
InterfacePanel _mainPanel;
InterfacePanel _conversePanel;
char _statusText[STATUS_TEXT_LEN];
int _leftPortrait;
int _rightPortrait;
SpriteList _defPortraits;
SpriteList _scenePortraits;
int _activeVerb;
SCRIPT_THREAD *_iThread;
uint16 *_inventory;
int _inventorySize;
byte _inventoryCount;
};
} // End of namespace Saga
#endif /* INTERFACE_H__ */
/* end "r_interface.h" */