From bd56f2c193128356abab279c67437f98f80c0a1a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 6 Dec 2022 10:54:27 +0800 Subject: [PATCH] 1 --- server/gameserver/android_agent.cc | 16 +++++++++++++++- server/gameserver/creature.cc | 1 + server/gameserver/creature.h | 3 +++ server/gameserver/moveableentity.cc | 1 - server/gameserver/moveableentity.h | 3 --- server/gameserver/movehelper.cc | 9 +++++++-- server/gameserver/movehelper.h | 6 ++++-- 7 files changed, 30 insertions(+), 9 deletions(-) diff --git a/server/gameserver/android_agent.cc b/server/gameserver/android_agent.cc index 4e41f07d..7c349d79 100644 --- a/server/gameserver/android_agent.cc +++ b/server/gameserver/android_agent.cc @@ -24,9 +24,10 @@ behaviac::EBTStatus AndroidAgent::DoIdle(int min_time, int max_time) if (status_ == behaviac::BT_RUNNING) { return status_runing_cb_(); } + int idle_time = a8::RandEx(min_time, max_time); xtimer_list* timer = GetOwner()->room->xtimer.AddDeadLineTimerAndAttach ( - min_time / FRAME_RATE_MS, + idle_time / FRAME_RATE_MS, a8::XParams(), [] (const a8::XParams& param) { @@ -47,6 +48,19 @@ behaviac::EBTStatus AndroidAgent::DoIdle(int min_time, int max_time) behaviac::EBTStatus AndroidAgent::DoRandomWalk() { + if (status_ == behaviac::BT_RUNNING) { + return status_runing_cb_(); + } + + a8::Vec2 dir = GetOwner()->GetMoveDir(); + dir.Rotate((10 + rand() % 360)/ 180.0f); + dir.Normalize(); + GetOwner()->GetMoveHelper()->CalcTargetPos(500); + status_runing_cb_ = + [] () + { + return behaviac::BT_SUCCESS; + }; return behaviac::BT_SUCCESS; } diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index c61854b6..900f6612 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -45,6 +45,7 @@ Creature::Creature():MoveableEntity() } inventory_[IS_1XSCOPE].num = 1; + move_helper_ = std::make_shared(this); } Creature::~Creature() diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 664b7c30..3e2c8059 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -6,6 +6,7 @@ #include "ability.h" #include "weapon.h" #include "battledatacontext.h" +#include "movehelper.h" #include "cs_proto.pb.h" @@ -130,6 +131,7 @@ class Creature : public MoveableEntity virtual MetaData::Player* GetHeroMeta() { return nullptr; }; virtual void FillMFObjectImage(Room* room, Human* hum, cs::MFCharacterImage* image_data) {}; virtual void SetPos(a8::Vec2 pos) override; + std::shared_ptr GetMoveHelper() { return move_helper_; }; bool HasBuffEffect(int buff_effect_id); Buff* GetBuffByEffectId(int effect_id); Buff* GetBuffById(int buff_id); @@ -346,6 +348,7 @@ protected: private: CreatureWeakPtr weak_ptr_; + std::shared_ptr move_helper_; Trigger* trigger_ = nullptr; long long collision_times_ = 0; Team* team_ = nullptr; diff --git a/server/gameserver/moveableentity.cc b/server/gameserver/moveableentity.cc index 8dce110b..7bac9774 100644 --- a/server/gameserver/moveableentity.cc +++ b/server/gameserver/moveableentity.cc @@ -7,7 +7,6 @@ MoveableEntity::MoveableEntity():RoomEntity() { - move_helper_ = std::make_shared(this); } void MoveableEntity::TraverseAllLayerEntityList(std::function func) diff --git a/server/gameserver/moveableentity.h b/server/gameserver/moveableentity.h index 2c476ace..3e936b60 100644 --- a/server/gameserver/moveableentity.h +++ b/server/gameserver/moveableentity.h @@ -2,7 +2,6 @@ #include "gridservice.h" #include "roomentity.h" -#include "movehelper.h" class MoveableEntity : public RoomEntity { @@ -12,7 +11,6 @@ class MoveableEntity : public RoomEntity virtual void Update(int delta_time) {}; int UpdatedTimes() { return updated_times_;} std::set& GetGridList() { return grid_list_; } - std::shared_ptr GetMoveHelper() { return move_helper_; }; void TraverseCreatures(std::function func); void TraverseAllLayerEntityList(std::function func); @@ -43,5 +41,4 @@ private: std::set grid_list_; int chg_move_dir_times_ = 0; int chg_attack_dir_times_ = 0; - std::shared_ptr move_helper_; }; diff --git a/server/gameserver/movehelper.cc b/server/gameserver/movehelper.cc index 2e4bf335..599274d2 100644 --- a/server/gameserver/movehelper.cc +++ b/server/gameserver/movehelper.cc @@ -19,14 +19,14 @@ struct MovePathPoint float distance = 0.0f; }; -MoveHelper::MoveHelper(class MoveableEntity* owner) +MoveHelper::MoveHelper(Creature* owner) { owner_ = owner; } bool MoveHelper::GetMovePosition(glm::vec3& out_pos) { - Creature* c = (Creature*)owner_; + Creature* c = owner_; if (path_index_ < paths_.size()) { a8::Vec2 src_pos; a8::Vec2 tar_pos; @@ -258,3 +258,8 @@ void MoveHelper::AddPaths(const a8::Vec3& start, std::vector& paths) paths_.push_back(p); } } + +size_t MoveHelper::GetPathSize() +{ + return paths_.size(); +} diff --git a/server/gameserver/movehelper.h b/server/gameserver/movehelper.h index 3dc8ecef..4f1bc5e5 100644 --- a/server/gameserver/movehelper.h +++ b/server/gameserver/movehelper.h @@ -1,18 +1,20 @@ #pragma once struct MovePathPoint; +class Creature; class MoveHelper { public: - MoveHelper(class MoveableEntity* owner); + MoveHelper(Creature* owner); bool GetMovePosition(glm::vec3& out_pos); void CalcTargetPos(float distance); void ClearPath(); void AddPaths(const a8::Vec3& start, std::vector& paths); + size_t GetPathSize(); private: std::vector paths_; int path_index_ = 0; - class MoveableEntity* owner_ = nullptr; + Creature* owner_ = nullptr; };