1
This commit is contained in:
parent
c0bf8c6732
commit
ba5229b31e
@ -339,7 +339,7 @@ void Creature::DoSkill(int skill_id, int target_id, const a8::Vec2& target_pos)
|
|||||||
if (CanUseSkill(skill_id)) {
|
if (CanUseSkill(skill_id)) {
|
||||||
ResetSkill();
|
ResetSkill();
|
||||||
playing_skill = true;
|
playing_skill = true;
|
||||||
last_use_skill_frameno_ = room->GetFrameNo();
|
CurrentSkill()->last_use_frameno = room->GetFrameNo();
|
||||||
if (skill_meta_->i->skill_target() == kST_Self
|
if (skill_meta_->i->skill_target() == kST_Self
|
||||||
) {
|
) {
|
||||||
skill_target_id_ = GetEntityUniId();
|
skill_target_id_ = GetEntityUniId();
|
||||||
@ -391,7 +391,7 @@ void Creature::UpdateSkill()
|
|||||||
if (skill_meta_) {
|
if (skill_meta_) {
|
||||||
if (curr_skill_phase < skill_meta_->phases.size()) {
|
if (curr_skill_phase < skill_meta_->phases.size()) {
|
||||||
MetaData::SkillPhase* phase = &skill_meta_->phases[curr_skill_phase];
|
MetaData::SkillPhase* phase = &skill_meta_->phases[curr_skill_phase];
|
||||||
if (phase->time_offset >= (int)((room->GetFrameNo() - last_use_skill_frameno_) * FRAME_RATE_MS)) {
|
if (phase->time_offset >= CurrentSkill()->GetLeftTime()) {
|
||||||
ProcSkillPhase(phase);
|
ProcSkillPhase(phase);
|
||||||
++curr_skill_phase;
|
++curr_skill_phase;
|
||||||
}
|
}
|
||||||
@ -455,3 +455,13 @@ void Creature::ProcSkillPhase(MetaData::SkillPhase* phase)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MetaData::SkillPhase* Creature::GetCurrSkillPhase()
|
||||||
|
{
|
||||||
|
return curr_skill_phase < skill_meta_->phases.size() ? &skill_meta_->phases[curr_skill_phase] : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
Skill* Creature::CurrentSkill()
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
@ -51,19 +51,21 @@ class Creature : public MoveableEntity
|
|||||||
virtual bool CanUseSkill(int skill_id);
|
virtual bool CanUseSkill(int skill_id);
|
||||||
void DoSkill(int skill_id, int target_id, const a8::Vec2& target_pos);
|
void DoSkill(int skill_id, int target_id, const a8::Vec2& target_pos);
|
||||||
void ResetSkill();
|
void ResetSkill();
|
||||||
|
Skill* CurrentSkill();
|
||||||
|
MetaData::SkillPhase* GetCurrSkillPhase();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
size_t curr_skill_phase = 0;
|
|
||||||
a8::Vec2 skill_dir;
|
a8::Vec2 skill_dir;
|
||||||
float skill_param1 = 0;
|
float skill_param1 = 0;
|
||||||
bool playing_skill = false;
|
bool playing_skill = false;
|
||||||
int skill_target_id_ = 0;
|
int skill_target_id_ = 0;
|
||||||
a8::Vec2 skill_target_pos_;
|
a8::Vec2 skill_target_pos_;
|
||||||
|
|
||||||
|
#if 0
|
||||||
long long last_use_skill_frameno_ = 0;
|
long long last_use_skill_frameno_ = 0;
|
||||||
|
#endif
|
||||||
a8::XTimerAttacher skill_xtimer_attacher_;
|
a8::XTimerAttacher skill_xtimer_attacher_;
|
||||||
MetaData::Skill* skill_meta_ = nullptr;
|
MetaData::Skill* skill_meta_ = nullptr;
|
||||||
std::map<int, Skill*> skill_hash_;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -82,5 +84,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_;
|
||||||
|
|
||||||
|
size_t curr_skill_phase = 0;
|
||||||
|
std::map<int, Skill*> skill_hash_;
|
||||||
std::map<MetaData::Skill*, xtimer_list*> passive_skill_metas_;
|
std::map<MetaData::Skill*, xtimer_list*> passive_skill_metas_;
|
||||||
};
|
};
|
||||||
|
@ -2908,11 +2908,6 @@ Skin* Human::GetSkinByIdx(int idx)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
MetaData::Skill* Human::CurrentSkillMeta()
|
|
||||||
{
|
|
||||||
return skill_meta_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Human::TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type)
|
void Human::TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type)
|
||||||
{
|
{
|
||||||
if (!target->IsEntityType(ET_Player)) {
|
if (!target->IsEntityType(ET_Player)) {
|
||||||
@ -2984,16 +2979,17 @@ void Human::AddBuffPostProc(Creature* caster, Buff* buff)
|
|||||||
break;
|
break;
|
||||||
case kBET_TurnOver:
|
case kBET_TurnOver:
|
||||||
{
|
{
|
||||||
if (curr_skill_phase < skill_meta_->phases.size()) {
|
MetaData::SkillPhase* phase = GetCurrSkillPhase();
|
||||||
MetaData::SkillPhase* phase = &skill_meta_->phases[curr_skill_phase];
|
#if 0
|
||||||
if (phase->time_offset >= (int)((room->GetFrameNo() - last_use_skill_frameno_) * FRAME_RATE_MS)) {
|
if (phase &&
|
||||||
if (HasBuffEffect(kBET_Car)) {
|
phase->time_offset >= (int)((room->GetFrameNo() - last_use_skill_frameno_) * FRAME_RATE_MS)) {
|
||||||
_UpdateMove(phase->param1.GetDouble() * 1.5);
|
if (HasBuffEffect(kBET_Car)) {
|
||||||
} else {
|
_UpdateMove(phase->param1.GetDouble() * 1.5);
|
||||||
_UpdateMove(phase->param1);
|
} else {
|
||||||
}
|
_UpdateMove(phase->param1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case kBET_Camouflage:
|
case kBET_Camouflage:
|
||||||
|
@ -194,7 +194,6 @@ class Human : public Creature
|
|||||||
void DoJump();
|
void DoJump();
|
||||||
virtual bool CanUseSkill(int skill_id) override;
|
virtual bool CanUseSkill(int skill_id) override;
|
||||||
virtual int SelectSkillId();
|
virtual int SelectSkillId();
|
||||||
MetaData::Skill* CurrentSkillMeta();
|
|
||||||
void DoGetOn(int obj_uniid);
|
void DoGetOn(int obj_uniid);
|
||||||
void DoGetDown();
|
void DoGetDown();
|
||||||
void FindLocation();
|
void FindLocation();
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "room.h"
|
#include "room.h"
|
||||||
#include "metamgr.h"
|
#include "metamgr.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
|
#include "skill.h"
|
||||||
|
|
||||||
const int SHUA_RANGE = 580;
|
const int SHUA_RANGE = 580;
|
||||||
|
|
||||||
@ -191,8 +192,8 @@ void ZombieModeAI::UpdateAttack()
|
|||||||
float distance = myself->GetPos().Distance(node_->target->GetPos());
|
float distance = myself->GetPos().Distance(node_->target->GetPos());
|
||||||
if (distance > GetAttackRange()) {
|
if (distance > GetAttackRange()) {
|
||||||
if (myself->CanUseSkill(myself->SelectSkillId()) &&
|
if (myself->CanUseSkill(myself->SelectSkillId()) &&
|
||||||
myself->CurrentSkillMeta()->i->skill_id() != TURN_OVER_SKILL_ID &&
|
myself->CurrentSkill()->meta->i->skill_id() != TURN_OVER_SKILL_ID &&
|
||||||
distance < myself->CurrentSkillMeta()->i->skill_distance()) {
|
distance < myself->CurrentSkill()->meta->i->skill_distance()) {
|
||||||
DoSkill();
|
DoSkill();
|
||||||
} else if (node_->ai_meta->i->pursuit_radius() <= 0) {
|
} else if (node_->ai_meta->i->pursuit_radius() <= 0) {
|
||||||
//站桩
|
//站桩
|
||||||
|
Loading…
x
Reference in New Issue
Block a user