完成ai基础逻辑
This commit is contained in:
parent
f84d35b8e6
commit
2f06ee35c5
@ -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_;
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
};
|
||||
|
@ -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_;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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_;
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user