添加掉落动画处理

This commit is contained in:
aozhiwei 2021-04-02 11:05:53 +08:00
parent 537230305a
commit ecb9f1d55b
5 changed files with 50 additions and 25 deletions

View File

@ -43,8 +43,12 @@ void Loot::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data)
cs::MFLootFull* p = full_data->mutable_union_obj_5();
p->set_obj_uniid(GetEntityUniId());
TypeConvert::ToPb(GetPos(), p->mutable_pos());
TypeConvert::ToPb(born_pos, p->mutable_born_pos());
p->set_item_id(item_id);
p->set_count(count);
p->set_item_level(item_level);
if (show_anim && room->GetFrameNo() <= create_frame_no + 1) {
p->set_show_anim(true);
}
}

View File

@ -21,6 +21,9 @@ class Loot : public RoomEntity
int bullet_num = 0;
float param1 = 0.0f;
float param2 = 0.0f;
a8::Vec2 born_pos;
bool show_anim = false;
long long create_frame_no = 0;
virtual ~Loot() override;
virtual void Initialize() override;

View File

@ -442,14 +442,21 @@ void Room::ScatterDrop(a8::Vec2 center, int drop_id)
for (auto& item : drop_items) {
a8::Vec2 dir = a8::Vec2::UP;
dir.Rotate(a8::RandAngle());
DropItem(center + dir * (5 + rand() % 50),
std::get<0>(item), std::get<1>(item),
std::get<1>(item));
DropItemEx(center,
center + dir * (5 + rand() % 50),
std::get<0>(item), std::get<1>(item),
std::get<1>(item),
true);
}
}
}
void Room::DropItem(a8::Vec2 pos, int item_id, int item_count, int item_lv)
{
DropItemEx(pos, pos, item_id, item_count, item_lv, false);
}
void Room::DropItemEx(a8::Vec2 born_pos, a8::Vec2 pos, int item_id, int item_count, int item_lv, bool show_anim)
{
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(item_id);
if (equip_meta && equip_meta->i->group_num() > 0 && item_count > 0) {
@ -464,7 +471,7 @@ void Room::DropItem(a8::Vec2 pos, int item_id, int item_count, int item_lv)
dir.Rotate(a8::RandAngle());
pos = pos + dir * (25 + rand() % 50);
}
CreateLoot(item_id, pos, drop_num, item_lv);
CreateLootEx(item_id, born_pos, pos, drop_num, item_lv, show_anim);
total_count -= drop_num;
}
}
@ -484,6 +491,11 @@ RoomObstacle* Room::CreateObstacle(int id, float x, float y)
}
int Room::CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv)
{
return CreateLootEx(equip_id, pos, pos, count, equip_lv, false);
}
int Room::CreateLootEx(int equip_id, a8::Vec2 born_pos, a8::Vec2 pos, int count, int equip_lv, bool show_anim)
{
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(equip_id);
if (equip_meta) {
@ -491,6 +503,9 @@ int Room::CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv)
entity->room = this;
entity->meta = equip_meta;
entity->SetPos(pos);
entity->born_pos = born_pos;
entity->show_anim = show_anim;
entity->create_frame_no = GetFrameNo();
#if 1
{
if (entity->GetX() >= map_meta_->i->map_width()) {

View File

@ -100,8 +100,10 @@ public:
void ScatterDrop(a8::Vec2 center, int drop_id);
void DropItem(a8::Vec2 pos, int item_id, int item_count, int item_lv);
void DropItemEx(a8::Vec2 born_pos, a8::Vec2 pos, int item_id, int item_count, int item_lv, bool show_anim);
int CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv);
int CreateLootEx(int equip_id, a8::Vec2 born_pos, a8::Vec2 pos, int count, int equip_lv, bool show_anim);
void CreateBullet(Creature* sender,
MetaData::Equip* weapon_meta,
MetaData::EquipUpgrade* weapon_upgrade_meta,

View File

@ -319,7 +319,7 @@ message MFLootFull
optional int32 obj_uniid = 1; //id
optional MFVec2 pos = 2; //
optional MFVec2 born_pos = 3; //
optional bool drop_at_thisframe = 4; //
optional bool show_anim = 4; //
optional int32 item_id = 6; //id
optional int32 count = 7; //
@ -842,31 +842,32 @@ message CMMove
{
optional int32 seq = 1; //
optional MFVec2 move_dir = 24; //-
optional MFVec2 attack_dir = 20; //()
optional MFVec2 move_dir = 2; //-
optional MFVec2 attack_dir = 3; //()
optional bool shot_start = 6; //-
optional bool shot_hold = 7; //-
optional bool reload = 8; //
optional float fly_distance = 12; //()
optional bool shot_start = 4; //-
optional bool shot_hold = 5; //-
optional bool reload = 6; //
optional float fly_distance = 7; //()
optional int32 select_weapon = 10; //()
optional int32 drop_weapon = 11; //
optional int32 select_weapon = 8; //()
optional int32 drop_weapon = 9; //
optional bool cancel_action = 26; //(使)
optional int32 use_item_idx = 22; //使0-16
optional int32 use_item_id = 4; //使 (id目前只有伪装)
optional int32 use_scope = 25; //使 0-4
optional bool cancel_action = 10; //(使)
optional int32 use_item_idx = 11; //使0-16
optional int32 use_item_id = 12; //使 (id目前只有伪装)
optional int32 use_scope = 13; //使 0-4
optional bool interaction = 9; //
repeated int32 interaction_objids = 23; //id列表
optional bool aiming = 2; //
optional bool interaction = 14; //
repeated int32 interaction_objids = 15; //id列表
optional bool aiming = 16; //
optional bool use_skill = 29; //使
optional int32 skill_id = 37; //id
optional int32 skill_target_id = 21; //()
optional MFVec2 skill_dir = 34; //
optional float skill_param1 = 35; //
optional bool use_skill = 17; //使
optional int32 skill_id = 18; //id
optional int32 skill_target_id = 19; //()
optional MFVec2 skill_dir = 20; //
optional float skill_distance = 21; //
optional float skill_param1 = 22; //
optional bool spectate = 30; //