1
This commit is contained in:
parent
ab1a404ede
commit
af0efac2a5
@ -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());
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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:核爆炸
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user