aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood/collisionman.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/neverhood/collisionman.cpp')
-rw-r--r--engines/neverhood/collisionman.cpp29
1 files changed, 26 insertions, 3 deletions
diff --git a/engines/neverhood/collisionman.cpp b/engines/neverhood/collisionman.cpp
index cc40a47f1e..31bc16d23c 100644
--- a/engines/neverhood/collisionman.cpp
+++ b/engines/neverhood/collisionman.cpp
@@ -24,6 +24,8 @@
namespace Neverhood {
+static HitRect defaultHitRect = {NRect(), 0x5000};
+
CollisionMan::CollisionMan(NeverhoodEngine *vm)
: _vm(vm), _hitRects(NULL) {
}
@@ -39,13 +41,34 @@ void CollisionMan::setHitRects(HitRectList *hitRects) {
_hitRects = hitRects;
}
+void CollisionMan::clearHitRects() {
+ _hitRects = 0;
+}
+
HitRect *CollisionMan::findHitRectAtPos(int16 x, int16 y) {
- // TODO
- return NULL;
+ if (_hitRects) {
+ for (HitRectList::iterator it = _hitRects->begin(); it != _hitRects->end(); it++) {
+ HitRect *hitRect = &(*it);
+ if (x >= hitRect->rect.x1 && x <= hitRect->rect.x2 && y >= hitRect->rect.y1 && y <= hitRect->rect.y2)
+ return hitRect;
+ }
+ }
+ return &defaultHitRect;
}
void CollisionMan::addSprite(Sprite *sprite) {
- _sprites.push_back(sprite);
+ int index = 0, insertIndex = -1;
+ for (Common::Array<Sprite*>::iterator iter = _sprites.begin(); iter != _sprites.end(); iter++) {
+ if ((*iter)->getPriority() > sprite->getPriority()) {
+ insertIndex = index;
+ break;
+ }
+ index++;
+ }
+ if (insertIndex >= 0)
+ _sprites.insert_at(insertIndex, sprite);
+ else
+ _sprites.push_back(sprite);
}
void CollisionMan::removeSprite(Sprite *sprite) {