完成ai基础逻辑

This commit is contained in:
aozhiwei 2021-07-22 11:54:06 +00:00
parent f84d35b8e6
commit 2f06ee35c5
11 changed files with 71 additions and 41 deletions

View File

@ -11,23 +11,3 @@ void AIComponent::Update(int delta_time)
{
}
void AIComponent::SetAiLevel(int ai_level)
{
ai_level_ = ai_level;
}
void AIComponent::SetAiMode(int ai_mode)
{
ai_mode_ = ai_mode;
}
int AIComponent::GetAiLevel()
{
return ai_level_;
}
int AIComponent::GetAiMode()
{
return ai_mode_;
}

View File

@ -22,13 +22,5 @@ class AIComponent
virtual void Update(int delta_time);
virtual float GetAttackRate() { return 0;};
virtual void Reset() {};
void SetAiLevel(int ai_level);
void SetAiMode(int ai_mode);
int GetAiLevel();
int GetAiMode();
private:
int ai_level_ = 0;
int ai_mode_ = 0;
};

View File

@ -631,3 +631,23 @@ int AndroidAI::GetAttackTimes()
return ai_meta->i->attack_times();
}
}
void AndroidAI::SetAiLevel(int ai_level)
{
ai_level_ = ai_level;
}
void AndroidAI::SetAiMode(int ai_mode)
{
ai_mode_ = ai_mode;
}
int AndroidAI::GetAiLevel()
{
return ai_level_;
}
int AndroidAI::GetAiMode()
{
return ai_mode_;
}

View File

@ -16,6 +16,10 @@ public:
virtual ~AndroidAI() override;
virtual void Update(int delta_time) override;
float GetAttackRate();
void SetAiLevel(int ai_level);
void SetAiMode(int ai_mode);
int GetAiLevel();
int GetAiMode();
private:
void DefaultAi();
@ -38,6 +42,9 @@ private:
int GetAttackTimes();
private:
int ai_level_ = 0;
int ai_mode_ = 0;
OldAiData* old_ai_data_ = nullptr;
MetaData::AI* ai_meta = nullptr;

View File

@ -29,8 +29,8 @@ void Android::Initialize()
if (room->GetRoomMode() == kZombieMode) {
ai = new ZombieModeAI;
ai->owner = this;
ai->SetAiLevel(8);
ai->SetAiMode(kHumanAiMode);
((ZombieModeAI*)ai)->SetAiLevel(8);
((ZombieModeAI*)ai)->SetAiMode(kHumanAiMode);
} else {
ai = new AndroidAI;
ai->owner = this;
@ -93,7 +93,9 @@ void Android::GiveEquip()
void Android::SetAiLevel(int ai_level)
{
if (ai) {
ai->SetAiLevel(ai_level);
if (room->GetRoomMode() == kChiJiMode) {
((Android*)ai)->SetAiLevel(ai_level);
}
}
}

View File

@ -75,12 +75,6 @@ float HeroAI::GetAttackRate()
void HeroAI::UpdateAI()
{
Hero* hero = (Hero*)owner;
if (!ai_meta && GetAiLevel() != 0) {
ai_meta = MetaMgr::Instance()->GetAndroidAI(GetAiLevel(), 0);
if (!ai_meta) {
abort();
}
}
++node_->exec_frame_num;
hero->shot_hold = false;
switch (node_->main_state) {
@ -385,9 +379,11 @@ void HeroAI::ChangeToStateAI(HeroState_e to_state)
Creature* HeroAI::GetTarget()
{
#if 0
if (GetAiLevel() <= 1) {
return nullptr;
}
#endif
Hero* myself = (Hero*)owner;
if (myself->room->GetGasData().gas_mode == GasInactive) {
return nullptr;

View File

@ -32,7 +32,9 @@ void Hero::Initialize()
RecalcSelfCollider();
ai = new HeroAI;
ai->owner = this;
#if 0
ai->SetAiLevel(8);
#endif
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(meta->i->default_weapon());
if (weapon_meta) {
weapons[GUN_SLOT1].weapon_idx = GUN_SLOT1;
@ -180,9 +182,6 @@ void Hero::GetHitAabbBox(AabbCollider& aabb_box)
void Hero::SetAiLevel(int ai_level)
{
if (ai) {
ai->SetAiLevel(ai_level);
}
}
void Hero::DetachFromMaster()

View File

@ -1690,6 +1690,9 @@ void Human::_UpdateMove(int speed)
void Human::ChangeToRace(RaceType_e race, int level)
{
#if 1
abort();
#endif
if (race != kHumanRace &&
race != kZombieRace) {
abort();
@ -1697,11 +1700,13 @@ void Human::ChangeToRace(RaceType_e race, int level)
if (race_ != race && IsAndroid()) {
Android* android = (Android*)this;
android->ai->Reset();
#if 0
if (race == kHumanRace) {
android->ai->SetAiMode(kHumanAiMode);
} else if (race == kZombieRace) {
android->ai->SetAiMode(kZombieAiMode);
}
#endif
}
race_ = race;
level_ = level;

View File

@ -693,7 +693,9 @@ private:
item.i = &meta;
item.Init();
ai_hash[item.i->id()] = &item;
android_ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item;
if (item.i->ai_kind() == kAI_Android) {
android_ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item;
}
}
for (auto& meta : text_meta_list) {

View File

@ -503,3 +503,23 @@ int ZombieModeAI::GetAttackTimes()
return 0;
}
}
void ZombieModeAI::SetAiLevel(int ai_level)
{
ai_level_ = ai_level;
}
void ZombieModeAI::SetAiMode(int ai_mode)
{
ai_mode_ = ai_mode;
}
int ZombieModeAI::GetAiLevel()
{
return ai_level_;
}
int ZombieModeAI::GetAiMode()
{
return ai_mode_;
}

View File

@ -14,6 +14,10 @@ public:
virtual void Update(int delta_time) override;
virtual void Reset() override;
float GetAttackRate();
void SetAiLevel(int ai_level);
void SetAiMode(int ai_mode);
int GetAiLevel();
int GetAiMode();
private:
void UpdateAI();
@ -32,5 +36,8 @@ private:
int GetAttackTimes();
private:
int ai_level_ = 0;
int ai_mode_ = 0;
ZombieAINode* node_ = nullptr;
};