This commit is contained in:
aozhiwei 2023-11-07 17:44:07 +08:00
parent ba24a6ce2c
commit 2a5b0813ed
2 changed files with 54 additions and 0 deletions

View File

@ -400,6 +400,55 @@ behaviac::EBTStatus HeroAgent::SearchEnemy(float range)
return behaviac::BT_FAILURE;
}
void HeroAgent::SetBulletAngleOffset(int min_val, int max_val)
{
bullet_angle_offset_min_ = min_val;
bullet_angle_offset_max_ = max_val;
}
behaviac::EBTStatus HeroAgent::TrySearchEnemy(float range, int min_interval, int max_interval)
{
int rnd = a8::RandEx(min_interval, max_interval);
if ((owner_->room->GetFrameNo() - last_try_search_enemy_frameno_) * FRAME_RATE_MS <
rnd) {
return behaviac::BT_FAILURE;
}
last_try_search_enemy_frameno_ = owner_->room->GetFrameNo();
Creature* myself = owner_;
Creature* target = nullptr;
float last_distance = range + 1;
owner_->room->grid_service->TraverseCreatures
(owner_->room->GetRoomIdx(),
owner_->GetGridList(),
[myself, &last_distance, &target, range] (Creature* c, bool& stop)
{
if (!c->dead &&
!a8::HasBitFlag(c->status, CS_Disable) &&
!c->HasBuffEffect(kBET_Hide) &&
!c->HasBuffEffect(kBET_Invincible) &&
c->team_id != myself->team_id &&
!c->IsCar() &&
!myself->IsIgnoreTarget(c->GetUniId())) {
if (a8::HasBitFlag(myself->status, CS_DisableAttackAndroid) &&
c->IsAndroid()) {
} else {
float distance = c->GetPos().Distance2D2(myself->GetPos());
if (distance <= range) {
if (distance < last_distance) {
target = c;
last_distance = distance;
}
}
}
}
return true;
});
if (target) {
return behaviac::BT_SUCCESS;
}
return behaviac::BT_FAILURE;
}
behaviac::EBTStatus HeroAgent::CoIdle(int min_val, int max_val)
{
PRE_ENTER_COROUTINE();

View File

@ -87,10 +87,12 @@ public:
bool NewAttackerIsHuman();
bool SwitchToNewAttacker();
int GetReviveCount();
void SetBulletAngleOffset(int min_val, int max_val);
behaviac::EBTStatus RegisterEvents(behaviac::vector<BtEvent_e> events);
behaviac::EBTStatus ClearEvents();
behaviac::EBTStatus SearchEnemy(float range);
behaviac::EBTStatus TrySearchEnemy(float range, int min_interval, int max_interval);
behaviac::EBTStatus DebugOut(std::string msg, int arg0, int arg1, int arg2);
behaviac::EBTStatus RandomSafeZonePoint(int try_count, int step_len);
@ -150,4 +152,7 @@ private:
long long last_shot_frameno_ = 0;
long long last_useskill_frameno_ = 0;
std::map<int, int> dyn_hash_;
int bullet_angle_offset_min_ = 0;
int bullet_angle_offset_max_ = 0;
long long last_try_search_enemy_frameno_ = 0;
};