1
This commit is contained in:
parent
871a41749a
commit
3a41ec1f53
@ -74,5 +74,6 @@ A8_DECLARE_ENUM(HumanVirtualAttrType_e,
|
|||||||
kHVAT_DirectAtk = 1014,
|
kHVAT_DirectAtk = 1014,
|
||||||
kHVAT_Volume = 1015,
|
kHVAT_Volume = 1015,
|
||||||
kHVAT_FireRate = 1016,
|
kHVAT_FireRate = 1016,
|
||||||
|
kHVAT_BulletScale = 1017,
|
||||||
kHVAT_End
|
kHVAT_End
|
||||||
);
|
);
|
||||||
|
@ -36,6 +36,7 @@ class Bullet : public MoveableEntity, public IBullet
|
|||||||
bool ignore_original_dmg = false;
|
bool ignore_original_dmg = false;
|
||||||
std::function<void(Bullet*)> on_bullet_exit = nullptr;
|
std::function<void(Bullet*)> on_bullet_exit = nullptr;
|
||||||
int duration = 0;
|
int duration = 0;
|
||||||
|
std::shared_ptr<float> scale;
|
||||||
|
|
||||||
virtual ~Bullet() override;
|
virtual ~Bullet() override;
|
||||||
virtual void Initialize() override;
|
virtual void Initialize() override;
|
||||||
|
@ -95,7 +95,8 @@ void FrameEvent::AddBullet(int bullet_uniid,
|
|||||||
std::shared_ptr<std::set<int>> reporter_list,
|
std::shared_ptr<std::set<int>> reporter_list,
|
||||||
int shot_uniid,
|
int shot_uniid,
|
||||||
int force_player_id,
|
int force_player_id,
|
||||||
int duration)
|
int duration,
|
||||||
|
std::shared_ptr<float> scale)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
auto& tuple = a8::FastAppend(room->frame_event_data->bullets_);
|
auto& tuple = a8::FastAppend(room->frame_event_data->bullets_);
|
||||||
|
@ -29,7 +29,8 @@ public:
|
|||||||
std::shared_ptr<std::set<int>> reporter_list,
|
std::shared_ptr<std::set<int>> reporter_list,
|
||||||
int shot_uniid,
|
int shot_uniid,
|
||||||
int force_player_id = 0,
|
int force_player_id = 0,
|
||||||
int duration = 0);
|
int duration = 0,
|
||||||
|
std::shared_ptr<float> = nullptr);
|
||||||
void RemoveBullet(glm::vec3 pos, int bullet_uniid);
|
void RemoveBullet(glm::vec3 pos, int bullet_uniid);
|
||||||
void AddExplosion(Bullet* bullet, int item_id, Position bomb_pos);
|
void AddExplosion(Bullet* bullet, int item_id, Position bomb_pos);
|
||||||
void AddPlaySkill(CreatureWeakPtr& sender, int skill_id);
|
void AddPlaySkill(CreatureWeakPtr& sender, int skill_id);
|
||||||
|
@ -809,7 +809,8 @@ int Room::CreateBullet(Creature* sender,
|
|||||||
std::shared_ptr<std::set<int>> reporter_list,
|
std::shared_ptr<std::set<int>> reporter_list,
|
||||||
int shot_uniid,
|
int shot_uniid,
|
||||||
std::function<void(Bullet*)> on_bullet_exit,
|
std::function<void(Bullet*)> on_bullet_exit,
|
||||||
int duration)
|
int duration,
|
||||||
|
std::shared_ptr<float> scale)
|
||||||
{
|
{
|
||||||
int bullet_uniid = 0;
|
int bullet_uniid = 0;
|
||||||
if (grid_service->CanAdd(pos.x, pos.z)) {
|
if (grid_service->CanAdd(pos.x, pos.z)) {
|
||||||
|
@ -192,7 +192,8 @@ public:
|
|||||||
std::shared_ptr<std::set<int>> reporter_list,
|
std::shared_ptr<std::set<int>> reporter_list,
|
||||||
int shot_uniid,
|
int shot_uniid,
|
||||||
std::function<void(Bullet*)> on_bullet_exit,
|
std::function<void(Bullet*)> on_bullet_exit,
|
||||||
int duration);
|
int duration,
|
||||||
|
std::shared_ptr<float> scale);
|
||||||
Car* CreateCar(Human* driver,
|
Car* CreateCar(Human* driver,
|
||||||
int car_uniid,
|
int car_uniid,
|
||||||
const mt::Equip* meta,
|
const mt::Equip* meta,
|
||||||
|
@ -59,6 +59,7 @@ struct BulletInfo
|
|||||||
bool ignore_original_dmg = false;
|
bool ignore_original_dmg = false;
|
||||||
std::function<void(Bullet*)> on_bullet_exit;
|
std::function<void(Bullet*)> on_bullet_exit;
|
||||||
int duration = 0;
|
int duration = 0;
|
||||||
|
std::shared_ptr<float> scale;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void CalcGunMuzzlePosition(Creature* c,
|
static void CalcGunMuzzlePosition(Creature* c,
|
||||||
@ -286,7 +287,8 @@ static void InternalCreateBullet(BulletInfo& bullet_info)
|
|||||||
bullet_info.reporter_list,
|
bullet_info.reporter_list,
|
||||||
bullet_info.shot_uniid,
|
bullet_info.shot_uniid,
|
||||||
bullet_info.on_bullet_exit,
|
bullet_info.on_bullet_exit,
|
||||||
bullet_info.duration);
|
bullet_info.duration,
|
||||||
|
bullet_info.scale);
|
||||||
#ifdef MYDEBUG1
|
#ifdef MYDEBUG1
|
||||||
if (bullet_info.c.Get()->IsPlayer()) {
|
if (bullet_info.c.Get()->IsPlayer()) {
|
||||||
bullet_info.c.Get()->SendDebugMsg(a8::Format("CreateBullet id:%d",
|
bullet_info.c.Get()->SendDebugMsg(a8::Format("CreateBullet id:%d",
|
||||||
@ -330,7 +332,8 @@ static void InternalCreateBullet(BulletInfo& bullet_info)
|
|||||||
bullet_info.reporter_list,
|
bullet_info.reporter_list,
|
||||||
bullet_info.shot_uniid,
|
bullet_info.shot_uniid,
|
||||||
0,
|
0,
|
||||||
bullet_info.duration);
|
bullet_info.duration,
|
||||||
|
bullet_info.scale);
|
||||||
if (bullet_uniid && (bullet_info.trace_target_uniid || bullet_info.reporter_list)) {
|
if (bullet_uniid && (bullet_info.trace_target_uniid || bullet_info.reporter_list)) {
|
||||||
c->room->AddReportBullet(
|
c->room->AddReportBullet(
|
||||||
bullet_uniid
|
bullet_uniid
|
||||||
@ -550,6 +553,9 @@ void InternalShot(Creature* c,
|
|||||||
bullet_info.ignore_original_dmg = c->GetAbility()->GetSwitchTimes(kIgnoreOriginalDmg) > 0;
|
bullet_info.ignore_original_dmg = c->GetAbility()->GetSwitchTimes(kIgnoreOriginalDmg) > 0;
|
||||||
bullet_info.on_bullet_exit = on_bullet_exit;
|
bullet_info.on_bullet_exit = on_bullet_exit;
|
||||||
bullet_info.duration = duration;
|
bullet_info.duration = duration;
|
||||||
|
if (c->GetAbility()->HasAttr(kHVAT_BulletScale)) {
|
||||||
|
bullet_info.scale = std::make_shared<float>(1.0f + c->GetAbility()->GetAttr(kHVAT_BulletScale));
|
||||||
|
}
|
||||||
if (shot_animi && shot_animi->is_other) {
|
if (shot_animi && shot_animi->is_other) {
|
||||||
bullet_info.hand = shot_animi->GetShotHand(bulletIdx - 1);
|
bullet_info.hand = shot_animi->GetShotHand(bulletIdx - 1);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user