1
This commit is contained in:
parent
e1ba7d045c
commit
5d2039cb28
@ -204,16 +204,12 @@ void Bullet::ProcBomb()
|
|||||||
case IS_POSION_GAS_BOMB:
|
case IS_POSION_GAS_BOMB:
|
||||||
{
|
{
|
||||||
//毒气弹
|
//毒气弹
|
||||||
a8::Vec2 bomb_pos = GetPos();
|
|
||||||
room->frame_event.AddSmoke(this, meta->i->id(), bomb_pos);
|
|
||||||
ProcPosionGasBomb(delay_time);
|
ProcPosionGasBomb(delay_time);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IS_MOLOTOR_COCKTAIL:
|
case IS_MOLOTOR_COCKTAIL:
|
||||||
{
|
{
|
||||||
//燃烧瓶
|
//燃烧瓶
|
||||||
a8::Vec2 bomb_pos = GetPos();
|
|
||||||
room->frame_event.AddSmoke(this, meta->i->id(), bomb_pos);
|
|
||||||
ProcMolotorCocktailBomb(delay_time);
|
ProcMolotorCocktailBomb(delay_time);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -374,10 +370,56 @@ void Bullet::ProcFragBomb(int delay_time)
|
|||||||
|
|
||||||
void Bullet::ProcPosionGasBomb(int delay_time)
|
void Bullet::ProcPosionGasBomb(int delay_time)
|
||||||
{
|
{
|
||||||
|
if (sender.Get()) {
|
||||||
|
PosionGasMiTask* task = new PosionGasMiTask();
|
||||||
|
task->room = room;
|
||||||
|
task->sender.Attach(sender.Get());
|
||||||
|
task->bomb_pos = GetPos();
|
||||||
|
task->gun_meta = gun_meta;
|
||||||
|
task->meta = meta;
|
||||||
|
room->xtimer.AddDeadLineTimerAndAttach
|
||||||
|
(std::max(1, (int)(delay_time / FRAME_RATE_MS)),
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(task),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
PosionGasMiTask* task = (PosionGasMiTask*)param.sender.GetUserData();
|
||||||
|
task->Done();
|
||||||
|
},
|
||||||
|
&task->timer_attacher.timer_list_,
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
PosionGasMiTask* task = (PosionGasMiTask*)param.sender.GetUserData();
|
||||||
|
delete task;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bullet::ProcMolotorCocktailBomb(int delay_time)
|
void Bullet::ProcMolotorCocktailBomb(int delay_time)
|
||||||
{
|
{
|
||||||
|
if (sender.Get()) {
|
||||||
|
MolotorCocktailMiTask* task = new MolotorCocktailMiTask();
|
||||||
|
task->room = room;
|
||||||
|
task->sender.Attach(sender.Get());
|
||||||
|
task->bomb_pos = GetPos();
|
||||||
|
task->gun_meta = gun_meta;
|
||||||
|
task->meta = meta;
|
||||||
|
room->xtimer.AddDeadLineTimerAndAttach
|
||||||
|
(std::max(1, (int)(delay_time / FRAME_RATE_MS)),
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(task),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
MolotorCocktailMiTask* task = (MolotorCocktailMiTask*)param.sender.GetUserData();
|
||||||
|
task->Done();
|
||||||
|
},
|
||||||
|
&task->timer_attacher.timer_list_,
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
MolotorCocktailMiTask* task = (MolotorCocktailMiTask*)param.sender.GetUserData();
|
||||||
|
delete task;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,37 +5,6 @@
|
|||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "metadata.h"
|
#include "metadata.h"
|
||||||
|
|
||||||
void MolotorCocktailMiTask::Check()
|
|
||||||
{
|
|
||||||
{
|
|
||||||
std::list<Player*> deleted_hums;
|
|
||||||
for (auto& hum : player_set) {
|
|
||||||
if (bomb_pos.Distance(hum->GetPos()) > gun_meta->i->bullet_rad() + hum->meta->i->radius()) {
|
|
||||||
hum->RemoveBuffByEffectId(kBET_HunLuan);
|
|
||||||
deleted_hums.push_back(hum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (auto& hum : deleted_hums) {
|
|
||||||
player_set.erase(hum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
room->TouchPlayerList
|
|
||||||
(a8::XParams(),
|
|
||||||
[this] (Player* hum, a8::XParams&) -> bool
|
|
||||||
{
|
|
||||||
if (bomb_pos.Distance(hum->GetPos()) < gun_meta->i->bullet_rad() + hum->meta->i->radius()) {
|
|
||||||
if (!hum->HasBuffEffect(kBET_HunLuan)) {
|
|
||||||
hum->AddBuff(nullptr, buff_meta, 1, nullptr);
|
|
||||||
player_set.insert(hum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void MolotorCocktailMiTask::Done()
|
void MolotorCocktailMiTask::Done()
|
||||||
{
|
{
|
||||||
for (auto& hum : player_set) {
|
|
||||||
hum->RemoveBuffByEffectId(kBET_HunLuan);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -15,10 +15,9 @@ class MolotorCocktailMiTask : public MicroTask
|
|||||||
public:
|
public:
|
||||||
Room* room = nullptr;
|
Room* room = nullptr;
|
||||||
a8::Vec2 bomb_pos;
|
a8::Vec2 bomb_pos;
|
||||||
std::set<Player*> player_set;
|
CreatureWeakPtr sender;
|
||||||
MetaData::Buff* buff_meta = nullptr;
|
|
||||||
MetaData::Equip* gun_meta = nullptr;
|
MetaData::Equip* gun_meta = nullptr;
|
||||||
|
MetaData::Equip* meta = nullptr;
|
||||||
|
|
||||||
void Check();
|
|
||||||
void Done();
|
void Done();
|
||||||
};
|
};
|
||||||
|
@ -5,37 +5,7 @@
|
|||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "metadata.h"
|
#include "metadata.h"
|
||||||
|
|
||||||
void PosionGasMiTask::Check()
|
|
||||||
{
|
|
||||||
{
|
|
||||||
std::list<Player*> deleted_hums;
|
|
||||||
for (auto& hum : player_set) {
|
|
||||||
if (bomb_pos.Distance(hum->GetPos()) > gun_meta->i->bullet_rad() + hum->meta->i->radius()) {
|
|
||||||
hum->RemoveBuffByEffectId(kBET_HunLuan);
|
|
||||||
deleted_hums.push_back(hum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (auto& hum : deleted_hums) {
|
|
||||||
player_set.erase(hum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
room->TouchPlayerList
|
|
||||||
(a8::XParams(),
|
|
||||||
[this] (Player* hum, a8::XParams&) -> bool
|
|
||||||
{
|
|
||||||
if (bomb_pos.Distance(hum->GetPos()) < gun_meta->i->bullet_rad() + hum->meta->i->radius()) {
|
|
||||||
if (!hum->HasBuffEffect(kBET_HunLuan)) {
|
|
||||||
hum->AddBuff(nullptr, buff_meta, 1, nullptr);
|
|
||||||
player_set.insert(hum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void PosionGasMiTask::Done()
|
void PosionGasMiTask::Done()
|
||||||
{
|
{
|
||||||
for (auto& hum : player_set) {
|
|
||||||
hum->RemoveBuffByEffectId(kBET_HunLuan);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -15,10 +15,9 @@ class PosionGasMiTask : public MicroTask
|
|||||||
public:
|
public:
|
||||||
Room* room = nullptr;
|
Room* room = nullptr;
|
||||||
a8::Vec2 bomb_pos;
|
a8::Vec2 bomb_pos;
|
||||||
std::set<Player*> player_set;
|
CreatureWeakPtr sender;
|
||||||
MetaData::Buff* buff_meta = nullptr;
|
|
||||||
MetaData::Equip* gun_meta = nullptr;
|
MetaData::Equip* gun_meta = nullptr;
|
||||||
|
MetaData::Equip* meta = nullptr;
|
||||||
|
|
||||||
void Check();
|
|
||||||
void Done();
|
void Done();
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user