mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-21 21:09:42 +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 <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <list>
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
@ -199,16 +198,16 @@ namespace MWBase
|
||||||
|
|
||||||
///Returns the list of actors which are siding with the given actor in fights
|
///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 **/
|
/**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::vector<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor) = 0;
|
||||||
virtual std::list<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor) = 0;
|
virtual std::vector<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor) = 0;
|
||||||
virtual std::list<int> getActorsFollowingIndices(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;
|
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
|
///Returns a list of actors who are fighting the given actor within the fAlarmDistance
|
||||||
/** ie AiCombat is active and the target is the actor **/
|
/** 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
|
/// Recursive versions of above methods
|
||||||
virtual void getActorsFollowing(const MWWorld::Ptr& actor, std::set<MWWorld::Ptr>& out) = 0;
|
virtual void getActorsFollowing(const MWWorld::Ptr& actor, std::set<MWWorld::Ptr>& out) = 0;
|
||||||
|
|
|
@ -1969,9 +1969,9 @@ namespace MWMechanics
|
||||||
return false;
|
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)
|
for(PtrActorMap::iterator iter = mActors.begin(); iter != mActors.end(); ++iter)
|
||||||
{
|
{
|
||||||
const MWWorld::Ptr &iteratedActor = iter->first;
|
const MWWorld::Ptr &iteratedActor = iter->first;
|
||||||
|
@ -2007,9 +2007,9 @@ namespace MWMechanics
|
||||||
return list;
|
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)
|
forEachFollowingPackage(mActors, actor, getPlayer(), [&] (auto& iter, const std::shared_ptr<AiPackage>& package)
|
||||||
{
|
{
|
||||||
if (package->followTargetThroughDoors() && package->getTarget() == actor)
|
if (package->followTargetThroughDoors() && package->getTarget() == actor)
|
||||||
|
@ -2022,14 +2022,14 @@ namespace MWMechanics
|
||||||
}
|
}
|
||||||
|
|
||||||
void Actors::getActorsFollowing(const MWWorld::Ptr &actor, std::set<MWWorld::Ptr>& out) {
|
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)
|
for(const MWWorld::Ptr &follower : followers)
|
||||||
if (out.insert(follower).second)
|
if (out.insert(follower).second)
|
||||||
getActorsFollowing(follower, out);
|
getActorsFollowing(follower, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Actors::getActorsSidingWith(const MWWorld::Ptr &actor, std::set<MWWorld::Ptr>& 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)
|
for(const MWWorld::Ptr &follower : followers)
|
||||||
if (out.insert(follower).second)
|
if (out.insert(follower).second)
|
||||||
getActorsSidingWith(follower, out);
|
getActorsSidingWith(follower, out);
|
||||||
|
@ -2042,7 +2042,7 @@ namespace MWMechanics
|
||||||
out.insert(search->second.begin(), search->second.end());
|
out.insert(search->second.begin(), search->second.end());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::list<MWWorld::Ptr> followers = getActorsSidingWith(actor);
|
auto followers = getActorsSidingWith(actor);
|
||||||
for (const MWWorld::Ptr &follower : followers)
|
for (const MWWorld::Ptr &follower : followers)
|
||||||
if (out.insert(follower).second)
|
if (out.insert(follower).second)
|
||||||
getActorsSidingWith(follower, out, cachedAllies);
|
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)
|
forEachFollowingPackage(mActors, actor, getPlayer(), [&] (auto& iter, const std::shared_ptr<AiPackage>& package)
|
||||||
{
|
{
|
||||||
if (package->followTargetThroughDoors() && package->getTarget() == actor)
|
if (package->followTargetThroughDoors() && package->getTarget() == actor)
|
||||||
|
@ -2093,8 +2093,8 @@ namespace MWMechanics
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::list<MWWorld::Ptr> Actors::getActorsFighting(const MWWorld::Ptr& actor) {
|
std::vector<MWWorld::Ptr> Actors::getActorsFighting(const MWWorld::Ptr& actor) {
|
||||||
std::list<MWWorld::Ptr> list;
|
std::vector<MWWorld::Ptr> list;
|
||||||
std::vector<MWWorld::Ptr> neighbors;
|
std::vector<MWWorld::Ptr> neighbors;
|
||||||
osg::Vec3f position (actor.getRefData().getPosition().asVec3());
|
osg::Vec3f position (actor.getRefData().getPosition().asVec3());
|
||||||
getObjectsInRange(position, mActorsProcessingRange, neighbors);
|
getObjectsInRange(position, mActorsProcessingRange, neighbors);
|
||||||
|
@ -2108,14 +2108,14 @@ namespace MWMechanics
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (stats.getAiSequence().isInCombat(actor))
|
if (stats.getAiSequence().isInCombat(actor))
|
||||||
list.push_front(neighbor);
|
list.push_back(neighbor);
|
||||||
}
|
}
|
||||||
return list;
|
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;
|
std::vector<MWWorld::Ptr> neighbors;
|
||||||
osg::Vec3f position (actor.getRefData().getPosition().asVec3());
|
osg::Vec3f position (actor.getRefData().getPosition().asVec3());
|
||||||
getObjectsInRange(position, mActorsProcessingRange, neighbors);
|
getObjectsInRange(position, mActorsProcessingRange, neighbors);
|
||||||
|
|
|
@ -164,8 +164,8 @@ namespace MWMechanics
|
||||||
|
|
||||||
///Returns the list of actors which are siding with the given actor in fights
|
///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 **/
|
/**ie AiFollow or AiEscort is active and the target is the actor **/
|
||||||
std::list<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor);
|
std::vector<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor);
|
||||||
std::list<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor);
|
std::vector<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor);
|
||||||
|
|
||||||
/// Recursive version of getActorsFollowing
|
/// Recursive version of getActorsFollowing
|
||||||
void getActorsFollowing(const MWWorld::Ptr &actor, std::set<MWWorld::Ptr>& out);
|
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);
|
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
|
/// 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);
|
std::map<int, MWWorld::Ptr> getActorsFollowingByIndex(const MWWorld::Ptr& actor);
|
||||||
|
|
||||||
///Returns the list of actors which are fighting the given actor
|
///Returns the list of actors which are fighting the given actor
|
||||||
/**ie AiCombat is active and the target is the 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.
|
/// 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;
|
void write (ESM::ESMWriter& writer, Loading::Listener& listener) const;
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,7 @@ namespace MWMechanics
|
||||||
actor.getClass().getCreatureStats(actor).setAttackingOrSpell(false);
|
actor.getClass().getCreatureStats(actor).setAttackingOrSpell(false);
|
||||||
storage.mActionCooldown = 0.f;
|
storage.mActionCooldown = 0.f;
|
||||||
// Continue combat if target is player or player follower/escorter and an attack has been attempted
|
// 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());
|
bool targetSidesWithPlayer = (std::find(playerFollowersAndEscorters.begin(), playerFollowersAndEscorters.end(), target) != playerFollowersAndEscorters.end());
|
||||||
if ((target == MWMechanics::getPlayer() || targetSidesWithPlayer)
|
if ((target == MWMechanics::getPlayer() || targetSidesWithPlayer)
|
||||||
&& ((actor.getClass().getCreatureStats(actor).getHitAttemptActorId() == target.getClass().getCreatureStats(target).getActorId())
|
&& ((actor.getClass().getCreatureStats(actor).getHitAttemptActorId() == target.getClass().getCreatureStats(target).getActorId())
|
||||||
|
|
|
@ -1639,17 +1639,17 @@ namespace MWMechanics
|
||||||
return mActors.isAnyObjectInRange(position, radius);
|
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);
|
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);
|
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);
|
return mActors.getActorsFollowingIndices(actor);
|
||||||
}
|
}
|
||||||
|
@ -1659,11 +1659,11 @@ namespace MWMechanics
|
||||||
return mActors.getActorsFollowingByIndex(actor);
|
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);
|
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);
|
return mActors.getEnemiesNearby(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -149,13 +149,13 @@ namespace MWMechanics
|
||||||
/// Check if there are actors in selected range
|
/// Check if there are actors in selected range
|
||||||
bool isAnyActorInRange(const osg::Vec3f &position, float radius) override;
|
bool isAnyActorInRange(const osg::Vec3f &position, float radius) override;
|
||||||
|
|
||||||
std::list<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor) override;
|
std::vector<MWWorld::Ptr> getActorsSidingWith(const MWWorld::Ptr& actor) override;
|
||||||
std::list<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor) override;
|
std::vector<MWWorld::Ptr> getActorsFollowing(const MWWorld::Ptr& actor) override;
|
||||||
std::list<int> getActorsFollowingIndices(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::map<int, MWWorld::Ptr> getActorsFollowingByIndex(const MWWorld::Ptr& actor) override;
|
||||||
|
|
||||||
std::list<MWWorld::Ptr> getActorsFighting(const MWWorld::Ptr& actor) override;
|
std::vector<MWWorld::Ptr> getActorsFighting(const MWWorld::Ptr& actor) override;
|
||||||
std::list<MWWorld::Ptr> getEnemiesNearby(const MWWorld::Ptr& actor) override;
|
std::vector<MWWorld::Ptr> getEnemiesNearby(const MWWorld::Ptr& actor) override;
|
||||||
|
|
||||||
/// Recursive version of getActorsFollowing
|
/// Recursive version of getActorsFollowing
|
||||||
void getActorsFollowing(const MWWorld::Ptr& actor, std::set<MWWorld::Ptr>& out) override;
|
void getActorsFollowing(const MWWorld::Ptr& actor, std::set<MWWorld::Ptr>& out) override;
|
||||||
|
|
Loading…
Reference in a new issue