This commit is contained in:
aozhiwei 2019-07-11 10:36:33 +08:00
parent ab1a404ede
commit af0efac2a5
9 changed files with 28 additions and 33 deletions

View File

@ -93,7 +93,7 @@ void Bullet::OnHit(std::set<Entity*>& objects)
if (obstacle->dead) {
if (obstacle->meta->i->damage_dia() > 0.01f &&
obstacle->meta->i->damage() > 0.01f) {
obstacle->Explosion(this);
obstacle->Explosion();
}
room->ScatterDrop(obstacle->pos, obstacle->meta->i->drop());
}

View File

@ -245,8 +245,8 @@ const int GUN_SLOT2 = 2;
const int FRAG_SLOT = 3;
const int SMOKE_SLOT = 4;
const int MAP_HEIGHT = 1536;
const int MAP_WIDTH = 1536;
const int MAP_HEIGHT = 2560;
const int MAP_WIDTH = 2560;
const int MAP_CELL_WIDTH = 64 * 8;
const int MAP_GRID_WIDTH = 64;

View File

@ -84,8 +84,9 @@ void FrameEvent::AddBullet(Human* hum, a8::Vec2 born_pos, a8::Vec2 dir, float fl
}
}
void FrameEvent::AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos)
void FrameEvent::AddExplosion(int item_id, a8::Vec2 bomb_pos, int effect)
{
#if 0
{
auto& tuple = a8::FastAppend(explosions_);
std::get<0>(tuple) = bullet->player;
@ -93,7 +94,6 @@ void FrameEvent::AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos)
p.set_item_id(item_id);
TypeConvert::ToPb(bomb_pos, p.mutable_pos());
p.set_player_id(bullet->player->entity_uniid);
}
{
int explosion_idx = explosions_.size() - 1;
@ -103,28 +103,7 @@ void FrameEvent::AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos)
}
}
}
}
void FrameEvent::AddExplosionEx(Human* sender, int item_id, a8::Vec2 bomb_pos, int effect)
{
{
auto& tuple = a8::FastAppend(explosions_);
std::get<0>(tuple) = sender;
auto& p = std::get<1>(tuple);
p.set_item_id(item_id);
TypeConvert::ToPb(bomb_pos, p.mutable_pos());
p.set_player_id(sender->entity_uniid);
p.set_effect(effect);
}
{
int explosion_idx = explosions_.size() - 1;
for (auto& cell : sender->grid_list) {
for (auto& hum : cell->human_list) {
hum->explosions_.push_back(explosion_idx);
}
}
}
#endif
}
void FrameEvent::AddSmoke(Bullet* bullet, int item_id, a8::Vec2 pos)
@ -242,4 +221,10 @@ void FrameEvent::Clear()
if (!dead_objs_.empty()) {
dead_objs_.clear();
}
if (!add_buffs_.empty()) {
add_buffs_.clear();
}
if (!remove_buffs_.empty()) {
remove_buffs_.clear();
}
}

View File

@ -5,16 +5,19 @@
class Bullet;
class Human;
class Buff;
class Room;
struct FrameEvent
{
public:
Room* room = nullptr;
public:
void AddAirDrop(int appear_time, int box_id, a8::Vec2 box_pos);
void AddEmote(Human* hum, int emote_id);
void AddShot(Human* hum);
void AddBullet(Human* hum, a8::Vec2 born_pos, a8::Vec2 dir, float fly_distance);
void AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos);
void AddExplosion(int item_id, a8::Vec2 bomb_pos, int effect);
void AddSmoke(Bullet* bullet, int item_id, a8::Vec2 pos);
void AddExplosionEx(Human* sender, int item_id, a8::Vec2 bomb_pos, int effect);
void AddDead(Human* hum);
void AddRevive(Human* hum);
void AddBuff(Human* hum, Buff* buff);

View File

@ -1733,6 +1733,13 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase)
Obstacle* obstacle = room->CreateObstacle(phase->param1.GetInt(), pos.x, pos.y);
if (obstacle) {
obstacle->master_id = entity_uniid;
room->xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * 5,
a8::XParams(),
[] (const a8::XParams& param)
{
},
&obstacle->xtimer_attacher.timer_list_);
}
}
break;

View File

@ -160,7 +160,7 @@ void Obstacle::GetCircleBox(CircleCollider& circle_box)
}
void Obstacle::Explosion(Bullet* bullet)
void Obstacle::Explosion()
{
float old_rad = self_collider_->rad;
if (self_collider_) {
@ -195,7 +195,7 @@ void Obstacle::Explosion(Bullet* bullet)
}//end for
}
a8::Vec2 bomb_pos = pos;
room->frame_event.AddExplosion(bullet, meta->i->thing_id(), bomb_pos);
room->frame_event.AddExplosion(meta->i->thing_id(), bomb_pos, 0);
for (auto& target : objects) {
switch (target->entity_type) {
case ET_Player:

View File

@ -44,7 +44,7 @@ class Obstacle : public Entity
virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override;
virtual void GetAabbBox(AabbCollider& aabb_box) override;
virtual void GetCircleBox(CircleCollider& circle_box) override;
void Explosion(Bullet* bullet);
void Explosion();
private:
CircleCollider* self_collider_ = nullptr;

View File

@ -38,6 +38,7 @@ void Room::Init()
{
xtimer.Init(RoomXGetTickCount, this, 100, 100);
xtimer_attacher.xtimer = &xtimer;
frame_event.room = this;
grid_service.Init(MAP_WIDTH, MAP_HEIGHT, MAP_CELL_WIDTH * 8);
map_service.Init(MAP_WIDTH / MAP_GRID_WIDTH, MAP_HEIGHT / MAP_GRID_WIDTH, MAP_GRID_WIDTH);

View File

@ -484,7 +484,6 @@ message MFExplosion
{
optional int32 item_id = 1; //id
optional MFVec2 pos = 2; //
optional int32 player_id = 3; //id
optional int32 effect = 4 [default = 0]; // 0 1:
}