aboutsummaryrefslogtreecommitdiff
path: root/saga/objectmap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'saga/objectmap.cpp')
-rw-r--r--saga/objectmap.cpp32
1 files changed, 13 insertions, 19 deletions
diff --git a/saga/objectmap.cpp b/saga/objectmap.cpp
index 7f5003a59d..47a20ee175 100644
--- a/saga/objectmap.cpp
+++ b/saga/objectmap.cpp
@@ -40,6 +40,7 @@ namespace Saga {
ObjectMap::ObjectMap(SagaEngine *vm) : _vm(vm) {
_objectsLoaded = false;
_namesLoaded = false;
+ _nNames = 0;
}
// Shuts down the object map module, destroys module allocation context
@@ -213,6 +214,7 @@ const uint16 ObjectMap::getFlags(int object) {
int i;
assert(_namesLoaded);
+ debug(0, "object: %d nnames: %d", object, _nNames);
assert((object > 0) && (object <= _nNames));
for (i = 0; i < _nObjects; i++) {
@@ -245,7 +247,7 @@ const int ObjectMap::getEPNum(int object) {
// Uses Gfx::drawLine to display all clickareas for each object in the
// currently loaded object map resource.
-int ObjectMap::draw(R_SURFACE *ds, Point *imouse_pt, int color, int color2) {
+int ObjectMap::draw(R_SURFACE *ds, Point imousePt, int color, int color2) {
R_OBJECTMAP_ENTRY *object_map;
R_CLICKAREA *clickarea;
@@ -254,7 +256,7 @@ int ObjectMap::draw(R_SURFACE *ds, Point *imouse_pt, int color, int color2) {
int draw_color = color;
int draw_txt = 0;
- int hit_object = 0;
+ bool hitObject = false;
int objectNum = 0;
int pointcount = 0;
@@ -264,15 +266,13 @@ int ObjectMap::draw(R_SURFACE *ds, Point *imouse_pt, int color, int color2) {
return R_FAILURE;
}
- if (imouse_pt != NULL) {
- if (hitTest(imouse_pt, &objectNum) == R_SUCCESS) {
- hit_object = 1;
- }
+ if ((objectNum = hitTest(imousePt)) != -1) {
+ hitObject = true;
}
for (i = 0; i < _nObjects; i++) {
draw_color = color;
- if (hit_object && (objectNum == _objectMaps[i].objectNum)) {
+ if (hitObject && (objectNum == _objectMaps[i].objectNum)) {
snprintf(txt_buf, sizeof txt_buf, "obj %d: v %d, f %X",
_objectMaps[i].objectNum,
_objectMaps[i].defaultVerb,
@@ -329,7 +329,7 @@ static bool MATH_HitTestPoly(Point *points, unsigned int npoints, Point test_poi
return inside_flag;
}
-int ObjectMap::hitTest(Point *imouse_pt, int *objectNum) {
+int ObjectMap::hitTest(Point imousePt) {
Point imouse;
R_OBJECTMAP_ENTRY *object_map;
R_CLICKAREA *clickarea;
@@ -338,10 +338,8 @@ int ObjectMap::hitTest(Point *imouse_pt, int *objectNum) {
int i, k;
- assert((imouse_pt != NULL) && (objectNum != NULL));
-
- imouse.x = imouse_pt->x;
- imouse.y = imouse_pt->y;
+ imouse.x = imousePt.x;
+ imouse.y = imousePt.y;
// Loop through all scene objects
for (i = 0; i < _nObjects; i++) {
@@ -358,22 +356,18 @@ int ObjectMap::hitTest(Point *imouse_pt, int *objectNum) {
if ((imouse.x > points[0].x) && (imouse.x <= points[1].x) &&
(imouse.y > points[0].y) &&
(imouse.y <= points[1].y)) {
- *objectNum = object_map->objectNum;
- return R_SUCCESS;
+ return object_map->objectNum;
}
} else if (n_points > 2) {
// Hit-test a polygon
if (MATH_HitTestPoly(points, n_points, imouse)) {
- *objectNum = object_map->objectNum;
- return R_SUCCESS;
+ return object_map->objectNum;
}
}
}
}
- *objectNum = 0;
-
- return R_FAILURE;
+ return -1;
}
void ObjectMap::info(void) {