mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-21 00:39:41 +00:00
Merge branch 'refactor/stdlist' into 'master'
Use std::vector instead of std::list for some functions See merge request OpenMW/openmw!1699
This commit is contained in:
commit
ceae2d664d
6 changed files with 35 additions and 36 deletions
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <set>
|
||||
#include <cstdint>
|
||||
|
||||
|
@ -199,16 +198,16 @@ namespace MWBase
|
|||
|
||||
///Returns the list of actors which are siding with the given actor in fights
|
||||
/**ie AiFollow or AiEscort is active and the target is the actor **/
|
||||
virtual std::list<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor) = 0;
|
||||
virtual std::list<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor) = 0;
|
||||
virtual std::list<int> getActorsFollowingIndices(const MWWorld::Ptr& actor) = 0;
|
||||
virtual std::vector<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor) = 0;
|
||||
virtual std::vector<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor) = 0;
|
||||
virtual std::vector<int> getActorsFollowingIndices(const MWWorld::Ptr& actor) = 0;
|
||||
virtual std::map<int, MWWorld::Ptr> getActorsFollowingByIndex(const MWWorld::Ptr& actor) = 0;
|
||||
|
||||
///Returns a list of actors who are fighting the given actor within the fAlarmDistance
|
||||
/** ie AiCombat is active and the target is the actor **/
|
||||
virtual std::list<MWWorld::Ptr> getActorsFighting(const MWWorld::Ptr& actor) = 0;
|
||||
virtual std::vector<MWWorld::Ptr> getActorsFighting(const MWWorld::Ptr& actor) = 0;
|
||||
|
||||
virtual std::list<MWWorld::Ptr> getEnemiesNearby(const MWWorld::Ptr& actor) = 0;
|
||||
virtual std::vector<MWWorld::Ptr> getEnemiesNearby(const MWWorld::Ptr& actor) = 0;
|
||||
|
||||
/// Recursive versions of above methods
|
||||
virtual void getActorsFollowing(const MWWorld::Ptr& actor, std::set<MWWorld::Ptr>& out) = 0;
|
||||
|
|
|
@ -1969,9 +1969,9 @@ namespace MWMechanics
|
|||
return false;
|
||||
}
|
||||
|
||||
std::list<MWWorld::Ptr> Actors::getActorsSidingWith(const MWWorld::Ptr& actor)
|
||||
std::vector<MWWorld::Ptr> Actors::getActorsSidingWith(const MWWorld::Ptr& actor)
|
||||
{
|
||||
std::list<MWWorld::Ptr> list;
|
||||
std::vector<MWWorld::Ptr> list;
|
||||
for(PtrActorMap::iterator iter = mActors.begin(); iter != mActors.end(); ++iter)
|
||||
{
|
||||
const MWWorld::Ptr &iteratedActor = iter->first;
|
||||
|
@ -2007,9 +2007,9 @@ namespace MWMechanics
|
|||
return list;
|
||||
}
|
||||
|
||||
std::list<MWWorld::Ptr> Actors::getActorsFollowing(const MWWorld::Ptr& actor)
|
||||
std::vector<MWWorld::Ptr> Actors::getActorsFollowing(const MWWorld::Ptr& actor)
|
||||
{
|
||||
std::list<MWWorld::Ptr> list;
|
||||
std::vector<MWWorld::Ptr> list;
|
||||
forEachFollowingPackage(mActors, actor, getPlayer(), [&] (auto& iter, const std::shared_ptr<AiPackage>& package)
|
||||
{
|
||||
if (package->followTargetThroughDoors() && package->getTarget() == actor)
|
||||
|
@ -2022,14 +2022,14 @@ namespace MWMechanics
|
|||
}
|
||||
|
||||
void Actors::getActorsFollowing(const MWWorld::Ptr &actor, std::set<MWWorld::Ptr>& out) {
|
||||
std::list<MWWorld::Ptr> followers = getActorsFollowing(actor);
|
||||
auto followers = getActorsFollowing(actor);
|
||||
for(const MWWorld::Ptr &follower : followers)
|
||||
if (out.insert(follower).second)
|
||||
getActorsFollowing(follower, out);
|
||||
}
|
||||
|
||||
void Actors::getActorsSidingWith(const MWWorld::Ptr &actor, std::set<MWWorld::Ptr>& out) {
|
||||
std::list<MWWorld::Ptr> followers = getActorsSidingWith(actor);
|
||||
auto followers = getActorsSidingWith(actor);
|
||||
for(const MWWorld::Ptr &follower : followers)
|
||||
if (out.insert(follower).second)
|
||||
getActorsSidingWith(follower, out);
|
||||
|
@ -2042,7 +2042,7 @@ namespace MWMechanics
|
|||
out.insert(search->second.begin(), search->second.end());
|
||||
else
|
||||
{
|
||||
std::list<MWWorld::Ptr> followers = getActorsSidingWith(actor);
|
||||
auto followers = getActorsSidingWith(actor);
|
||||
for (const MWWorld::Ptr &follower : followers)
|
||||
if (out.insert(follower).second)
|
||||
getActorsSidingWith(follower, out, cachedAllies);
|
||||
|
@ -2058,9 +2058,9 @@ namespace MWMechanics
|
|||
}
|
||||
}
|
||||
|
||||
std::list<int> Actors::getActorsFollowingIndices(const MWWorld::Ptr &actor)
|
||||
std::vector<int> Actors::getActorsFollowingIndices(const MWWorld::Ptr &actor)
|
||||
{
|
||||
std::list<int> list;
|
||||
std::vector<int> list;
|
||||
forEachFollowingPackage(mActors, actor, getPlayer(), [&] (auto& iter, const std::shared_ptr<AiPackage>& package)
|
||||
{
|
||||
if (package->followTargetThroughDoors() && package->getTarget() == actor)
|
||||
|
@ -2093,8 +2093,8 @@ namespace MWMechanics
|
|||
return map;
|
||||
}
|
||||
|
||||
std::list<MWWorld::Ptr> Actors::getActorsFighting(const MWWorld::Ptr& actor) {
|
||||
std::list<MWWorld::Ptr> list;
|
||||
std::vector<MWWorld::Ptr> Actors::getActorsFighting(const MWWorld::Ptr& actor) {
|
||||
std::vector<MWWorld::Ptr> list;
|
||||
std::vector<MWWorld::Ptr> neighbors;
|
||||
osg::Vec3f position (actor.getRefData().getPosition().asVec3());
|
||||
getObjectsInRange(position, mActorsProcessingRange, neighbors);
|
||||
|
@ -2108,14 +2108,14 @@ namespace MWMechanics
|
|||
continue;
|
||||
|
||||
if (stats.getAiSequence().isInCombat(actor))
|
||||
list.push_front(neighbor);
|
||||
list.push_back(neighbor);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
std::list<MWWorld::Ptr> Actors::getEnemiesNearby(const MWWorld::Ptr& actor)
|
||||
std::vector<MWWorld::Ptr> Actors::getEnemiesNearby(const MWWorld::Ptr& actor)
|
||||
{
|
||||
std::list<MWWorld::Ptr> list;
|
||||
std::vector<MWWorld::Ptr> list;
|
||||
std::vector<MWWorld::Ptr> neighbors;
|
||||
osg::Vec3f position (actor.getRefData().getPosition().asVec3());
|
||||
getObjectsInRange(position, mActorsProcessingRange, neighbors);
|
||||
|
|
|
@ -164,8 +164,8 @@ namespace MWMechanics
|
|||
|
||||
///Returns the list of actors which are siding with the given actor in fights
|
||||
/**ie AiFollow or AiEscort is active and the target is the actor **/
|
||||
std::list<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor);
|
||||
std::list<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor);
|
||||
std::vector<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor);
|
||||
std::vector<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor);
|
||||
|
||||
/// Recursive version of getActorsFollowing
|
||||
void getActorsFollowing(const MWWorld::Ptr &actor, std::set<MWWorld::Ptr>& out);
|
||||
|
@ -175,15 +175,15 @@ namespace MWMechanics
|
|||
void getActorsSidingWith(const MWWorld::Ptr &actor, std::set<MWWorld::Ptr>& out, std::map<const MWWorld::Ptr, const std::set<MWWorld::Ptr> >& cachedAllies);
|
||||
|
||||
/// Get the list of AiFollow::mFollowIndex for all actors following this target
|
||||
std::list<int> getActorsFollowingIndices(const MWWorld::Ptr& actor);
|
||||
std::vector<int> getActorsFollowingIndices(const MWWorld::Ptr& actor);
|
||||
std::map<int, MWWorld::Ptr> getActorsFollowingByIndex(const MWWorld::Ptr& actor);
|
||||
|
||||
///Returns the list of actors which are fighting the given actor
|
||||
/**ie AiCombat is active and the target is the actor **/
|
||||
std::list<MWWorld::Ptr> getActorsFighting(const MWWorld::Ptr& actor);
|
||||
std::vector<MWWorld::Ptr> getActorsFighting(const MWWorld::Ptr& actor);
|
||||
|
||||
/// Unlike getActorsFighting, also returns actors that *would* fight the given actor if they saw him.
|
||||
std::list<MWWorld::Ptr> getEnemiesNearby(const MWWorld::Ptr& actor);
|
||||
std::vector<MWWorld::Ptr> getEnemiesNearby(const MWWorld::Ptr& actor);
|
||||
|
||||
void write (ESM::ESMWriter& writer, Loading::Listener& listener) const;
|
||||
|
||||
|
|
|
@ -171,7 +171,7 @@ namespace MWMechanics
|
|||
actor.getClass().getCreatureStats(actor).setAttackingOrSpell(false);
|
||||
storage.mActionCooldown = 0.f;
|
||||
// Continue combat if target is player or player follower/escorter and an attack has been attempted
|
||||
const std::list<MWWorld::Ptr>& playerFollowersAndEscorters = MWBase::Environment::get().getMechanicsManager()->getActorsSidingWith(MWMechanics::getPlayer());
|
||||
const auto& playerFollowersAndEscorters = MWBase::Environment::get().getMechanicsManager()->getActorsSidingWith(MWMechanics::getPlayer());
|
||||
bool targetSidesWithPlayer = (std::find(playerFollowersAndEscorters.begin(), playerFollowersAndEscorters.end(), target) != playerFollowersAndEscorters.end());
|
||||
if ((target == MWMechanics::getPlayer() || targetSidesWithPlayer)
|
||||
&& ((actor.getClass().getCreatureStats(actor).getHitAttemptActorId() == target.getClass().getCreatureStats(target).getActorId())
|
||||
|
|
|
@ -1639,17 +1639,17 @@ namespace MWMechanics
|
|||
return mActors.isAnyObjectInRange(position, radius);
|
||||
}
|
||||
|
||||
std::list<MWWorld::Ptr> MechanicsManager::getActorsSidingWith(const MWWorld::Ptr& actor)
|
||||
std::vector<MWWorld::Ptr> MechanicsManager::getActorsSidingWith(const MWWorld::Ptr& actor)
|
||||
{
|
||||
return mActors.getActorsSidingWith(actor);
|
||||
}
|
||||
|
||||
std::list<MWWorld::Ptr> MechanicsManager::getActorsFollowing(const MWWorld::Ptr& actor)
|
||||
std::vector<MWWorld::Ptr> MechanicsManager::getActorsFollowing(const MWWorld::Ptr& actor)
|
||||
{
|
||||
return mActors.getActorsFollowing(actor);
|
||||
}
|
||||
|
||||
std::list<int> MechanicsManager::getActorsFollowingIndices(const MWWorld::Ptr& actor)
|
||||
std::vector<int> MechanicsManager::getActorsFollowingIndices(const MWWorld::Ptr& actor)
|
||||
{
|
||||
return mActors.getActorsFollowingIndices(actor);
|
||||
}
|
||||
|
@ -1659,11 +1659,11 @@ namespace MWMechanics
|
|||
return mActors.getActorsFollowingByIndex(actor);
|
||||
}
|
||||
|
||||
std::list<MWWorld::Ptr> MechanicsManager::getActorsFighting(const MWWorld::Ptr& actor) {
|
||||
std::vector<MWWorld::Ptr> MechanicsManager::getActorsFighting(const MWWorld::Ptr& actor) {
|
||||
return mActors.getActorsFighting(actor);
|
||||
}
|
||||
|
||||
std::list<MWWorld::Ptr> MechanicsManager::getEnemiesNearby(const MWWorld::Ptr& actor) {
|
||||
std::vector<MWWorld::Ptr> MechanicsManager::getEnemiesNearby(const MWWorld::Ptr& actor) {
|
||||
return mActors.getEnemiesNearby(actor);
|
||||
}
|
||||
|
||||
|
|
|
@ -149,13 +149,13 @@ namespace MWMechanics
|
|||
/// Check if there are actors in selected range
|
||||
bool isAnyActorInRange(const osg::Vec3f &position, float radius) override;
|
||||
|
||||
std::list<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor) override;
|
||||
std::list<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor) override;
|
||||
std::list<int> getActorsFollowingIndices(const MWWorld::Ptr& actor) override;
|
||||
std::vector<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor) override;
|
||||
std::vector<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor) override;
|
||||
std::vector<int> getActorsFollowingIndices(const MWWorld::Ptr& actor) override;
|
||||
std::map<int, MWWorld::Ptr> getActorsFollowingByIndex(const MWWorld::Ptr& actor) override;
|
||||
|
||||
std::list<MWWorld::Ptr> getActorsFighting(const MWWorld::Ptr& actor) override;
|
||||
std::list<MWWorld::Ptr> getEnemiesNearby(const MWWorld::Ptr& actor) override;
|
||||
std::vector<MWWorld::Ptr> getActorsFighting(const MWWorld::Ptr& actor) override;
|
||||
std::vector<MWWorld::Ptr> getEnemiesNearby(const MWWorld::Ptr& actor) override;
|
||||
|
||||
/// Recursive version of getActorsFollowing
|
||||
void getActorsFollowing(const MWWorld::Ptr& actor, std::set<MWWorld::Ptr>& out) override;
|
||||
|
|
Loading…
Reference in a new issue