This commit is contained in:
aozhiwei 2023-01-02 12:49:22 +08:00
parent 46bd001cfd
commit 413e8b769e
7 changed files with 19 additions and 26 deletions

View File

@ -14,22 +14,21 @@ void JumpToBuff::Activate()
float target_distance = entity->GetPos().Distance2D2(owner->GetPos()); float target_distance = entity->GetPos().Distance2D2(owner->GetPos());
if (target_distance <= 0.000001f) { if (target_distance <= 0.000001f) {
owner->SetPos(entity->GetPos()); owner->SetPos(entity->GetPos());
owner->skill_target_pos_ = entity->GetPos(); owner->target_pos = entity->GetPos();
} else { } else {
if (target_distance <= meta->_param3) { if (target_distance <= meta->_param3) {
owner->SetPos(entity->GetPos()); owner->SetPos(entity->GetPos());
owner->skill_target_pos_ = entity->GetPos(); owner->target_pos = entity->GetPos();
} else { } else {
glm::vec3 move_dir = owner->GetPos().CalcDir(entity->GetPos()); glm::vec3 move_dir = owner->GetPos().CalcDir(entity->GetPos());
GlmHelper::Normalize(move_dir); GlmHelper::Normalize(move_dir);
owner->SetMoveDir(move_dir); owner->SetMoveDir(move_dir);
owner->skill_dir_ = owner->GetMoveDir(); owner->skill_dir_ = owner->GetMoveDir();
owner->skill_target_pos_ = owner->GetPos(); owner->target_pos = owner->GetPos();
owner->skill_target_pos_.AddGlmVec3(owner->GetMoveDir() * (target_distance - meta->_param3)); owner->target_pos.AddGlmVec3(owner->GetMoveDir() * (target_distance - meta->_param3));
} }
} }
} }
owner->target_pos = owner->skill_target_pos_;
} }
void JumpToBuff::Deactivate() void JumpToBuff::Deactivate()

View File

@ -18,8 +18,7 @@ void UseSkillBuff::Activate()
skill->meta->skill_id(), skill->meta->skill_id(),
owner->GetUniId(), owner->GetUniId(),
owner->GetAttackDir(), owner->GetAttackDir(),
0, 0
owner->target_pos
); );
} }
} }

View File

@ -770,8 +770,8 @@ bool Creature::CanUseSkill(int skill_id)
void Creature::DoSkill(int skill_id, void Creature::DoSkill(int skill_id,
int target_id, int target_id,
const glm::vec3& skill_dir, const glm::vec3& skill_dir,
float skill_distance, float skill_distance
const Position& target_pos) )
{ {
Skill* skill = GetSkill(skill_id); Skill* skill = GetSkill(skill_id);
if (skill && CanUseSkill(skill_id)) { if (skill && CanUseSkill(skill_id)) {
@ -793,10 +793,9 @@ void Creature::DoSkill(int skill_id,
}, },
&xtimer_attacher); &xtimer_attacher);
} }
DoSkillPreProc(skill_id, target_id, target_pos); DoSkillPreProc(skill_id, target_id);
ResetSkill(); ResetSkill();
skill_target_id_ = target_id; skill_target_id_ = target_id;
skill_target_pos_ = target_pos;
skill_dir_ = skill_dir; skill_dir_ = skill_dir;
skill_distance_ = skill_distance; skill_distance_ = skill_distance;
curr_skill_ = skill; curr_skill_ = skill;
@ -829,7 +828,6 @@ void Creature::DoSkill(int skill_id,
if (entity && entity->IsCreature(room)) { if (entity && entity->IsCreature(room)) {
Creature* c = (Creature*)entity; Creature* c = (Creature*)entity;
std::set<Creature*> target_list; std::set<Creature*> target_list;
skill_target_pos_ = c->GetPos();
SelectSkillTargets(CurrentSkill(), c->GetPos(), target_list); SelectSkillTargets(CurrentSkill(), c->GetPos(), target_list);
if (!CurrentSkill()->meta->_phases.empty() && if (!CurrentSkill()->meta->_phases.empty() &&
CurrentSkill()->meta->_phases[0].time_offset <= 0) { CurrentSkill()->meta->_phases[0].time_offset <= 0) {
@ -863,7 +861,7 @@ void Creature::DoSkill(int skill_id,
RemoveBuffByEffectId(kBET_Camouflage); RemoveBuffByEffectId(kBET_Camouflage);
} }
GetTrigger()->UseSkill(skill); GetTrigger()->UseSkill(skill);
DoSkillPostProc(true, skill_id, target_id, target_pos); DoSkillPostProc(true, skill_id, target_id);
if (IsHuman()) { if (IsHuman()) {
++AsHuman()->stats.use_skill_times; ++AsHuman()->stats.use_skill_times;
} }
@ -879,11 +877,11 @@ void Creature::DoSkill(int skill_id,
} }
} }
void Creature::DoSkillPreProc(int skill_id, int target_id, const Position& target_pos) void Creature::DoSkillPreProc(int skill_id, int target_id)
{ {
} }
void Creature::DoSkillPostProc(bool used, int skill_id, int target_id, const Position& target_pos) void Creature::DoSkillPostProc(bool used, int skill_id, int target_id)
{ {
} }
@ -892,7 +890,6 @@ void Creature::ResetSkill()
curr_skill_ = nullptr; curr_skill_ = nullptr;
curr_skill_phase = 0; curr_skill_phase = 0;
skill_dir_ = GlmHelper::ZERO; skill_dir_ = GlmHelper::ZERO;
skill_target_pos_ = Position();
skill_param1 = 0.0f; skill_param1 = 0.0f;
playing_skill = false; playing_skill = false;
} }

