This commit is contained in:
aozhiwei 2020-07-27 13:51:57 +08:00
parent e8ae2042fa
commit eb7c60e2ce
6 changed files with 43 additions and 10 deletions

View File

@ -487,7 +487,13 @@ void Human::Shot(a8::Vec2& target_dir, bool& shot_ok)
} }
bullet_dir.Rotate(bullet_angle / 180.0f); bullet_dir.Rotate(bullet_angle / 180.0f);
room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance); room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance);
room->CreateBullet(this, curr_weapon, bullet_born_pos, bullet_dir, fly_distance); room->CreateBullet(this,
curr_weapon->meta,
curr_weapon->GetUpgradeMeta(),
curr_weapon->bullet_meta,
bullet_born_pos,
bullet_dir,
fly_distance);
} }
--curr_weapon->ammo; --curr_weapon->ammo;
int slot_id = curr_weapon->meta->i->_inventory_slot(); int slot_id = curr_weapon->meta->i->_inventory_slot();
@ -581,7 +587,14 @@ void Human::TankShot(a8::Vec2& target_dir)
bullet_dir.Rotate(bullet_angle / 180.0f); bullet_dir.Rotate(bullet_angle / 180.0f);
room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance); room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance);
if (room->BattleStarted()) { if (room->BattleStarted()) {
room->CreateBullet(this, &tank_weapon, bullet_born_pos, bullet_dir, fly_distance, true); room->CreateBullet(this,
tank_weapon.meta,
tank_weapon.GetUpgradeMeta(),
tank_weapon.bullet_meta,
bullet_born_pos,
bullet_dir,
fly_distance,
true);
} }
} }
--tank_weapon.ammo; --tank_weapon.ammo;

View File

@ -383,7 +383,13 @@ void Player::Shot()
} }
room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance); room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance);
if (room->BattleStarted()) { if (room->BattleStarted()) {
room->CreateBullet(this, curr_weapon, bullet_born_pos, bullet_dir, fly_distance); room->CreateBullet(this,
curr_weapon->meta,
curr_weapon->GetUpgradeMeta(),
curr_weapon->bullet_meta,
bullet_born_pos,
bullet_dir,
fly_distance);
} }
} }
} else { } else {

View File

@ -483,16 +483,22 @@ int Room::CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv)
} }
} }
void Room::CreateBullet(Human* hum, Weapon* weapon, void Room::CreateBullet(Human* hum,
a8::Vec2 pos, a8::Vec2 dir, float fly_distance, bool is_tank_skin) MetaData::Equip* weapon_meta,
MetaData::EquipUpgrade* weapon_upgrade_meta,
MetaData::Equip* bullet_meta,
a8::Vec2 pos,
a8::Vec2 dir,
float fly_distance,
bool is_tank_skin)
{ {
if (grid_service->CanAdd(pos.x, pos.y)) { if (grid_service->CanAdd(pos.x, pos.y)) {
Bullet* bullet = EntityFactory::Instance()->MakeBullet(AllocUniid()); Bullet* bullet = EntityFactory::Instance()->MakeBullet(AllocUniid());
bullet->player = hum; bullet->player = hum;
bullet->room = this; bullet->room = this;
bullet->gun_meta = weapon->meta; bullet->gun_meta = weapon_meta;
bullet->gun_upgrade_meta = weapon->GetUpgradeMeta(); bullet->gun_upgrade_meta = weapon_upgrade_meta;
bullet->meta = MetaMgr::Instance()->GetEquip(weapon->meta->i->use_bullet()); bullet->meta = bullet_meta;
bullet->SetPos(pos); bullet->SetPos(pos);
bullet->dir = dir; bullet->dir = dir;
bullet->born_pos = pos; bullet->born_pos = pos;

View File

@ -89,8 +89,14 @@ public:
void DropItem(a8::Vec2 pos, int item_id, int item_count, int item_lv); void DropItem(a8::Vec2 pos, int item_id, int item_count, int item_lv);
int CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv); int CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv);
void CreateBullet(Human* hum, Weapon* weapon, void CreateBullet(Human* hum,
a8::Vec2 pos, a8::Vec2 dir, float fly_distance, bool is_tank_skin = false); MetaData::Equip* weapon_meta,
MetaData::EquipUpgrade* weapon_upgrade_meta,
MetaData::Equip* bullet_meta,
a8::Vec2 pos,
a8::Vec2 dir,
float fly_distance,
bool is_tank_skin = false);
void OnHumanDie(Human* hum); void OnHumanDie(Human* hum);
void OnHumanRevive(Human* hum); void OnHumanRevive(Human* hum);

View File

@ -14,6 +14,7 @@ void Weapon::ToPB(cs::MFWeapon* pb_obj)
void Weapon::Recalc() void Weapon::Recalc()
{ {
upgrade_meta = MetaMgr::Instance()->GetEquipUpgrade(weapon_id); upgrade_meta = MetaMgr::Instance()->GetEquipUpgrade(weapon_id);
bullet_meta = MetaMgr::Instance()->GetEquip(meta->i->use_bullet());
} }
int Weapon::GetClipVolume() int Weapon::GetClipVolume()

View File

@ -38,6 +38,7 @@ struct Weapon
int weapon_lv = 0; int weapon_lv = 0;
int ammo = 0; int ammo = 0;
MetaData::Equip* meta = nullptr; MetaData::Equip* meta = nullptr;
MetaData::Equip* bullet_meta = nullptr;
void ToPB(cs::MFWeapon* pb_obj); void ToPB(cs::MFWeapon* pb_obj);
void Recalc(); void Recalc();