This commit is contained in:
aozhiwei 2020-07-14 15:24:53 +08:00
parent 3f0a482ea2
commit 9c7bcc4db0
3 changed files with 63 additions and 9 deletions

View File

@ -10,18 +10,25 @@
const int SHUA_RANGE = 580;
enum ShotType_e
{
kShotNone = 0,
kShotClick = 1,
kShotHold = 2,
};
/*
ai可切换/()
ai级别
1: ()
2: param1: param2:
3: param1:
4: () param1:
5: param1: param2:
6: param1:
7: param1:
8: param1:
2:
3:
4: ()
5:
6:
7:
8:
*/
AndroidNewAI::~AndroidNewAI()
@ -459,10 +466,44 @@ void AndroidNewAI::UpdateThinking()
void AndroidNewAI::UpdateAttack()
{
Human* myself = (Human*)owner;
if (node_.target->dead) {
ChangeToStateNewAI(ASE_Thinking);
return;
}
float distance = myself->GetPos().Distance(node_.target->GetPos());
if (distance > GetAttackRange()) {
if (ai_meta->i->pursuit_radius() <= 0) {
//站桩
ChangeToStateNewAI(ASE_Idle);
} else {
if (distance < ai_meta->i->pursuit_radius()) {
//追击
ChangeToStateNewAI(ASE_Pursuit);
} else {
ChangeToStateNewAI(ASE_Thinking);
}
}
return;
}
//攻击逻辑
switch (ai_meta->i->attack_type()) {
case kShotClick:
{
}
break;
case kShotHold:
{
}
break;
default:
{
ChangeToStateNewAI(ASE_Idle);
}
break;
}
}
void AndroidNewAI::UpdateRandomWalk()
@ -576,3 +617,14 @@ Human* AndroidNewAI::GetTarget()
});
return target;
}
float AndroidNewAI::GetAttackRange()
{
float attack_range = 0;
Human* myself = (Human*)owner;
if (myself->curr_weapon && myself->curr_weapon->meta) {
attack_range = myself->curr_weapon->meta->i->range();
}
attack_range = std::min(500.0f, attack_range);
return attack_range;
}

View File

@ -8,7 +8,8 @@ enum AndroidStateEx_e
ASE_Idle = 0,
ASE_Thinking = 1,
ASE_Attack = 2,
ASE_RandomWalk = 3
ASE_RandomWalk = 3,
ASE_Pursuit = 4
};
class AINode
@ -65,6 +66,7 @@ private:
void ChangeToStateNewAI(AndroidStateEx_e to_state);
Human* GetTarget();
float GetAttackRange();
private:
OldAiData old_ai_data_;

View File

@ -238,7 +238,7 @@ message KillPoint
message AI
{
optional int32 ai_level = 1;
optional int32 pursuit_distance = 2;
optional int32 pursuit_radius = 2;
optional int32 attack_interval = 3;
optional int32 attack_times = 4;
optional int32 attack_type = 5;