aboutsummaryrefslogtreecommitdiff
path: root/saga
diff options
context:
space:
mode:
authorEugene Sandulenko2004-08-06 01:39:17 +0000
committerEugene Sandulenko2004-08-06 01:39:17 +0000
commit602cd289f37425582355edcd2168f2a7c9087659 (patch)
treeab660664d284a33780e63aa7ca22c623a0d53c0c /saga
parentad1ab2cb620198329f8b3d677b3c872a7de3d03a (diff)
downloadscummvm-rg350-602cd289f37425582355edcd2168f2a7c9087659.tar.gz
scummvm-rg350-602cd289f37425582355edcd2168f2a7c9087659.tar.bz2
scummvm-rg350-602cd289f37425582355edcd2168f2a7c9087659.zip
Move INTERFACE_ to class.
svn-id: r14478
Diffstat (limited to 'saga')
-rw-r--r--saga/events.cpp4
-rw-r--r--saga/game.cpp4
-rw-r--r--saga/input.cpp6
-rw-r--r--saga/interface.cpp263
-rw-r--r--saga/interface.h63
-rw-r--r--saga/render.cpp4
-rw-r--r--saga/saga.cpp5
-rw-r--r--saga/saga.h2
-rw-r--r--saga/sfuncs.cpp6
9 files changed, 190 insertions, 167 deletions
diff --git a/saga/events.cpp b/saga/events.cpp
index ffa3f132a8..8f4b29841f 100644
--- a/saga/events.cpp
+++ b/saga/events.cpp
@@ -32,7 +32,7 @@
#include "saga/animation.h"
#include "saga/console_mod.h"
#include "saga/scene.h"
-#include "saga/interface_mod.h"
+#include "saga/interface.h"
#include "saga/text.h"
#include "saga/palanim_mod.h"
#include "saga/render.h"
@@ -300,7 +300,7 @@ static int HandleOneShot(R_EVENT *event) {
case R_INTERFACE_EVENT:
switch (event->op) {
case EVENT_ACTIVATE:
- INTERFACE_Activate();
+ _vm->_interface->activate();
break;
default:
break;
diff --git a/saga/game.cpp b/saga/game.cpp
index 064727468f..32d74a3950 100644
--- a/saga/game.cpp
+++ b/saga/game.cpp
@@ -32,7 +32,7 @@
#include "saga/rscfile_mod.h"
#include "saga/cvar_mod.h"
#include "saga/ite_introproc_mod.h"
-#include "saga/interface_mod.h"
+#include "saga/interface.h"
#include "saga/game_mod.h"
#include "saga/game.h"
@@ -359,7 +359,7 @@ int LoadLanguage() {
test_file.close();
- if (INTERFACE_RegisterLang() != R_SUCCESS) {
+ if (_vm->_interface->registerLang() != R_SUCCESS) {
warning("Error registering interface language cvars");
return R_FAILURE;
}
diff --git a/saga/input.cpp b/saga/input.cpp
index 0bcb114e8b..29e13d14cf 100644
--- a/saga/input.cpp
+++ b/saga/input.cpp
@@ -25,7 +25,7 @@
#include "saga/gfx.h"
#include "saga/actor.h"
#include "saga/console_mod.h"
-#include "saga/interface_mod.h"
+#include "saga/interface.h"
#include "saga/render.h"
#include "saga/scene.h"
#include "saga/script_mod.h"
@@ -78,7 +78,7 @@ int SYSINPUT_ProcessInput() {
CON_Activate();
break;
case 114: // r
- INTERFACE_Draw();
+ _vm->_interface->draw();
break;
case 282: // F1
_vm->_render->toggleFlag(RF_SHOW_FPS);
@@ -113,7 +113,7 @@ int SYSINPUT_ProcessInput() {
}
break;
case OSystem::EVENT_LBUTTONDOWN:
- INTERFACE_Update(&imouse_pt, UPDATE_MOUSECLICK);
+ _vm->_interface->update(&imouse_pt, UPDATE_MOUSECLICK);
break;
case OSystem::EVENT_MOUSEMOVE:
_mousePos.x = event.mouse.x;
diff --git a/saga/interface.cpp b/saga/interface.cpp
index 5fb8b2a7ea..3d38fd0d76 100644
--- a/saga/interface.cpp
+++ b/saga/interface.cpp
@@ -35,14 +35,11 @@
#include "saga/script_mod.h"
#include "saga/sprite.h"
-#include "saga/interface_mod.h"
#include "saga/interface.h"
#include "saga/sdata.h"
namespace Saga {
-static R_INTERFACE_MODULE IfModule;
-
static R_VERB_DATA I_VerbData[] = {
{I_VERB_WALKTO, "verb_walkto", "Walk to", S_VERB_WALKTO},
{I_VERB_LOOKAT, "verb_lookat", "Look at", S_VERB_LOOKAT},
@@ -118,7 +115,7 @@ static R_INTERFACE_BUTTON IHNM_c_buttons[] = {
{5, 4, 46, 47, "Portrait", 0, 0, 0, 0}
};
-int INTERFACE_RegisterLang(void) {
+int Interface::registerLang(void) {
size_t i;
for (i = 0; i < ARRAYSIZE(I_VerbData); i++) {
@@ -135,111 +132,117 @@ int INTERFACE_RegisterLang(void) {
return R_SUCCESS;
}
-int INTERFACE_Init(void) {
+Interface::Interface(SagaEngine *vm) : _vm(vm), _initialized(false) {
R_GAME_RESOURCEDESC g_resdesc;
int game_type;
int result;
- if (IfModule.init) {
- return R_FAILURE;
+ if (_initialized) {
+ return;
}
- IfModule.i_thread = STHREAD_Create();
- if (IfModule.i_thread == NULL) {
- warning("Error creating script thread for game interface module");
- return R_FAILURE;
+ _iThread = STHREAD_Create();
+ if (_iThread == NULL) {
+ warning("Interface::Interface(): Error creating script thread for game interface module");
+ return;
}
// Load interface module resource file context
- result = GAME_GetFileContext(&IfModule.i_file_ctxt, R_GAME_RESOURCEFILE, 0);
+ result = GAME_GetFileContext(&_interfaceContext, R_GAME_RESOURCEFILE, 0);
if (result != R_SUCCESS) {
- return R_FAILURE;
+ return;
}
// Initialize interface data by game type
game_type = GAME_GetGameType();
if (game_type == R_GAMETYPE_ITE) {
// Load Inherit the Earth interface desc
- IfModule.c_panel.buttons = ITE_c_buttons;
- IfModule.c_panel.nbuttons = ARRAYSIZE(ITE_c_buttons);
+ _cPanel.buttons = ITE_c_buttons;
+ _cPanel.nbuttons = ARRAYSIZE(ITE_c_buttons);
- IfModule.i_desc = ITE_interface;
+ _iDesc = ITE_interface;
} else if (game_type == R_GAMETYPE_IHNM) {
// Load I Have No Mouth interface desc
- IfModule.c_panel.buttons = IHNM_c_buttons;
- IfModule.c_panel.nbuttons = ARRAYSIZE(IHNM_c_buttons);
- IfModule.i_desc = IHNM_interface;
+ _cPanel.buttons = IHNM_c_buttons;
+ _cPanel.nbuttons = ARRAYSIZE(IHNM_c_buttons);
+ _iDesc = IHNM_interface;
} else {
- return R_FAILURE;
+ return;
}
// Load interface resources
GAME_GetResourceInfo(&g_resdesc);
// Load command panel resource
- result = RSC_LoadResource(IfModule.i_file_ctxt, g_resdesc.command_panel_rn,
- &IfModule.c_panel.res, &IfModule.c_panel.res_len);
+ result = RSC_LoadResource(_interfaceContext, g_resdesc.command_panel_rn,
+ &_cPanel.res, &_cPanel.res_len);
if (result != R_SUCCESS) {
- return R_FAILURE;
+ return;
}
// Load dialogue panel resource
- result = RSC_LoadResource(IfModule.i_file_ctxt, g_resdesc.dialogue_panel_rn,
- &IfModule.d_panel.res, &IfModule.d_panel.res_len);
+ result = RSC_LoadResource(_interfaceContext, g_resdesc.dialogue_panel_rn,
+ &_dPanel.res, &_dPanel.res_len);
if (result != R_SUCCESS) {
- return R_FAILURE;
+ return;
}
- _vm->_sprite->loadList(ITE_COMMAND_BUTTONSPRITES, &IfModule.c_panel.sprites);
+ _vm->_sprite->loadList(ITE_COMMAND_BUTTONSPRITES, &_cPanel.sprites);
- _vm->_sprite->loadList(ITE_DEFAULT_PORTRAITS, &IfModule.def_portraits);
+ _vm->_sprite->loadList(ITE_DEFAULT_PORTRAITS, &_defPortraits);
- _vm->decodeBGImage(IfModule.c_panel.res, IfModule.c_panel.res_len, &IfModule.c_panel.img,
- &IfModule.c_panel.img_len, &IfModule.c_panel.img_w, &IfModule.c_panel.img_h);
+ _vm->decodeBGImage(_cPanel.res, _cPanel.res_len, &_cPanel.img,
+ &_cPanel.img_len, &_cPanel.img_w, &_cPanel.img_h);
- _vm->decodeBGImage(IfModule.d_panel.res, IfModule.d_panel.res_len,
- &IfModule.d_panel.img, &IfModule.d_panel.img_len,
- &IfModule.d_panel.img_w, &IfModule.d_panel.img_h);
+ _vm->decodeBGImage(_dPanel.res, _dPanel.res_len,
+ &_dPanel.img, &_dPanel.img_len,
+ &_dPanel.img_w, &_dPanel.img_h);
- IfModule.c_panel.x = 0;
- IfModule.c_panel.y = 149;
+ _cPanel.x = 0;
+ _cPanel.y = 149;
- IfModule.d_panel.x = 0;
- IfModule.d_panel.y = 149;
+ _dPanel.x = 0;
+ _dPanel.y = 149;
- IfModule.c_panel.set_button = COMMAND_DEFAULT_BUTTON;
- IfModule.active_portrait = 0;
+ _cPanel.set_button = COMMAND_DEFAULT_BUTTON;
+ _activePortrait = 0;
- IfModule.active_verb = I_VERB_WALKTO;
+ _activeVerb = I_VERB_WALKTO;
- IfModule.init = 1;
+ _active = 0;
+ _panelMode = PANEL_COMMAND;
+ *_statusText = 0;
- return R_SUCCESS;
+ _initialized = true;
}
-int INTERFACE_Activate() {
- IfModule.active = 1;
- INTERFACE_Draw();
+Interface::~Interface(void) {
+ _initialized = false;
+}
+
+int Interface::activate() {
+ _active = 1;
+ draw();
return R_SUCCESS;
}
-int INTERFACE_Deactivate() {
- IfModule.active = 0;
+int Interface::deactivate() {
+ _active = 0;
return R_SUCCESS;
}
-int INTERFACE_SetStatusText(const char *new_txt) {
+int Interface::setStatusText(const char *new_txt) {
assert(new_txt != NULL);
- strncpy(IfModule.status_txt, new_txt, R_STATUS_TEXT_LEN);
+ strncpy(_statusText, new_txt, R_STATUS_TEXT_LEN);
return R_SUCCESS;
}
-int INTERFACE_Draw() {
+int Interface::draw() {
R_GAME_DISPLAYINFO g_di;
R_SURFACE *back_buf;
@@ -253,7 +256,7 @@ int INTERFACE_Draw() {
back_buf = _vm->_gfx->getBackBuffer();
- if (!IfModule.active) {
+ if (!_active) {
return R_SUCCESS;
}
@@ -262,44 +265,44 @@ int INTERFACE_Draw() {
// Erase background of status bar
rect.left = 0;
- rect.top = IfModule.i_desc.status_h - 1;
+ rect.top = _iDesc.status_h - 1;
rect.right = g_di.logical_w - 1;
- rect.bottom = IfModule.i_desc.status_y;
+ rect.bottom = _iDesc.status_y;
- _vm->_gfx->drawRect(back_buf, &rect, IfModule.i_desc.status_bgcol);
+ _vm->_gfx->drawRect(back_buf, &rect, _iDesc.status_bgcol);
// Draw command panel background
- if (IfModule.panel_mode == PANEL_COMMAND) {
- xbase = IfModule.c_panel.x;
- ybase = IfModule.c_panel.y;
+ if (_panelMode == PANEL_COMMAND) {
+ xbase = _cPanel.x;
+ ybase = _cPanel.y;
origin.x = 0;
- origin.y = g_di.logical_h - IfModule.c_panel.img_h;
+ origin.y = g_di.logical_h - _cPanel.img_h;
- _vm->_gfx->bufToSurface(back_buf, IfModule.c_panel.img, IfModule.c_panel.img_w,
- IfModule.c_panel.img_h, NULL, &origin);
+ _vm->_gfx->bufToSurface(back_buf, _cPanel.img, _cPanel.img_w,
+ _cPanel.img_h, NULL, &origin);
} else {
- xbase = IfModule.d_panel.x;
- ybase = IfModule.d_panel.y;
+ xbase = _dPanel.x;
+ ybase = _dPanel.y;
origin.x = 0;
- origin.y = g_di.logical_h - IfModule.c_panel.img_h;
+ origin.y = g_di.logical_h - _cPanel.img_h;
- _vm->_gfx->bufToSurface(back_buf, IfModule.d_panel.img, IfModule.d_panel.img_w,
- IfModule.d_panel.img_h, NULL, &origin);
+ _vm->_gfx->bufToSurface(back_buf, _dPanel.img, _dPanel.img_w,
+ _dPanel.img_h, NULL, &origin);
}
// Draw character portrait
- lportrait_x = xbase + IfModule.i_desc.lportrait_x;
- lportrait_y = ybase + IfModule.i_desc.lportrait_y;
+ lportrait_x = xbase + _iDesc.lportrait_x;
+ lportrait_y = ybase + _iDesc.lportrait_y;
- _vm->_sprite->draw(back_buf, IfModule.def_portraits, IfModule.active_portrait, lportrait_x, lportrait_y);
+ _vm->_sprite->draw(back_buf, _defPortraits, _activePortrait, lportrait_x, lportrait_y);
return R_SUCCESS;
}
-int INTERFACE_Update(R_POINT *imouse_pt, int update_flag) {
+int Interface::update(R_POINT *imouse_pt, int update_flag) {
R_GAME_DISPLAYINFO g_di;
R_SURFACE *back_buf;
@@ -308,7 +311,7 @@ int INTERFACE_Update(R_POINT *imouse_pt, int update_flag) {
assert(imouse_pt != NULL);
- if (!IfModule.active) {
+ if (!_active) {
return R_SUCCESS;
}
@@ -324,25 +327,25 @@ int INTERFACE_Update(R_POINT *imouse_pt, int update_flag) {
if (imouse_y < g_di.scene_h) {
// Mouse is in playfield space
if (update_flag == UPDATE_MOUSEMOVE) {
- HandlePlayfieldUpdate(back_buf, imouse_pt);
+ handlePlayfieldUpdate(back_buf, imouse_pt);
} else if (update_flag == UPDATE_MOUSECLICK) {
- HandlePlayfieldClick(back_buf, imouse_pt);
+ handlePlayfieldClick(back_buf, imouse_pt);
}
}
// Update command space
if (update_flag == UPDATE_MOUSEMOVE) {
- HandleCommandUpdate(back_buf, imouse_pt);
+ handleCommandUpdate(back_buf, imouse_pt);
} else if (update_flag == UPDATE_MOUSECLICK) {
- HandleCommandClick(back_buf, imouse_pt);
+ handleCommandClick(back_buf, imouse_pt);
}
- DrawStatusBar(back_buf);
+ drawStatusBar(back_buf);
return R_SUCCESS;
}
-int DrawStatusBar(R_SURFACE *ds) {
+int Interface::drawStatusBar(R_SURFACE *ds) {
R_GAME_DISPLAYINFO g_di;
R_RECT rect;
@@ -353,21 +356,21 @@ int DrawStatusBar(R_SURFACE *ds) {
// Erase background of status bar
rect.left = 0;
- rect.top = IfModule.i_desc.status_y;
+ rect.top = _iDesc.status_y;
rect.right = g_di.logical_w - 1;
- rect.bottom = IfModule.i_desc.status_y + IfModule.i_desc.status_h - 1;
+ rect.bottom = _iDesc.status_y + _iDesc.status_h - 1;
- _vm->_gfx->drawRect(ds, &rect, IfModule.i_desc.status_bgcol);
+ _vm->_gfx->drawRect(ds, &rect, _iDesc.status_bgcol);
- string_w = _vm->_font->getStringWidth(SMALL_FONT_ID, IfModule.status_txt, 0, 0);
+ string_w = _vm->_font->getStringWidth(SMALL_FONT_ID, _statusText, 0, 0);
- _vm->_font->draw(SMALL_FONT_ID, ds, IfModule.status_txt, 0, (IfModule.i_desc.status_w / 2) - (string_w / 2),
- IfModule.i_desc.status_y + IfModule.i_desc.status_txt_y, IfModule.i_desc.status_txt_col, 0, 0);
+ _vm->_font->draw(SMALL_FONT_ID, ds, _statusText, 0, (_iDesc.status_w / 2) - (string_w / 2),
+ _iDesc.status_y + _iDesc.status_txt_y, _iDesc.status_txt_col, 0, 0);
return R_SUCCESS;
}
-int HandleCommandClick(R_SURFACE *ds, R_POINT *imouse_pt) {
+int Interface::handleCommandClick(R_SURFACE *ds, R_POINT *imouse_pt) {
int hit_button;
int ibutton_num;
@@ -380,37 +383,37 @@ int HandleCommandClick(R_SURFACE *ds, R_POINT *imouse_pt) {
int old_set_button;
int set_button;
- hit_button = INTERFACE_HitTest(imouse_pt, &ibutton_num);
+ hit_button = hitTest(imouse_pt, &ibutton_num);
if (hit_button != R_SUCCESS) {
// Clicking somewhere other than a button doesn't do anything
return R_SUCCESS;
}
- x_base = IfModule.c_panel.x;
- y_base = IfModule.c_panel.y;
+ x_base = _cPanel.x;
+ y_base = _cPanel.y;
- if (IfModule.c_panel.buttons[ibutton_num].flags & BUTTON_SET) {
- old_set_button = IfModule.c_panel.set_button;
+ if (_cPanel.buttons[ibutton_num].flags & BUTTON_SET) {
+ old_set_button = _cPanel.set_button;
set_button = ibutton_num;
- IfModule.c_panel.set_button = set_button;
+ _cPanel.set_button = set_button;
- if (IfModule.c_panel.buttons[set_button].flags & BUTTON_VERB) {
- IfModule.active_verb = IfModule.c_panel.buttons[ibutton_num].data;
+ if (_cPanel.buttons[set_button].flags & BUTTON_VERB) {
+ _activeVerb = _cPanel.buttons[ibutton_num].data;
}
- if (IfModule.c_panel.buttons[set_button].flags & BUTTON_BITMAP) {
- button_x = x_base + IfModule.c_panel.buttons[set_button].x1;
- button_y = y_base + IfModule.c_panel.buttons[set_button].y1;
+ if (_cPanel.buttons[set_button].flags & BUTTON_BITMAP) {
+ button_x = x_base + _cPanel.buttons[set_button].x1;
+ button_y = y_base + _cPanel.buttons[set_button].y1;
- _vm->_sprite->draw(ds, IfModule.c_panel.sprites, IfModule.c_panel.buttons[set_button].
+ _vm->_sprite->draw(ds, _cPanel.sprites, _cPanel.buttons[set_button].
active_sprite - 1, button_x, button_y);
}
- if (IfModule.c_panel.buttons[old_set_button].flags & BUTTON_BITMAP) {
- button_x = x_base + IfModule.c_panel.buttons[old_set_button].x1;
- button_y = y_base + IfModule.c_panel.buttons[old_set_button].y1;
+ if (_cPanel.buttons[old_set_button].flags & BUTTON_BITMAP) {
+ button_x = x_base + _cPanel.buttons[old_set_button].x1;
+ button_y = y_base + _cPanel.buttons[old_set_button].y1;
- _vm->_sprite->draw(ds, IfModule.c_panel.sprites, IfModule.c_panel.buttons[old_set_button].
+ _vm->_sprite->draw(ds, _cPanel.sprites, _cPanel.buttons[old_set_button].
inactive_sprite - 1, button_x, button_y);
}
}
@@ -418,7 +421,7 @@ int HandleCommandClick(R_SURFACE *ds, R_POINT *imouse_pt) {
return R_SUCCESS;
}
-int HandleCommandUpdate(R_SURFACE *ds, R_POINT *imouse_pt) {
+int Interface::handleCommandUpdate(R_SURFACE *ds, R_POINT *imouse_pt) {
int hit_button;
int ibutton_num;
@@ -432,39 +435,39 @@ int HandleCommandUpdate(R_SURFACE *ds, R_POINT *imouse_pt) {
int color;
int i;
- hit_button = INTERFACE_HitTest(imouse_pt, &ibutton_num);
+ hit_button = hitTest(imouse_pt, &ibutton_num);
if (hit_button == R_SUCCESS) {
// Hovering over a command panel button
- INTERFACE_SetStatusText(I_VerbData[IfModule.active_verb].verb_str);
+ setStatusText(I_VerbData[_activeVerb].verb_str);
}
- for (i = 0; i < IfModule.c_panel.nbuttons; i++) {
- if (!(IfModule.c_panel.buttons[i].flags & BUTTON_LABEL)) {
+ for (i = 0; i < _cPanel.nbuttons; i++) {
+ if (!(_cPanel.buttons[i].flags & BUTTON_LABEL)) {
continue;
}
- button_w = IfModule.c_panel.buttons[i].x2 - IfModule.c_panel.buttons[i].x1;
+ button_w = _cPanel.buttons[i].x2 - _cPanel.buttons[i].x1;
- verb_idx = IfModule.c_panel.buttons[i].data;
+ verb_idx = _cPanel.buttons[i].data;
string_w = _vm->_font->getStringWidth(SMALL_FONT_ID, I_VerbData[verb_idx].verb_str, 0, 0);
if (i == hit_button) {
- color = IfModule.i_desc.cmd_txt_hilitecol;
+ color = _iDesc.cmd_txt_hilitecol;
} else {
- color = IfModule.i_desc.cmd_txt_col;
+ color = _iDesc.cmd_txt_col;
}
- button_x = IfModule.c_panel.x + IfModule.c_panel.buttons[i].x1;
- button_y = IfModule.c_panel.y + IfModule.c_panel.buttons[i].y1;
+ button_x = _cPanel.x + _cPanel.buttons[i].x1;
+ button_y = _cPanel.y + _cPanel.buttons[i].y1;
_vm->_font->draw(SMALL_FONT_ID, ds, I_VerbData[verb_idx].verb_str, 0,
button_x + ((button_w / 2) - (string_w / 2)), button_y + 1,
- color, IfModule.i_desc.cmd_txt_shadowcol, FONT_SHADOW);
+ color, _iDesc.cmd_txt_shadowcol, FONT_SHADOW);
- if ((i == IfModule.c_panel.set_button) && (IfModule.c_panel.buttons[i].flags & BUTTON_BITMAP)) {
- _vm->_sprite->draw(ds, IfModule.c_panel.sprites, IfModule.c_panel.buttons[i].active_sprite - 1,
+ if ((i == _cPanel.set_button) && (_cPanel.buttons[i].flags & BUTTON_BITMAP)) {
+ _vm->_sprite->draw(ds, _cPanel.sprites, _cPanel.buttons[i].active_sprite - 1,
button_x, button_y);
}
}
@@ -472,7 +475,7 @@ int HandleCommandUpdate(R_SURFACE *ds, R_POINT *imouse_pt) {
return R_SUCCESS;
}
-int HandlePlayfieldClick(R_SURFACE *ds, R_POINT *imouse_pt) {
+int Interface::handlePlayfieldClick(R_SURFACE *ds, R_POINT *imouse_pt) {
int hit_object;
int object_num;
uint16 object_flags = 0;
@@ -497,11 +500,11 @@ int HandlePlayfieldClick(R_SURFACE *ds, R_POINT *imouse_pt) {
if (object_flags & R_OBJECT_NORMAL) {
if (_vm->_objectMap->getEPNum(object_num, &script_num) == R_SUCCESS) {
// Set active verb in script module
- _vm->_sdata->putWord(4, 4, I_VerbData[IfModule.active_verb].s_verb);
+ _vm->_sdata->putWord(4, 4, I_VerbData[_activeVerb].s_verb);
// Execute object script if present
if (script_num != 0) {
- STHREAD_Execute(IfModule.i_thread, script_num);
+ STHREAD_Execute(_iThread, script_num);
}
}
} else {
@@ -513,7 +516,7 @@ int HandlePlayfieldClick(R_SURFACE *ds, R_POINT *imouse_pt) {
return R_SUCCESS;
}
-int HandlePlayfieldUpdate(R_SURFACE *ds, R_POINT *imouse_pt) {
+int Interface::handlePlayfieldUpdate(R_SURFACE *ds, R_POINT *imouse_pt) {
const char *object_name;
int object_num;
uint16 object_flags = 0;
@@ -528,7 +531,7 @@ int HandlePlayfieldUpdate(R_SURFACE *ds, R_POINT *imouse_pt) {
if (hit_object != R_SUCCESS) {
// Cursor over nothing - just display current verb
- INTERFACE_SetStatusText(I_VerbData[IfModule.active_verb].verb_str);
+ setStatusText(I_VerbData[_activeVerb].verb_str);
return R_SUCCESS;
}
@@ -541,19 +544,19 @@ int HandlePlayfieldUpdate(R_SURFACE *ds, R_POINT *imouse_pt) {
if (object_flags & R_OBJECT_NORMAL) {
// Normal scene object - display as subject of verb
- snprintf(new_status, R_STATUS_TEXT_LEN, "%s %s", I_VerbData[IfModule.active_verb].verb_str, object_name);
+ snprintf(new_status, R_STATUS_TEXT_LEN, "%s %s", I_VerbData[_activeVerb].verb_str, object_name);
} else {
// Not normal scene object - override verb as we can only
// walk to this object
snprintf(new_status, R_STATUS_TEXT_LEN, "%s %s", I_VerbData[I_VERB_WALKTO].verb_str, object_name);
}
- INTERFACE_SetStatusText(new_status);
+ setStatusText(new_status);
return R_SUCCESS;
}
-int INTERFACE_HitTest(R_POINT *imouse_pt, int *ibutton) {
+int Interface::hitTest(R_POINT *imouse_pt, int *ibutton) {
R_INTERFACE_BUTTON *buttons;
int nbuttons;
@@ -562,11 +565,11 @@ int INTERFACE_HitTest(R_POINT *imouse_pt, int *ibutton) {
int i;
- buttons = IfModule.c_panel.buttons;
- nbuttons = IfModule.c_panel.nbuttons;
+ buttons = _cPanel.buttons;
+ nbuttons = _cPanel.nbuttons;
- xbase = IfModule.c_panel.x;
- ybase = IfModule.c_panel.y;
+ xbase = _cPanel.x;
+ ybase = _cPanel.y;
for (i = 0; i < nbuttons; i++) {
if ((imouse_pt->x >= (xbase + buttons[i].x1)) && (imouse_pt->x < (xbase + buttons[i].x2)) &&
@@ -580,14 +583,4 @@ int INTERFACE_HitTest(R_POINT *imouse_pt, int *ibutton) {
return R_FAILURE;
}
-int INTERFACE_Shutdown(void) {
- if (!IfModule.init) {
- return R_FAILURE;
- }
-
- IfModule.init = 0;
-
- return R_SUCCESS;
-}
-
} // End of namespace Saga
diff --git a/saga/interface.h b/saga/interface.h
index 668cb8b4fb..83a9df85ee 100644
--- a/saga/interface.h
+++ b/saga/interface.h
@@ -26,8 +26,16 @@
#ifndef SAGA_INTERFACE_H__
#define SAGA_INTERFACE_H__
+#include "saga/sprite.h"
+#include "saga/script_mod.h"
+
namespace Saga {
+typedef enum INTERFACE_UPDATE_FLAGS_tag {
+ UPDATE_MOUSEMOVE = 1,
+ UPDATE_MOUSECLICK
+} INTERFACE_UPDATE_FLAGS;
+
#define R_VERB_STRLIMIT 32
#define R_STATUS_TEXT_LEN 128
@@ -122,18 +130,6 @@ struct R_INTERFACE_DESC {
};
struct R_INTERFACE_MODULE {
- int init;
- int active;
- R_RSCFILE_CONTEXT *i_file_ctxt;
- R_INTERFACE_DESC i_desc;
- R_PANEL_MODES panel_mode;
- R_INTERFACE_PANEL c_panel;
- R_INTERFACE_PANEL d_panel;
- char status_txt[R_STATUS_TEXT_LEN];
- int active_portrait;
- R_SPRITELIST *def_portraits;
- int active_verb;
- R_SCRIPT_THREAD *i_thread;
};
enum INTERFACE_VERBS {
@@ -154,12 +150,43 @@ struct R_VERB_DATA {
int s_verb;
};
-int INTERFACE_HitTest(R_POINT *imouse_pt, int *ibutton);
-int DrawStatusBar(R_SURFACE *ds);
-int HandleCommandUpdate(R_SURFACE *ds, R_POINT *imouse_pt);
-int HandleCommandClick(R_SURFACE *ds, R_POINT *imouse_pt);
-int HandlePlayfieldUpdate(R_SURFACE *ds, R_POINT *imouse_pt);
-int HandlePlayfieldClick(R_SURFACE *ds, R_POINT *imouse_pt);
+class Interface {
+ public:
+ Interface(SagaEngine *vm);
+ ~Interface(void);
+
+ int registerLang();
+ int activate();
+ int deactivate();
+ int setStatusText(const char *new_txt);
+ int draw();
+ int update(R_POINT *imouse_pt, int update_flag);
+
+
+ private:
+ int hitTest(R_POINT *imouse_pt, int *ibutton);
+ int drawStatusBar(R_SURFACE *ds);
+ int handleCommandUpdate(R_SURFACE *ds, R_POINT *imouse_pt);
+ int handleCommandClick(R_SURFACE *ds, R_POINT *imouse_pt);
+ int handlePlayfieldUpdate(R_SURFACE *ds, R_POINT *imouse_pt);
+ int handlePlayfieldClick(R_SURFACE *ds, R_POINT *imouse_pt);
+
+ private:
+ SagaEngine *_vm;
+
+ bool _initialized;
+ int _active;
+ R_RSCFILE_CONTEXT *_interfaceContext;
+ R_INTERFACE_DESC _iDesc;
+ R_PANEL_MODES _panelMode;
+ R_INTERFACE_PANEL _cPanel;
+ R_INTERFACE_PANEL _dPanel;
+ char _statusText[R_STATUS_TEXT_LEN];
+ int _activePortrait;
+ R_SPRITELIST *_defPortraits;
+ int _activeVerb;
+ R_SCRIPT_THREAD *_iThread;
+};
} // End of namespace Saga
diff --git a/saga/render.cpp b/saga/render.cpp
index 2a5c88d4d5..db74fb207f 100644
--- a/saga/render.cpp
+++ b/saga/render.cpp
@@ -30,7 +30,7 @@
#include "saga/cvar_mod.h"
#include "saga/font.h"
#include "saga/game_mod.h"
-#include "saga/interface_mod.h"
+#include "saga/interface.h"
#include "saga/scene.h"
#include "saga/text.h"
@@ -169,7 +169,7 @@ int Render::drawScene() {
// Update user interface
- INTERFACE_Update(&mouse_pt, UPDATE_MOUSEMOVE);
+ _vm->_interface->update(&mouse_pt, UPDATE_MOUSEMOVE);
// Display text formatting test, if applicable
if (_flags & RF_TEXT_TEST) {
diff --git a/saga/saga.cpp b/saga/saga.cpp
index 5d5c019c19..45bf3d5c36 100644
--- a/saga/saga.cpp
+++ b/saga/saga.cpp
@@ -44,7 +44,7 @@
#include "saga/font.h"
#include "saga/game_mod.h"
#include "saga/game.h"
-#include "saga/interface_mod.h"
+#include "saga/interface.h"
#include "saga/isomap.h"
#include "saga/script.h"
#include "saga/script_mod.h"
@@ -145,7 +145,7 @@ void SagaEngine::go() {
_anim = new Anim(this);
_script = new Script();
_sdata = new SData();
- INTERFACE_Init(); // requires script module
+ _interface = new Interface(this); // requires script module
_actor = new Actor(this);
_scene = new Scene(this);
@@ -245,6 +245,7 @@ void SagaEngine::shutdown() {
CVAR_Shutdown();
EVENT_Shutdown();
+ delete _interface;
delete _render;
delete _actionMap;
delete _isoMap;
diff --git a/saga/saga.h b/saga/saga.h
index 4f163f0d07..ac38e14857 100644
--- a/saga/saga.h
+++ b/saga/saga.h
@@ -55,6 +55,7 @@ class Actor;
class Font;
class Sprite;
class Scene;
+class Interface;
using Common::MemoryReadStream;
@@ -112,6 +113,7 @@ public:
Font *_font;
Sprite *_sprite;
Scene *_scene;
+ Interface *_interface;
private:
int decodeBGImageRLE(const byte *inbuf, size_t inbuf_len, byte *outbuf, size_t outbuf_len);
diff --git a/saga/sfuncs.cpp b/saga/sfuncs.cpp
index 08f1db0caa..0af72e4eda 100644
--- a/saga/sfuncs.cpp
+++ b/saga/sfuncs.cpp
@@ -29,7 +29,7 @@
#include "saga/actor.h"
#include "saga/animation.h"
#include "saga/console_mod.h"
-#include "saga/interface_mod.h"
+#include "saga/interface.h"
#include "saga/script.h"
#include "saga/sfuncs.h"
@@ -229,9 +229,9 @@ int SF_freezeInterface(R_SCRIPTFUNC_PARAMS) {
SSTACK_Pop(thread->stack, &b_param);
if (b_param) {
- INTERFACE_Deactivate();
+ _vm->_interface->deactivate();
} else {
- INTERFACE_Activate();
+ _vm->_interface->activate();
}
return R_SUCCESS;