This commit is contained in:
aozhiwei 2021-03-18 18:50:08 +08:00
parent c0bf8c6732
commit ba5229b31e
5 changed files with 30 additions and 20 deletions

View File

@ -339,7 +339,7 @@ void Creature::DoSkill(int skill_id, int target_id, const a8::Vec2& target_pos)
if (CanUseSkill(skill_id)) {
ResetSkill();
playing_skill = true;
last_use_skill_frameno_ = room->GetFrameNo();
CurrentSkill()->last_use_frameno = room->GetFrameNo();
if (skill_meta_->i->skill_target() == kST_Self
) {
skill_target_id_ = GetEntityUniId();
@ -391,7 +391,7 @@ void Creature::UpdateSkill()
if (skill_meta_) {
if (curr_skill_phase < skill_meta_->phases.size()) {
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);
++curr_skill_phase;
}
@ -455,3 +455,13 @@ void Creature::ProcSkillPhase(MetaData::SkillPhase* phase)
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;
}

View File

@ -51,19 +51,21 @@ class Creature : public MoveableEntity
virtual bool CanUseSkill(int skill_id);
void DoSkill(int skill_id, int target_id, const a8::Vec2& target_pos);
void ResetSkill();
Skill* CurrentSkill();
MetaData::SkillPhase* GetCurrSkillPhase();
protected:
size_t curr_skill_phase = 0;
a8::Vec2 skill_dir;
float skill_param1 = 0;
bool playing_skill = false;
int skill_target_id_ = 0;
a8::Vec2 skill_target_pos_;
#if 0
long long last_use_skill_frameno_ = 0;
#endif
a8::XTimerAttacher skill_xtimer_attacher_;
MetaData::Skill* skill_meta_ = nullptr;
std::map<int, Skill*> skill_hash_;
private:
@ -82,5 +84,7 @@ private:
std::array<Buff*, kBET_End> buff_effect_ = {};
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_;
};

View File

@ -2908,11 +2908,6 @@ Skin* Human::GetSkinByIdx(int idx)
return nullptr;
}
MetaData::Skill* Human::CurrentSkillMeta()
{
return skill_meta_;
}
void Human::TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type)
{
if (!target->IsEntityType(ET_Player)) {
@ -2984,16 +2979,17 @@ void Human::AddBuffPostProc(Creature* caster, Buff* buff)
break;
case kBET_TurnOver:
{
if (curr_skill_phase < skill_meta_->phases.size()) {
MetaData::SkillPhase* phase = &skill_meta_->phases[curr_skill_phase];
if (phase->time_offset >= (int)((room->GetFrameNo() - last_use_skill_frameno_) * FRAME_RATE_MS)) {
if (HasBuffEffect(kBET_Car)) {
_UpdateMove(phase->param1.GetDouble() * 1.5);
} else {
_UpdateMove(phase->param1);
}
MetaData::SkillPhase* phase = GetCurrSkillPhase();
#if 0
if (phase &&
phase->time_offset >= (int)((room->GetFrameNo() - last_use_skill_frameno_) * FRAME_RATE_MS)) {
if (HasBuffEffect(kBET_Car)) {
_UpdateMove(phase->param1.GetDouble() * 1.5);
} else {
_UpdateMove(phase->param1);
}
}
#endif
}
break;
case kBET_Camouflage:

View File

@ -194,7 +194,6 @@ class Human : public Creature
void DoJump();
virtual bool CanUseSkill(int skill_id) override;
virtual int SelectSkillId();
MetaData::Skill* CurrentSkillMeta();
void DoGetOn(int obj_uniid);
void DoGetDown();
void FindLocation();

View File

@ -7,6 +7,7 @@
#include "room.h"
#include "metamgr.h"
#include "player.h"
#include "skill.h"
const int SHUA_RANGE = 580;
@ -191,8 +192,8 @@ void ZombieModeAI::UpdateAttack()
float distance = myself->GetPos().Distance(node_->target->GetPos());
if (distance > GetAttackRange()) {
if (myself->CanUseSkill(myself->SelectSkillId()) &&
myself->CurrentSkillMeta()->i->skill_id() != TURN_OVER_SKILL_ID &&
distance < myself->CurrentSkillMeta()->i->skill_distance()) {
myself->CurrentSkill()->meta->i->skill_id() != TURN_OVER_SKILL_ID &&
distance < myself->CurrentSkill()->meta->i->skill_distance()) {
DoSkill();
} else if (node_->ai_meta->i->pursuit_radius() <= 0) {
//站桩