1
This commit is contained in:
parent
5e61db6e30
commit
cc22f58811
@ -196,7 +196,8 @@ enum SkillTarget_e
|
|||||||
kST_EnemyGroup = 7,
|
kST_EnemyGroup = 7,
|
||||||
kST_EnemyAndObject = 8,
|
kST_EnemyAndObject = 8,
|
||||||
kST_EnemyAndSelf = 9,
|
kST_EnemyAndSelf = 9,
|
||||||
kST_SingleEnemyAndSelf = 10
|
kST_SingleEnemyAndSelf = 10,
|
||||||
|
kST_SpecDir = 11
|
||||||
};
|
};
|
||||||
|
|
||||||
enum VirtualWeapon_e
|
enum VirtualWeapon_e
|
||||||
|
@ -464,7 +464,7 @@ void Creature::ResetSkill()
|
|||||||
{
|
{
|
||||||
curr_skill_ = nullptr;
|
curr_skill_ = nullptr;
|
||||||
curr_skill_phase = 0;
|
curr_skill_phase = 0;
|
||||||
skill_dir = a8::Vec2();
|
skill_dir_ = a8::Vec2();
|
||||||
skill_target_pos_ = a8::Vec2();
|
skill_target_pos_ = a8::Vec2();
|
||||||
skill_param1 = 0.0f;
|
skill_param1 = 0.0f;
|
||||||
playing_skill = false;
|
playing_skill = false;
|
||||||
@ -499,14 +499,34 @@ void Creature::ProcSkillPhase(MetaData::SkillPhase* phase)
|
|||||||
break;
|
break;
|
||||||
case kSkill_Shot:
|
case kSkill_Shot:
|
||||||
{
|
{
|
||||||
Entity* entity = room->GetEntityByUniId(skill_target_id_);
|
|
||||||
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(phase->param1.GetInt());
|
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(phase->param1.GetInt());
|
||||||
if (weapon_meta && entity) {
|
if (weapon_meta) {
|
||||||
float target_distance = entity->GetPos().Distance(GetPos());
|
|
||||||
MetaData::EquipUpgrade* weapon_upgrade_meta =
|
MetaData::EquipUpgrade* weapon_upgrade_meta =
|
||||||
MetaMgr::Instance()->GetEquipUpgrade(weapon_meta->i->id());
|
MetaMgr::Instance()->GetEquipUpgrade(weapon_meta->i->id());
|
||||||
MetaData::Equip* bullet_meta =
|
MetaData::Equip* bullet_meta =
|
||||||
MetaMgr::Instance()->GetEquip(weapon_meta->i->use_bullet());
|
MetaMgr::Instance()->GetEquip(weapon_meta->i->use_bullet());
|
||||||
|
if (CurrentSkill()->meta->i->skill_target() == kST_SpecDir) {
|
||||||
|
float target_distance = 5;
|
||||||
|
if (bullet_meta && target_distance > 0.00001f) {
|
||||||
|
a8::Vec2 old_attack_dir = attack_dir;
|
||||||
|
attack_dir = skill_dir_;
|
||||||
|
attack_dir.Normalize();
|
||||||
|
InternalShot
|
||||||
|
(
|
||||||
|
this,
|
||||||
|
weapon_meta,
|
||||||
|
weapon_upgrade_meta,
|
||||||
|
bullet_meta,
|
||||||
|
1,
|
||||||
|
CurrentSkill() ? CurrentSkill()->meta->i->skill_id() : 0,
|
||||||
|
target_distance,
|
||||||
|
false);
|
||||||
|
attack_dir = old_attack_dir;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Entity* entity = room->GetEntityByUniId(skill_target_id_);
|
||||||
|
if (entity) {
|
||||||
|
float target_distance = entity->GetPos().Distance(GetPos());
|
||||||
if (bullet_meta && target_distance > 0.00001f) {
|
if (bullet_meta && target_distance > 0.00001f) {
|
||||||
a8::Vec2 old_attack_dir = attack_dir;
|
a8::Vec2 old_attack_dir = attack_dir;
|
||||||
attack_dir = entity->GetPos() - GetPos();
|
attack_dir = entity->GetPos() - GetPos();
|
||||||
@ -525,6 +545,8 @@ void Creature::ProcSkillPhase(MetaData::SkillPhase* phase)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case kSkill_Pull:
|
case kSkill_Pull:
|
||||||
{
|
{
|
||||||
@ -637,7 +659,7 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
|
|||||||
} else {
|
} else {
|
||||||
move_dir = entity->GetPos() - GetPos();
|
move_dir = entity->GetPos() - GetPos();
|
||||||
move_dir.Normalize();
|
move_dir.Normalize();
|
||||||
skill_dir = move_dir;
|
skill_dir_ = move_dir;
|
||||||
skill_target_pos_ = GetPos() + move_dir * (target_distance - buff->meta->param3);
|
skill_target_pos_ = GetPos() + move_dir * (target_distance - buff->meta->param3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ private:
|
|||||||
std::array<Buff*, kBET_End> buff_effect_ = {};
|
std::array<Buff*, kBET_End> buff_effect_ = {};
|
||||||
std::list<Buff> buff_list_;
|
std::list<Buff> buff_list_;
|
||||||
|
|
||||||
a8::Vec2 skill_dir;
|
a8::Vec2 skill_dir_;
|
||||||
float skill_param1 = 0;
|
float skill_param1 = 0;
|
||||||
bool playing_skill = false;
|
bool playing_skill = false;
|
||||||
size_t curr_skill_phase = 0;
|
size_t curr_skill_phase = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user