diff options
Diffstat (limited to 'engines/bladerunner/actor_clues.cpp')
-rw-r--r-- | engines/bladerunner/actor_clues.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/engines/bladerunner/actor_clues.cpp b/engines/bladerunner/actor_clues.cpp index 3665f4de09..16b9002765 100644 --- a/engines/bladerunner/actor_clues.cpp +++ b/engines/bladerunner/actor_clues.cpp @@ -21,6 +21,7 @@ */ #include "bladerunner/actor_clues.h" +#include "bladerunner/actor.h" #include "bladerunner/bladerunner.h" #include "bladerunner/game_info.h" @@ -88,10 +89,40 @@ bool ActorClues::isAcquired(int clueId) const { #endif } +int ActorClues::getWeight(int clueId) const { + int clueIndex = findClueIndex(clueId); + if (clueIndex == -1) { + return 0; + } + return _clues[clueIndex].weight; +} + void ActorClues::acquireCluesByRelations(int actorId, int otherActorId) { warning("TODO: acquireCluesByRelations"); } +int ActorClues::findAcquirableCluesFromActor(int actorId, int targetActorId, CluesUS *list, int size) { + Actor *actor = _vm->_actors[actorId]; + Actor *otherActor = _vm->_actors[targetActorId]; + int count = 0; + int cluesCount = actor->_clues->getCount(); + + for (int i = 0; i < cluesCount; i++) { + int clueId = actor->_clues->getClueIdByIndex(i); + + if (actor->_clues->isAcquired(clueId) + && otherActor->_clues->getWeight(clueId) > 0 + && !otherActor->_clues->isAcquired(clueId)) { + list[count].clueId = clueId; + list[count].modifier = 0; + + count++; + } + } + + return count; +} + int ActorClues::getFromActorId(int clueId) const { int clueIndex = findClueIndex(clueId); if (clueIndex == -1) { @@ -171,6 +202,10 @@ int ActorClues::getCount() const { return _count; } +int ActorClues::getClueIdByIndex(int index) const { + return _clues[index].clueId; +} + void ActorClues::removeAll() { _count = 0; for (int i = 0; i < _maxCount; ++i) { |