添加延迟掉落
This commit is contained in:
parent
807925f7af
commit
25aa362f46
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user