diff options
author | Andrew Kurushin | 2005-01-18 23:15:41 +0000 |
---|---|---|
committer | Andrew Kurushin | 2005-01-18 23:15:41 +0000 |
commit | 9353d54f95baf1e0838850a181bbad8b43761d66 (patch) | |
tree | 756e85bd06c7409b62726900da4cf2fdf6ccffb8 /saga/actor.cpp | |
parent | 0ccf59faee053f4ea6c349d25bf39bb83e537686 (diff) | |
download | scummvm-rg350-9353d54f95baf1e0838850a181bbad8b43761d66.tar.gz scummvm-rg350-9353d54f95baf1e0838850a181bbad8b43761d66.tar.bz2 scummvm-rg350-9353d54f95baf1e0838850a181bbad8b43761d66.zip |
implemented Sprite::hitTest
Actors & Objects can be hited
svn-id: r16596
Diffstat (limited to 'saga/actor.cpp')
-rw-r--r-- | saga/actor.cpp | 55 |
1 files changed, 40 insertions, 15 deletions
diff --git a/saga/actor.cpp b/saga/actor.cpp index 97844e02de..5130c6c104 100644 --- a/saga/actor.cpp +++ b/saga/actor.cpp @@ -1055,6 +1055,24 @@ void Actor::calcScreenPosition(CommonObjectData *commonObjectData) { } +uint16 Actor::hitTest(const Point &testPoint) { + CommonObjectOrderList::iterator drawOrderIterator; + CommonObjectDataPointer drawObject; + int frameNumber; + SpriteList *spriteList; + createDrawOrderList(); + for (drawOrderIterator = _drawOrderList.begin(); drawOrderIterator != _drawOrderList.end(); ++drawOrderIterator) { + drawObject = drawOrderIterator.operator*(); + if (!getSpriteParams(drawObject, frameNumber, spriteList)) { + continue; + } + + if (_vm->_sprite->hitTest(*spriteList, frameNumber, drawObject->screenPosition, drawObject->screenScale, testPoint)) { + return drawObject->id; + } + } + return ID_NOTHING; +} void Actor::createDrawOrderList() { int i; @@ -1082,6 +1100,26 @@ void Actor::createDrawOrderList() { } } +bool Actor::getSpriteParams(CommonObjectData *commonObjectData, int &frameNumber, SpriteList *&spriteList) { + if (_vm->_scene->currentSceneNumber() == RID_ITE_OVERMAP_SCENE) { + if (!(commonObjectData->flags & kProtagonist)){ + warning("not protagonist"); + return false; + } + frameNumber = 8; + spriteList = &_vm->_sprite->_mainSprites; + } else { + frameNumber = commonObjectData->frameNumber; + spriteList = &commonObjectData->spriteList; + } + + if ((frameNumber < 0) || (spriteList->spriteCount <= frameNumber)) { + warning("Actor::getSpriteParams frameNumber invalid for object id 0x%X", commonObjectData->id); + return false; + } + return true; +} + int Actor::drawActors() { CommonObjectOrderList::iterator drawOrderIterator; CommonObjectDataPointer drawObject; @@ -1096,24 +1134,11 @@ int Actor::drawActors() { for (drawOrderIterator = _drawOrderList.begin(); drawOrderIterator != _drawOrderList.end(); ++drawOrderIterator) { drawObject = drawOrderIterator.operator*(); - - if (_vm->_scene->currentSceneNumber() == RID_ITE_OVERMAP_SCENE) { - if (!(drawObject->flags & kProtagonist)){ - warning("not protagonist"); - continue; - } - frameNumber = 8; - spriteList = &_vm->_sprite->_mainSprites; - } else { - frameNumber = drawObject->frameNumber; - spriteList = &drawObject->spriteList; - } - - if ((frameNumber < 0) || (spriteList->spriteCount <= frameNumber)) { - warning("Actor::drawActors frameNumber invalid for object id 0x%X", drawObject->id); + if (!getSpriteParams(drawObject, frameNumber, spriteList)) { continue; } + if (_vm->_scene->getFlags() & kSceneFlagISO) { //todo: it } else { |