View File

@ -173,8 +173,7 @@ class Creature : public MoveableEntity
void DoSkill(int skill_id, void DoSkill(int skill_id,
int target_id, int target_id,
const glm::vec3& skill_dir, const glm::vec3& skill_dir,
float skill_distance, float skill_distance
const Position& target_pos
); );
void ResetSkill(); void ResetSkill();
Skill* CurrentSkill(); Skill* CurrentSkill();
@ -297,8 +296,8 @@ protected:
private: private:
virtual void AddBuffPostProc(Creature* caster, Buff* buff); virtual void AddBuffPostProc(Creature* caster, Buff* buff);
virtual void DoSkillPreProc(int skill_id, int target_id, const Position& target_pos); virtual void DoSkillPreProc(int skill_id, int target_id);
virtual void DoSkillPostProc(bool used, int skill_id, int target_id, const Position& target_pos); virtual void DoSkillPostProc(bool used, int skill_id, int target_id);
void ProcSkillPhase(const mt::SkillPhase* phase); void ProcSkillPhase(const mt::SkillPhase* phase);
void TriggerOneObjectBuff(Skill* skill, Creature* target, BuffTriggerType_e trigger_type); void TriggerOneObjectBuff(Skill* skill, Creature* target, BuffTriggerType_e trigger_type);
@ -366,7 +365,6 @@ private:
size_t curr_skill_phase = 0; size_t curr_skill_phase = 0;
Skill* curr_skill_ = nullptr; Skill* curr_skill_ = nullptr;
int skill_target_id_ = 0; int skill_target_id_ = 0;
Position skill_target_pos_;
float skill_distance_ = 0.0f; float skill_distance_ = 0.0f;
std::map<int, std::shared_ptr<Skill>> skill_hash_; std::map<int, std::shared_ptr<Skill>> skill_hash_;
std::map<int, std::shared_ptr<Skill>> passive_skill_hash_; std::map<int, std::shared_ptr<Skill>> passive_skill_hash_;

View File

@ -2230,7 +2230,7 @@ void Human::DoGetOnWithCar(Car* car)
car->GetOn(this); car->GetOn(this);
} }
void Human::DoSkillPreProc(int skill_id, int target_id, const Position& target_pos) void Human::DoSkillPreProc(int skill_id, int target_ids)
{ {
if (action_type == AT_Reload || if (action_type == AT_Reload ||
action_type == AT_UseItem action_type == AT_UseItem
@ -2239,7 +2239,7 @@ void Human::DoSkillPreProc(int skill_id, int target_id, const Position& target_p
} }
} }
void Human::DoSkillPostProc(bool used, int skill_id, int target_id, const Position& target_pos) void Human::DoSkillPostProc(bool used, int skill_id, int target_id)
{ {
if (used) { if (used) {
++stats.skill_times; ++stats.skill_times;

View File

@ -432,8 +432,8 @@ private:
int real_killer_id, const std::string& real_killer_name); int real_killer_id, const std::string& real_killer_name);
virtual void AddBuffPostProc(Creature* caster, Buff* buff) override; virtual void AddBuffPostProc(Creature* caster, Buff* buff) override;
virtual void OnBuffRemove(Buff& buff) override; virtual void OnBuffRemove(Buff& buff) override;
virtual void DoSkillPreProc(int skill_id, int target_id, const Position& target_pos) override; virtual void DoSkillPreProc(int skill_id, int target_id) override;
virtual void DoSkillPostProc(bool used, int skill_id, int target_id, const Position& target_pos) override; virtual void DoSkillPostProc(bool used, int skill_id, int target_id) override;
void FillMFSettlement(cs::SMGameOver* msg, cs::MFSettlement* settlement); void FillMFSettlement(cs::SMGameOver* msg, cs::MFSettlement* settlement);
protected: protected:

View File

@ -552,7 +552,7 @@ void Player::UpdateSwitchSeat()
void Player::UpdateUseSkill() void Player::UpdateUseSkill()
{ {
DoSkill(use_skill_id, skill_target_id, skill_dir, skill_distance, Position()); DoSkill(use_skill_id, skill_target_id, skill_dir, skill_distance);
use_skill = false; use_skill = false;
} }