This commit is contained in:
aozhiwei 2023-02-24 20:20:45 +08:00
parent cf3a8a8b39
commit 6e46e42ac3
2 changed files with 20 additions and 7 deletions

View File

@ -21,6 +21,7 @@
#include "mapinstance.h" #include "mapinstance.h"
#include "collision.h" #include "collision.h"
#include "gungrasp.h" #include "gungrasp.h"
#include "effect.h"
#include "mt/Param.h" #include "mt/Param.h"
#include "mt/Hero.h" #include "mt/Hero.h"
@ -2718,25 +2719,37 @@ void Creature::ClearEnergyShield()
int Creature::AddEffect(int effect_id) int Creature::AddEffect(int effect_id)
{ {
auto effect = std::make_shared<Effect>();
effect->effect_uniid = ++buff_uniid_;
effect->owner = this;
effect->effect_id = effect_id;
effect_hash_[effect->effect_uniid] = effect;
} }
void Creature::RemoveEffect(int effect_uniid) void Creature::RemoveEffect(int effect_uniid)
{ {
effect_hash_.erase(effect_uniid);
} }
void Creature::RemoveEffects(std::vector<int> effect_uniids) void Creature::RemoveEffects(std::vector<int> effect_uniids)
{ {
for (int effect_uniid : effect_uniids) {
RemoveEffect(effect_uniid);
}
} }
void Creature::ClearEffect() void Creature::ClearEffect()
{ {
effect_hash_.clear();
} }
void Creature::TraverseEffect(std::function<void (Effect*, bool&)> func) void Creature::TraverseEffect(std::function<void (Effect*, bool&)> cb)
{ {
for (auto& pair : effect_hash_) {
bool stop = false;
cb(pair.second.get(), stop);
if (stop) {
break;
}
}
} }

View File

@ -364,7 +364,7 @@ private:
std::array<list_head, kBET_End> depend_effect_ = {}; std::array<list_head, kBET_End> depend_effect_ = {};
std::array<list_head, kCondBuffEnd> cond_buffs_ = {}; std::array<list_head, kCondBuffEnd> cond_buffs_ = {};
std::list<std::shared_ptr<Buff>> buff_list_; std::list<std::shared_ptr<Buff>> buff_list_;
std::list<std::shared_ptr<Effect>> effect_list_; std::map<int, std::shared_ptr<Effect>> effect_hash_;
std::list<std::tuple<int, Hero*>> slave_heros_; std::list<std::tuple<int, Hero*>> slave_heros_;
std::list<std::tuple<int, RoomObstacle*>> slave_things_; std::list<std::tuple<int, RoomObstacle*>> slave_things_;
a8::XTimerWp auto_switch_weapon_timer_; a8::XTimerWp auto_switch_weapon_timer_;