This commit is contained in:
aozhiwei 2021-04-03 22:31:20 +08:00
parent 324aaadb0a
commit dbc74c3a04
5 changed files with 57 additions and 1 deletions

View File

@ -377,6 +377,7 @@ void Bullet::ProcPosionGasBomb(int delay_time)
task->bomb_pos = GetPos(); task->bomb_pos = GetPos();
task->gun_meta = gun_meta; task->gun_meta = gun_meta;
task->meta = meta; task->meta = meta;
task->Initialzie();
room->xtimer.AddRepeatTimerAndAttach room->xtimer.AddRepeatTimerAndAttach
(SERVER_FRAME_RATE / 2, (SERVER_FRAME_RATE / 2,
@ -417,6 +418,7 @@ void Bullet::ProcMolotorCocktailBomb(int delay_time)
task->bomb_pos = GetPos(); task->bomb_pos = GetPos();
task->gun_meta = gun_meta; task->gun_meta = gun_meta;
task->meta = meta; task->meta = meta;
task->Initialzie();
room->xtimer.AddRepeatTimerAndAttach room->xtimer.AddRepeatTimerAndAttach
(SERVER_FRAME_RATE / 2, (SERVER_FRAME_RATE / 2,

View File

@ -5,10 +5,26 @@
#include "player.h" #include "player.h"
#include "metadata.h" #include "metadata.h"
void MolotorCocktailMiTask::Initialzie()
{
sender.Get()->room->grid_service->GetAllCellsByXy
(
sender.Get()->room,
bomb_pos.x,
bomb_pos.y,
grid_list
);
}
void MolotorCocktailMiTask::Check() void MolotorCocktailMiTask::Check()
{ {
} }
void MolotorCocktailMiTask::Done() void MolotorCocktailMiTask::Done()
{ {
for (auto& pair : targets) {
if (pair.second.Get()) {
}
}
} }

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "microtask.h" #include "microtask.h"
#include "gridcell.h"
namespace MetaData namespace MetaData
{ {
@ -18,7 +19,10 @@ class MolotorCocktailMiTask : public MicroTask
CreatureWeakPtr sender; CreatureWeakPtr sender;
MetaData::Equip* gun_meta = nullptr; MetaData::Equip* gun_meta = nullptr;
MetaData::Equip* meta = nullptr; MetaData::Equip* meta = nullptr;
std::map<int, CreatureWeakPtr> targets;
std::set<GridCell*> grid_list;
void Initialzie();
void Check(); void Check();
void Done(); void Done();
}; };

View File

@ -5,12 +5,42 @@
#include "player.h" #include "player.h"
#include "metadata.h" #include "metadata.h"
void PosionGasMiTask::Initialzie()
{
sender.Get()->room->grid_service->GetAllCellsByXy
(
sender.Get()->room,
bomb_pos.x,
bomb_pos.y,
grid_list
);
}
void PosionGasMiTask::Check() void PosionGasMiTask::Check()
{ {
if (sender.Get()) {
std::set<Creature*> objects;
sender.Get()->room->grid_service->TouchCreatures
(
sender.Get()->room->GetRoomIdx(),
grid_list,
[this, &objects] (Creature* c, bool& stop)
{
if (sender.Get()->IsProperTarget(c)) {
if (bomb_pos.Distance(c->GetPos()) < meta->i->explosion_range()) {
objects.insert(c);
}
}
}
);
}
} }
void PosionGasMiTask::Done() void PosionGasMiTask::Done()
{ {
for (auto& pair : targets) {
if (pair.second.Get()) {
}
}
} }

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "microtask.h" #include "microtask.h"
#include "gridcell.h"
namespace MetaData namespace MetaData
{ {
@ -18,7 +19,10 @@ class PosionGasMiTask : public MicroTask
CreatureWeakPtr sender; CreatureWeakPtr sender;
MetaData::Equip* gun_meta = nullptr; MetaData::Equip* gun_meta = nullptr;
MetaData::Equip* meta = nullptr; MetaData::Equip* meta = nullptr;
std::map<int, CreatureWeakPtr> targets;
std::set<GridCell*> grid_list;
void Initialzie();
void Check(); void Check();
void Done(); void Done();
}; };