aboutsummaryrefslogtreecommitdiff
path: root/saga/actor.cpp
diff options
context:
space:
mode:
authorAndrew Kurushin2005-01-18 23:15:41 +0000
committerAndrew Kurushin2005-01-18 23:15:41 +0000
commit9353d54f95baf1e0838850a181bbad8b43761d66 (patch)
tree756e85bd06c7409b62726900da4cf2fdf6ccffb8 /saga/actor.cpp
parent0ccf59faee053f4ea6c349d25bf39bb83e537686 (diff)
downloadscummvm-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.cpp55
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 {