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->dead) {
|
||||||
if (obstacle->meta->i->damage_dia() > 0.01f &&
|
if (obstacle->meta->i->damage_dia() > 0.01f &&
|
||||||
obstacle->meta->i->damage() > 0.01f) {
|
obstacle->meta->i->damage() > 0.01f) {
|
||||||
obstacle->Explosion(this);
|
obstacle->Explosion();
|
||||||
}
|
}
|
||||||
room->ScatterDrop(obstacle->pos, obstacle->meta->i->drop());
|
room->ScatterDrop(obstacle->pos, obstacle->meta->i->drop());
|
||||||
}
|
}
|
||||||
|
@ -245,8 +245,8 @@ const int GUN_SLOT2 = 2;
|
|||||||
const int FRAG_SLOT = 3;
|
const int FRAG_SLOT = 3;
|
||||||
const int SMOKE_SLOT = 4;
|
const int SMOKE_SLOT = 4;
|
||||||
|
|
||||||
const int MAP_HEIGHT = 1536;
|
const int MAP_HEIGHT = 2560;
|
||||||
const int MAP_WIDTH = 1536;
|
const int MAP_WIDTH = 2560;
|
||||||
const int MAP_CELL_WIDTH = 64 * 8;
|
const int MAP_CELL_WIDTH = 64 * 8;
|
||||||
const int MAP_GRID_WIDTH = 64;
|
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_);
|
auto& tuple = a8::FastAppend(explosions_);
|
||||||
std::get<0>(tuple) = bullet->player;
|
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);
|
p.set_item_id(item_id);
|
||||||
TypeConvert::ToPb(bomb_pos, p.mutable_pos());
|
TypeConvert::ToPb(bomb_pos, p.mutable_pos());
|
||||||
p.set_player_id(bullet->player->entity_uniid);
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
int explosion_idx = explosions_.size() - 1;
|
int explosion_idx = explosions_.size() - 1;
|
||||||
@ -103,28 +103,7 @@ void FrameEvent::AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
#endif
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrameEvent::AddSmoke(Bullet* bullet, int item_id, a8::Vec2 pos)
|
void FrameEvent::AddSmoke(Bullet* bullet, int item_id, a8::Vec2 pos)
|
||||||
@ -242,4 +221,10 @@ void FrameEvent::Clear()
|
|||||||
if (!dead_objs_.empty()) {
|
if (!dead_objs_.empty()) {
|
||||||
dead_objs_.clear();
|
dead_objs_.clear();
|
||||||
}
|
}
|
||||||
|
if (!add_buffs_.empty()) {
|
||||||
|
add_buffs_.clear();
|
||||||
|
}
|
||||||
|
if (!remove_buffs_.empty()) {
|
||||||
|
remove_buffs_.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,16 +5,19 @@
|
|||||||
class Bullet;
|
class Bullet;
|
||||||
class Human;
|
class Human;
|
||||||
class Buff;
|
class Buff;
|
||||||
|
class Room;
|
||||||
struct FrameEvent
|
struct FrameEvent
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
Room* room = nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void AddAirDrop(int appear_time, int box_id, a8::Vec2 box_pos);
|
void AddAirDrop(int appear_time, int box_id, a8::Vec2 box_pos);
|
||||||
void AddEmote(Human* hum, int emote_id);
|
void AddEmote(Human* hum, int emote_id);
|
||||||
void AddShot(Human* hum);
|
void AddShot(Human* hum);
|
||||||
void AddBullet(Human* hum, a8::Vec2 born_pos, a8::Vec2 dir, float fly_distance);
|
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 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 AddDead(Human* hum);
|
||||||
void AddRevive(Human* hum);
|
void AddRevive(Human* hum);
|
||||||
void AddBuff(Human* hum, Buff* buff);
|
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);
|
Obstacle* obstacle = room->CreateObstacle(phase->param1.GetInt(), pos.x, pos.y);
|
||||||
if (obstacle) {
|
if (obstacle) {
|
||||||
obstacle->master_id = entity_uniid;
|
obstacle->master_id = entity_uniid;
|
||||||
|
room->xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * 5,
|
||||||
|
a8::XParams(),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
|
||||||
|
},
|
||||||
|
&obstacle->xtimer_attacher.timer_list_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
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;
|
float old_rad = self_collider_->rad;
|
||||||
if (self_collider_) {
|
if (self_collider_) {
|
||||||
@ -195,7 +195,7 @@ void Obstacle::Explosion(Bullet* bullet)
|
|||||||
}//end for
|
}//end for
|
||||||
}
|
}
|
||||||
a8::Vec2 bomb_pos = pos;
|
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) {
|
for (auto& target : objects) {
|
||||||
switch (target->entity_type) {
|
switch (target->entity_type) {
|
||||||
case ET_Player:
|
case ET_Player:
|
||||||
|
@ -44,7 +44,7 @@ class Obstacle : public Entity
|
|||||||
virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override;
|
virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override;
|
||||||
virtual void GetAabbBox(AabbCollider& aabb_box) override;
|
virtual void GetAabbBox(AabbCollider& aabb_box) override;
|
||||||
virtual void GetCircleBox(CircleCollider& circle_box) override;
|
virtual void GetCircleBox(CircleCollider& circle_box) override;
|
||||||
void Explosion(Bullet* bullet);
|
void Explosion();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CircleCollider* self_collider_ = nullptr;
|
CircleCollider* self_collider_ = nullptr;
|
||||||
|
@ -38,6 +38,7 @@ void Room::Init()
|
|||||||
{
|
{
|
||||||
xtimer.Init(RoomXGetTickCount, this, 100, 100);
|
xtimer.Init(RoomXGetTickCount, this, 100, 100);
|
||||||
xtimer_attacher.xtimer = &xtimer;
|
xtimer_attacher.xtimer = &xtimer;
|
||||||
|
frame_event.room = this;
|
||||||
grid_service.Init(MAP_WIDTH, MAP_HEIGHT, MAP_CELL_WIDTH * 8);
|
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);
|
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 int32 item_id = 1; //配置表id
|
||||||
optional MFVec2 pos = 2; //位置
|
optional MFVec2 pos = 2; //位置
|
||||||
optional int32 player_id = 3; //玩家id
|
|
||||||
optional int32 effect = 4 [default = 0]; //爆照效果 0:普通爆照 1:核爆炸
|
optional int32 effect = 4 [default = 0]; //爆照效果 0:普通爆照 1:核爆炸
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user