This commit is contained in:
aozhiwei 2019-04-22 13:45:48 +08:00
parent 4e3f00bc68
commit bdf403485b
2 changed files with 48 additions and 40 deletions

View File

@ -404,25 +404,27 @@ void Player::UpdateJump()
{ {
if (a8::HasBitFlag(status, HS_Fly)) { if (a8::HasBitFlag(status, HS_Fly)) {
DoJump(); DoJump();
room->xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * 3, for (size_t i = 0; i < 4; ++i){
a8::XParams() room->xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE / 10,
.SetSender(this), a8::XParams()
[] (const a8::XParams& param) .SetSender(this),
{ [] (const a8::XParams& param)
Human* hum = (Human*)param.sender.GetUserData(); {
hum->room->TouchHumanList( Human* hum = (Human*)param.sender.GetUserData();
a8::XParams() hum->room->TouchHumanList(
.SetSender(hum), a8::XParams()
[] (Human* hum, a8::XParams& param) -> bool .SetSender(hum),
{ [] (Human* hum, a8::XParams& param) -> bool
if (a8::HasBitFlag(hum->status, HS_Fly)) { {
hum->DoJump(); if (a8::HasBitFlag(hum->status, HS_Fly) && hum->entity_subtype != EST_Player) {
return false; hum->DoJump();
} return false;
return true; }
}); return true;
}, });
&xtimer_attacher.timer_list_); },
&xtimer_attacher.timer_list_);
}
} }
jump = false; jump = false;
} }

View File

@ -368,6 +368,12 @@ void Room::CollisionDetection(Entity* sender, int detection_flags, std::vector<E
if (sender == pair.second) { if (sender == pair.second) {
continue; continue;
} }
#if 1
if (std::abs(sender->pos.x - pair.second->pos.x) > 1000 ||
std::abs(sender->pos.y - pair.second->pos.y) > 1000){
continue;
}
#endif
if (a8::HasBitFlag(detection_flags, ET_Player) && pair.second->entity_type == ET_Player) { if (a8::HasBitFlag(detection_flags, ET_Player) && pair.second->entity_type == ET_Player) {
if (sender->entity_type == ET_Bullet) { if (sender->entity_type == ET_Bullet) {
Bullet* bullet = (Bullet*)sender; Bullet* bullet = (Bullet*)sender;
@ -814,27 +820,27 @@ void Room::UpdateGas()
gas_data.gas_start_frameno = frame_no; gas_data.gas_start_frameno = frame_no;
ShuaPlane(); ShuaPlane();
RoomMgr::Instance()->RemoveFromInactiveRoomHash(room_uuid); RoomMgr::Instance()->RemoveFromInactiveRoomHash(room_uuid);
#if 1 for (size_t i = 1; i < 7; ++i) {
xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * 3, xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * 3 * i,
a8::XParams() a8::XParams()
.SetSender(this), .SetSender(this),
[] (const a8::XParams& param) [] (const a8::XParams& param)
{ {
Room* room = (Room*)param.sender.GetUserData(); Room* room = (Room*)param.sender.GetUserData();
room->TouchHumanList( room->TouchHumanList(
a8::XParams() a8::XParams()
.SetSender(room), .SetSender(room),
[] (Human* hum, a8::XParams& param) -> bool [] (Human* hum, a8::XParams& param) -> bool
{ {
if (a8::HasBitFlag(hum->status, HS_Fly)) { if (a8::HasBitFlag(hum->status, HS_Fly) && hum->entity_subtype != EST_Player) {
hum->DoJump(); hum->DoJump();
return false; return false;
} }
return true; return true;
}); });
}, },
&xtimer_attacher.timer_list_); &xtimer_attacher.timer_list_);
#endif }
} }
} }
break; break;