添加延迟掉落

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 "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();
airdrop->set_appear_time(appear_time);
airdrop->set_box_id(box_id);
TypeConvert::ToPb(box_pos, airdrop->mutable_pos());
for (auto& pos : pos_list) {
TypeConvert::ToPb(pos, airdrop->add_pos_list());
}
}
void FrameEvent::AddEmote(Human* hum, int emote_id)

View File

@ -12,7 +12,7 @@ public:
Room* room = nullptr;
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 AddShot(Human* hum);
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)
{
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;
air_drop->RandItems(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)

View File

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