完成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 void Update(int delta_time);
|
||||||
virtual float GetAttackRate() { return 0;};
|
virtual float GetAttackRate() { return 0;};
|
||||||
virtual void Reset() {};
|
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();
|
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 ~AndroidAI() override;
|
||||||
virtual void Update(int delta_time) override;
|
virtual void Update(int delta_time) override;
|
||||||
float GetAttackRate();
|
float GetAttackRate();
|
||||||
|
void SetAiLevel(int ai_level);
|
||||||
|
void SetAiMode(int ai_mode);
|
||||||
|
int GetAiLevel();
|
||||||
|
int GetAiMode();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void DefaultAi();
|
void DefaultAi();
|
||||||
@ -38,6 +42,9 @@ private:
|
|||||||
int GetAttackTimes();
|
int GetAttackTimes();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
int ai_level_ = 0;
|
||||||
|
int ai_mode_ = 0;
|
||||||
|
|
||||||
OldAiData* old_ai_data_ = nullptr;
|
OldAiData* old_ai_data_ = nullptr;
|
||||||
|
|
||||||
MetaData::AI* ai_meta = nullptr;
|
MetaData::AI* ai_meta = nullptr;
|
||||||
|
@ -29,8 +29,8 @@ void Android::Initialize()
|
|||||||
if (room->GetRoomMode() == kZombieMode) {
|
if (room->GetRoomMode() == kZombieMode) {
|
||||||
ai = new ZombieModeAI;
|
ai = new ZombieModeAI;
|
||||||
ai->owner = this;
|
ai->owner = this;
|
||||||
ai->SetAiLevel(8);
|
((ZombieModeAI*)ai)->SetAiLevel(8);
|
||||||
ai->SetAiMode(kHumanAiMode);
|
((ZombieModeAI*)ai)->SetAiMode(kHumanAiMode);
|
||||||
} else {
|
} else {
|
||||||
ai = new AndroidAI;
|
ai = new AndroidAI;
|
||||||
ai->owner = this;
|
ai->owner = this;
|
||||||
@ -93,7 +93,9 @@ void Android::GiveEquip()
|
|||||||
void Android::SetAiLevel(int ai_level)
|
void Android::SetAiLevel(int ai_level)
|
||||||
{
|
{
|
||||||
if (ai) {
|
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()
|
void HeroAI::UpdateAI()
|
||||||
{
|
{
|
||||||
Hero* hero = (Hero*)owner;
|
Hero* hero = (Hero*)owner;
|
||||||
if (!ai_meta && GetAiLevel() != 0) {
|
|
||||||
ai_meta = MetaMgr::Instance()->GetAndroidAI(GetAiLevel(), 0);
|
|
||||||
if (!ai_meta) {
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
++node_->exec_frame_num;
|
++node_->exec_frame_num;
|
||||||
hero->shot_hold = false;
|
hero->shot_hold = false;
|
||||||
switch (node_->main_state) {
|
switch (node_->main_state) {
|
||||||
@ -385,9 +379,11 @@ void HeroAI::ChangeToStateAI(HeroState_e to_state)
|
|||||||
|
|
||||||
Creature* HeroAI::GetTarget()
|
Creature* HeroAI::GetTarget()
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
if (GetAiLevel() <= 1) {
|
if (GetAiLevel() <= 1) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
Hero* myself = (Hero*)owner;
|
Hero* myself = (Hero*)owner;
|
||||||
if (myself->room->GetGasData().gas_mode == GasInactive) {
|
if (myself->room->GetGasData().gas_mode == GasInactive) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -32,7 +32,9 @@ void Hero::Initialize()
|
|||||||
RecalcSelfCollider();
|
RecalcSelfCollider();
|
||||||
ai = new HeroAI;
|
ai = new HeroAI;
|
||||||
ai->owner = this;
|
ai->owner = this;
|
||||||
|
#if 0
|
||||||
ai->SetAiLevel(8);
|
ai->SetAiLevel(8);
|
||||||
|
#endif
|
||||||
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(meta->i->default_weapon());
|
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(meta->i->default_weapon());
|
||||||
if (weapon_meta) {
|
if (weapon_meta) {
|
||||||
weapons[GUN_SLOT1].weapon_idx = GUN_SLOT1;
|
weapons[GUN_SLOT1].weapon_idx = GUN_SLOT1;
|
||||||
@ -180,9 +182,6 @@ void Hero::GetHitAabbBox(AabbCollider& aabb_box)
|
|||||||
|
|
||||||
void Hero::SetAiLevel(int ai_level)
|
void Hero::SetAiLevel(int ai_level)
|
||||||
{
|
{
|
||||||
if (ai) {
|
|
||||||
ai->SetAiLevel(ai_level);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hero::DetachFromMaster()
|
void Hero::DetachFromMaster()
|
||||||
|
@ -1690,6 +1690,9 @@ void Human::_UpdateMove(int speed)
|
|||||||
|
|
||||||
void Human::ChangeToRace(RaceType_e race, int level)
|
void Human::ChangeToRace(RaceType_e race, int level)
|
||||||
{
|
{
|
||||||
|
#if 1
|
||||||
|
abort();
|
||||||
|
#endif
|
||||||
if (race != kHumanRace &&
|
if (race != kHumanRace &&
|
||||||
race != kZombieRace) {
|
race != kZombieRace) {
|
||||||
abort();
|
abort();
|
||||||
@ -1697,11 +1700,13 @@ void Human::ChangeToRace(RaceType_e race, int level)
|
|||||||
if (race_ != race && IsAndroid()) {
|
if (race_ != race && IsAndroid()) {
|
||||||
Android* android = (Android*)this;
|
Android* android = (Android*)this;
|
||||||
android->ai->Reset();
|
android->ai->Reset();
|
||||||
|
#if 0
|
||||||
if (race == kHumanRace) {
|
if (race == kHumanRace) {
|
||||||
android->ai->SetAiMode(kHumanAiMode);
|
android->ai->SetAiMode(kHumanAiMode);
|
||||||
} else if (race == kZombieRace) {
|
} else if (race == kZombieRace) {
|
||||||
android->ai->SetAiMode(kZombieAiMode);
|
android->ai->SetAiMode(kZombieAiMode);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
race_ = race;
|
race_ = race;
|
||||||
level_ = level;
|
level_ = level;
|
||||||
|
@ -693,8 +693,10 @@ private:
|
|||||||
item.i = &meta;
|
item.i = &meta;
|
||||||
item.Init();
|
item.Init();
|
||||||
ai_hash[item.i->id()] = &item;
|
ai_hash[item.i->id()] = &item;
|
||||||
|
if (item.i->ai_kind() == kAI_Android) {
|
||||||
android_ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item;
|
android_ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (auto& meta : text_meta_list) {
|
for (auto& meta : text_meta_list) {
|
||||||
text_hash[meta.textid()] = meta.text();
|
text_hash[meta.textid()] = meta.text();
|
||||||
|
@ -503,3 +503,23 @@ int ZombieModeAI::GetAttackTimes()
|
|||||||
return 0;
|
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 Update(int delta_time) override;
|
||||||
virtual void Reset() override;
|
virtual void Reset() override;
|
||||||
float GetAttackRate();
|
float GetAttackRate();
|
||||||
|
void SetAiLevel(int ai_level);
|
||||||
|
void SetAiMode(int ai_mode);
|
||||||
|
int GetAiLevel();
|
||||||
|
int GetAiMode();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void UpdateAI();
|
void UpdateAI();
|
||||||
@ -32,5 +36,8 @@ private:
|
|||||||
int GetAttackTimes();
|
int GetAttackTimes();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
int ai_level_ = 0;
|
||||||
|
int ai_mode_ = 0;
|
||||||
|
|
||||||
ZombieAINode* node_ = nullptr;
|
ZombieAINode* node_ = nullptr;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user