1
This commit is contained in:
parent
ba24a6ce2c
commit
2a5b0813ed
@ -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();
|
||||
|
@ -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;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user