From f24512ff105dce01260d1a484c0ce1aa89e108ce Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 3 May 2012 22:22:59 +0300 Subject: Refactor a bit actorspritemanager. (remove duplicate code) --- src/actorspritemanager.cpp | 174 +++++++++++++++++++-------------------------- 1 file changed, 72 insertions(+), 102 deletions(-) (limited to 'src/actorspritemanager.cpp') diff --git a/src/actorspritemanager.cpp b/src/actorspritemanager.cpp index 9463c2ae2..9dcae629c 100644 --- a/src/actorspritemanager.cpp +++ b/src/actorspritemanager.cpp @@ -1378,55 +1378,53 @@ void ActorSpriteManager::removeAttackMob(const std::string &name) rebuildPriorityAttackMobs(); } +#define addMobToList(name, mob) \ +{\ + int size = get##mob##sSize();\ + if (size > 0)\ + {\ + int idx = get##mob##Index("");\ + if (idx + 1 == size)\ + {\ + std::list::iterator itr = m##mob##s.end();\ + -- itr;\ + m##mob##s.insert(itr, name);\ + }\ + else\ + {\ + m##mob##s.push_back(name);\ + }\ + }\ + else\ + {\ + m##mob##s.push_back(name);\ + }\ + m##mob##sSet.insert(name);\ + rebuild##mob##s();\ +} + +#define rebuildMobsList(mob) \ +{\ + m##mob##sMap.clear();\ + std::list::const_iterator i = m##mob##s.begin();\ + int cnt = 0;\ + while (i != m##mob##s.end())\ + {\ + m##mob##sMap[*i] = cnt;\ + ++ i;\ + ++ cnt;\ + }\ +} + void ActorSpriteManager::addAttackMob(std::string name) { - int size = getAttackMobsSize(); - if (size > 0) - { - int idx = getAttackMobIndex(""); - if (idx + 1 == size) - { - std::list::iterator itr = mAttackMobs.end(); - -- itr; - mAttackMobs.insert(itr, name); - } - else - { - mAttackMobs.push_back(name); - } - } - else - { - mAttackMobs.push_back(name); - } - mAttackMobsSet.insert(name); - rebuildAttackMobs(); + addMobToList(name, AttackMob); rebuildPriorityAttackMobs(); } void ActorSpriteManager::addPriorityAttackMob(std::string name) { - int size = getPriorityAttackMobsSize(); - if (size > 0) - { - int idx = getPriorityAttackMobIndex(""); - if (idx + 1 == size) - { - std::list::iterator itr = mPriorityAttackMobs.end(); - -- itr; - mPriorityAttackMobs.insert(itr, name); - } - else - { - mPriorityAttackMobs.push_back(name); - } - } - else - { - mPriorityAttackMobs.push_back(name); - } - mPriorityAttackMobsSet.insert(name); - rebuildPriorityAttackMobs(); + addMobToList(name, PriorityAttackMob); } void ActorSpriteManager::addIgnoreAttackMob(std::string name) @@ -1439,88 +1437,60 @@ void ActorSpriteManager::addIgnoreAttackMob(std::string name) void ActorSpriteManager::rebuildPriorityAttackMobs() { - mPriorityAttackMobsMap.clear(); - std::list::const_iterator i = mPriorityAttackMobs.begin(); - int cnt = 0; - while (i != mPriorityAttackMobs.end()) - { - mPriorityAttackMobsMap[*i] = cnt; - ++ i; - ++ cnt; - } + rebuildMobsList(PriorityAttackMob); } void ActorSpriteManager::rebuildAttackMobs() { - mAttackMobsMap.clear(); - std::list::const_iterator i = mAttackMobs.begin(); - int cnt = 0; - while (i != mAttackMobs.end()) - { - mAttackMobsMap[*i] = cnt; - ++ i; - ++ cnt; - } + rebuildMobsList(AttackMob); } -int ActorSpriteManager::getPriorityAttackMobIndex(std::string name) +int ActorSpriteManager::getIndexByName(std::string name, + std::map &map) { std::map::const_iterator - i = mPriorityAttackMobsMap.find(name); - if (i == mPriorityAttackMobsMap.end()) + i = map.find(name); + if (i == map.end()) return -1; return (*i).second; } +int ActorSpriteManager::getPriorityAttackMobIndex(std::string name) +{ + return getIndexByName(name, mPriorityAttackMobsMap); +} + int ActorSpriteManager::getAttackMobIndex(std::string name) { - std::map::const_iterator i = mAttackMobsMap.find(name); - if (i == mAttackMobsMap.end()) - return -1; + return getIndexByName(name, mAttackMobsMap); +} - return (*i).second; +#define loadList(key, mob) \ +{\ + list = unpackList(serverConfig.getValue(key, ""));\ + i = list.begin();\ + i_end = list.end();\ + while (i != i_end)\ + {\ + if (*i == "")\ + empty = true;\ + m##mob##s.push_back(*i);\ + m##mob##sSet.insert(*i);\ + ++ i;\ + }\ } void ActorSpriteManager::loadAttackList() { bool empty = false; - std::list list = unpackList( - serverConfig.getValue("attackPriorityMobs", "")); - std::list::const_iterator i = list.begin(); - std::list::const_iterator i_end = list.end(); - while (i != i_end) - { - if (*i == "") - empty = true; - mPriorityAttackMobs.push_back(*i); - mPriorityAttackMobsSet.insert(*i); - ++ i; - } + std::list list; + std::list::const_iterator i; + std::list::const_iterator i_end; - list = unpackList(serverConfig.getValue("attackMobs", "")); - i = list.begin(); - i_end = list.end(); - while (i != i_end) - { - if (*i == "") - empty = true; - mAttackMobs.push_back(*i); - mAttackMobsSet.insert(*i); - ++ i; - } - - list = unpackList(serverConfig.getValue("ignoreAttackMobs", "")); - i = list.begin(); - i_end = list.end(); - while (i != i_end) - { - if (*i == "") - empty = true; - mIgnoreAttackMobs.push_back(*i); - mIgnoreAttackMobsSet.insert(*i); - ++ i; - } + loadList("attackPriorityMobs", PriorityAttackMob); + loadList("attackMobs", AttackMob); + loadList("ignoreAttackMobs", IgnoreAttackMob); if (!empty) { -- cgit v1.2.3-60-g2f50