From a1a027b0c81efa8353bf1dd5bf63137773ea6062 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 7 Dec 2022 09:41:11 +0800 Subject: [PATCH] 1 --- server/gameserver/android_agent.cc | 39 ++++++++++++++++++++++++++++++ server/gameserver/android_agent.h | 1 + server/gameserver/base_agent.cc | 1 + 3 files changed, 41 insertions(+) diff --git a/server/gameserver/android_agent.cc b/server/gameserver/android_agent.cc index d979e686..e85472bd 100644 --- a/server/gameserver/android_agent.cc +++ b/server/gameserver/android_agent.cc @@ -148,3 +148,42 @@ behaviac::EBTStatus AndroidAgent::DoAttack() status_ = behaviac::BT_RUNNING; return status_; } + +behaviac::EBTStatus AndroidAgent::DoPursuit() +{ + if (status_ == behaviac::BT_RUNNING) { + return status_runing_cb_(); + } + Human* enemy = GetOwner()->room->FindEnemy(GetOwner()->AsHuman()); + if (!enemy) { + return behaviac::BT_FAILURE; + } + + a8::Vec2 dir = enemy->GetPos() - GetOwner()->GetPos(); + dir.Rotate((10 + rand() % 360)/ 180.0f); + dir.Normalize(); + GetOwner()->SetMoveDir(dir); + GetOwner()->SetAttackDir(dir); + bool shot_ok = false; + a8::Vec2 shot_dir = dir; + GetOwner()->Shot(shot_dir, shot_ok, 0, 0); + + long long last_frameno = GetOwner()->room->GetFrameNo(); + status_runing_cb_ = + [this, last_frameno] () + { + if (GetOwner()->room->GetFrameNo() - last_frameno > SERVER_FRAME_RATE * 3) { + status_ = behaviac::BT_SUCCESS; + return behaviac::BT_SUCCESS; + } else { + bool shot_ok = false; + a8::Vec2 shot_dir = GetOwner()->GetAttackDir(); + GetOwner()->Shot(shot_dir, shot_ok, 0, 0); + + return behaviac::BT_RUNNING; + } + }; + + status_ = behaviac::BT_RUNNING; + return status_; +} diff --git a/server/gameserver/android_agent.h b/server/gameserver/android_agent.h index 43213b1e..dc5cfa5f 100644 --- a/server/gameserver/android_agent.h +++ b/server/gameserver/android_agent.h @@ -18,6 +18,7 @@ public: behaviac::EBTStatus DoRandomWalk(); behaviac::EBTStatus DoRandomShot(); behaviac::EBTStatus DoAttack(); + behaviac::EBTStatus DoPursuit(); private: Android* owner_ = nullptr; diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index 75b8dd45..9aa88f84 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -2,6 +2,7 @@ #include "base_agent.h" #include "room.h" +#include "creature.h" BaseAgent::BaseAgent():behaviac::Agent() {