From 1a230fccab3a5baef84b3e54d49de4d48211aea5 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 5 Dec 2022 09:58:15 +0800 Subject: [PATCH] 1 --- server/gameserver/android.cc | 1 + server/gameserver/android_agent.cc | 23 +++++++++++++++++++++++ server/gameserver/android_agent.h | 8 ++++++++ 3 files changed, 32 insertions(+) diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index d8ed2ba1..b8bf2311 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -17,6 +17,7 @@ Android::Android():Human() if (!agent_) { abort(); } + agent_->SetOwner(this); } Android::~Android() diff --git a/server/gameserver/android_agent.cc b/server/gameserver/android_agent.cc index 24993d84..6df0ae77 100644 --- a/server/gameserver/android_agent.cc +++ b/server/gameserver/android_agent.cc @@ -1,6 +1,8 @@ #include "precompile.h" #include "android_agent.h" +#include "android.h" +#include "room.h" AndroidAgent::AndroidAgent() { @@ -14,5 +16,26 @@ AndroidAgent::~AndroidAgent() behaviac::EBTStatus AndroidAgent::DoIdle(int time) { + if (status_ == behaviac::BT_RUNNING) { + return status_runing_cb_(); + } + xtimer_list* timer = GetOwner()->room->xtimer.AddDeadLineTimerAndAttach + ( + time / FRAME_RATE_MS, + a8::XParams(), + [] (const a8::XParams& param) + { + }, + &GetOwner()->xtimer_attacher.timer_list_); + std::weak_ptr timer_ptr = GetOwner()->room->xtimer.GetTimerPtr(timer); + status_runing_cb_ = + [timer_ptr] () + { + if (timer_ptr.lock()) { + return behaviac::BT_RUNNING; + } else { + return behaviac::BT_SUCCESS; + } + }; return behaviac::BT_RUNNING; } diff --git a/server/gameserver/android_agent.h b/server/gameserver/android_agent.h index 088b202c..d92d3dec 100644 --- a/server/gameserver/android_agent.h +++ b/server/gameserver/android_agent.h @@ -2,6 +2,7 @@ #include "behaviac_headers.h" +class Android; class AndroidAgent : public behaviac::Agent { public: @@ -12,6 +13,13 @@ public: BEHAVIAC_DECLARE_AGENTTYPE(AndroidAgent, behaviac::Agent) public: + void SetOwner(Android* owner) { owner_ = owner; }; + Android* GetOwner() { return owner_; }; + behaviac::EBTStatus DoIdle(int time); +private: + Android* owner_ = nullptr; + behaviac::EBTStatus status_= behaviac::BT_SUCCESS; + std::function status_runing_cb_; };