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)) { 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;
}

View File

@ -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_;
}; };

View File

@ -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:

View File

@ -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();

View File

@ -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) {
//站桩 //站桩