添加延迟掉落

This commit is contained in:
aozhiwei 2019-07-24 11:45:37 +08:00
parent 807925f7af
commit 25aa362f46
4 changed files with 39 additions and 8 deletions

View File

@ -7,12 +7,13 @@
#include "typeconvert.h" #include "typeconvert.h"
#include "room.h" #include "room.h"
void FrameEvent::AddAirDrop(int appear_time, int box_id, a8::Vec2 box_pos) void FrameEvent::AddAirDrop(int appear_time, std::vector<a8::Vec2>& pos_list)
{ {
cs::MFAirDrop* airdrop = airdrops_.Add(); cs::MFAirDrop* airdrop = airdrops_.Add();
airdrop->set_appear_time(appear_time); airdrop->set_appear_time(appear_time);
airdrop->set_box_id(box_id); for (auto& pos : pos_list) {
TypeConvert::ToPb(box_pos, airdrop->mutable_pos()); TypeConvert::ToPb(pos, airdrop->add_pos_list());
}
} }
void FrameEvent::AddEmote(Human* hum, int emote_id) void FrameEvent::AddEmote(Human* hum, int emote_id)

View File

@ -12,7 +12,7 @@ public:
Room* room = nullptr; Room* room = nullptr;
public: public:
void AddAirDrop(int appear_time, int box_id, a8::Vec2 box_pos); void AddAirDrop(int appear_time, std::vector<a8::Vec2>& pos_list);
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, int bullet_id, int bullet_lv, a8::Vec2 born_pos, a8::Vec2 dir, void AddBullet(Human* hum, int bullet_id, int bullet_lv, a8::Vec2 born_pos, a8::Vec2 dir,

View File

@ -1135,12 +1135,43 @@ void Room::InitAirDrop()
void Room::AirDrop(MetaData::AirDrop* air_drop) void Room::AirDrop(MetaData::AirDrop* air_drop)
{ {
frame_event.AddAirDrop(air_drop->i->appear_time(), 0, a8::Vec2()); auto gen_func =
[] (const a8::XParams& param) {
Room* room = (Room*)param.sender.GetUserData();
MetaData::AirDrop* air_drop = (MetaData::AirDrop*)param.param1.GetUserData();
std::vector<std::tuple<int, int>> drop_items;
air_drop->RandItems(drop_items);
for (auto& tuple : drop_items) {
room->GenDrop(air_drop, std::get<1>(tuple), std::get<0>(tuple));
}
};
std::vector<a8::Vec2> pos_list;
std::vector<std::tuple<int, int>> drop_items; std::vector<std::tuple<int, int>> drop_items;
air_drop->RandItems(drop_items); air_drop->RandItems(drop_items);
for (auto& tuple : drop_items) { for (auto& tuple : drop_items) {
GenDrop(air_drop, std::get<1>(tuple), std::get<0>(tuple)); int drop_id = std::get<1>(tuple);
int airdrop_point_id = std::get<0>(tuple);
if (airdrop_hash_.find(airdrop_point_id) == airdrop_hash_.end()) {
MetaData::MapTplThing* point_meta = MetaMgr::Instance()->GetMapAirDropPoint(map_tpl_name,
airdrop_point_id);
MetaData::Drop* drop_meta = MetaMgr::Instance()->GetDrop(drop_id);
if (point_meta && drop_meta) {
pos_list.push_back(a8::Vec2(
point_meta->i->x(),
point_meta->i->y()
)
);
}
}
} }
frame_event.AddAirDrop(air_drop->i->appear_time(), pos_list);
xtimer.AddDeadLineTimerAndAttach(air_drop->i->appear_time() / kFRAME_RATE_MS,
a8::XParams()
.SetSender(this)
.SetParam1(air_drop),
gen_func,
&xtimer_attacher.timer_list_);
} }
void Room::GenDrop(MetaData::AirDrop* air_drop, int drop_id, int airdrop_point_id) void Room::GenDrop(MetaData::AirDrop* air_drop, int drop_id, int airdrop_point_id)

View File

@ -560,8 +560,7 @@ message MFPlayerBattlingStats
message MFAirDrop message MFAirDrop
{ {
optional int32 appear_time = 1; //() optional int32 appear_time = 1; //()
optional int32 box_id = 2; //id repeated MFVec2 pos_list = 3; //
optional MFVec2 pos = 3; //
} }
//buff //buff