This commit is contained in:
aozhiwei 2022-12-09 11:29:48 +08:00
parent ede5a65bfd
commit f032cedb82
2 changed files with 15 additions and 7 deletions

View File

@ -24,7 +24,16 @@ bool BaseAgent::IsGameOver()
void BaseAgent::Exec() void BaseAgent::Exec()
{ {
last_exec_status_ = f8::BtMgr::Instance()->BtExec(this); behaviac::EBTStatus status = f8::BtMgr::Instance()->BtExec(this);
if (status == behaviac::BT_RUNNING && event_cb_) {
bool has_event = false;
event_cb_(has_event);
if (has_event) {
status_= behaviac::BT_INVALID;
runing_cb_ = nullptr;
event_cb_(has_event);
}
}
} }
bool BaseAgent::HasTarget(float range) bool BaseAgent::HasTarget(float range)
@ -38,7 +47,7 @@ behaviac::EBTStatus BaseAgent::DoRunningCb()
if (status_ != behaviac::BT_RUNNING) { if (status_ != behaviac::BT_RUNNING) {
abort(); abort();
} }
status_ = status_runing_cb_(); status_ = runing_cb_();
#ifdef DEBUG #ifdef DEBUG
if ((GetOwner()->room->GetFrameNo() - status_frameno_) % SERVER_FRAME_RATE == 0 || if ((GetOwner()->room->GetFrameNo() - status_frameno_) % SERVER_FRAME_RATE == 0 ||
last_status_ != status_) { last_status_ != status_) {
@ -47,7 +56,7 @@ behaviac::EBTStatus BaseAgent::DoRunningCb()
} }
#endif #endif
if (status_ != behaviac::BT_RUNNING) { if (status_ != behaviac::BT_RUNNING) {
status_runing_cb_ = nullptr; runing_cb_ = nullptr;
} }
return status_; return status_;
} }
@ -60,7 +69,7 @@ behaviac::EBTStatus BaseAgent::StartCoroutine(std::function<behaviac::EBTStatus(
status_frameno_ = GetOwner()->room->GetFrameNo(); status_frameno_ = GetOwner()->room->GetFrameNo();
status_name_ = name; status_name_ = name;
#endif #endif
status_runing_cb_ = std::move(cb); runing_cb_ = std::move(cb);
status_ = behaviac::BT_RUNNING; status_ = behaviac::BT_RUNNING;
return status_; return status_;
} }

View File

@ -14,7 +14,6 @@ public:
BEHAVIAC_DECLARE_AGENTTYPE(BaseAgent, behaviac::Agent) BEHAVIAC_DECLARE_AGENTTYPE(BaseAgent, behaviac::Agent)
void Exec(); void Exec();
behaviac::EBTStatus GetLastExecStatus() { return last_exec_status_; };
bool IsGameOver(); bool IsGameOver();
bool HasTarget(float range); bool HasTarget(float range);
@ -36,9 +35,9 @@ protected:
long long status_frameno_ = 0; long long status_frameno_ = 0;
const char* status_name_ = nullptr; const char* status_name_ = nullptr;
#endif #endif
behaviac::EBTStatus last_exec_status_ = behaviac::BT_INVALID;
behaviac::EBTStatus status_= behaviac::BT_SUCCESS; behaviac::EBTStatus status_= behaviac::BT_SUCCESS;
std::function<behaviac::EBTStatus()> status_runing_cb_; std::function<behaviac::EBTStatus()> runing_cb_;
std::function<bool(bool&)> event_cb_;
private: private:
Creature* owner_ = nullptr; Creature* owner_ = nullptr;