This commit is contained in:
aozhiwei 2023-11-17 16:47:52 +08:00
parent 2f2fa402bf
commit 95a2521293
9 changed files with 256 additions and 12 deletions

View File

@ -203,4 +203,5 @@ template<> inline bool MasterAgent::_Execute_Method_<METHOD_TYPE_MasterAgent_IsV
}
#endif // _BEHAVIAC_MEMBER_VISITOR_H_

View File

@ -633,7 +633,7 @@ namespace behaviac
virtual bool load()
{
AgentMeta::SetTotalSignature(877071597u);
AgentMeta::SetTotalSignature(3979851860u);
AgentMeta* meta = NULL;
BEHAVIAC_UNUSED_VAR(meta);
@ -750,10 +750,10 @@ namespace behaviac
meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove());
// HeroAgent
meta = BEHAVIAC_NEW AgentMeta(2694193342u);
meta = BEHAVIAC_NEW AgentMeta(3645053199u);
AgentMeta::GetAgentMetas()[2270112014u] = meta;
meta->RegisterMemberProperty(2706111800u, BEHAVIAC_NEW CMemberProperty< TargetAgent* >("current_target_agent", Set_HeroAgent_current_target_agent, Get_HeroAgent_current_target_agent));
meta->RegisterMemberProperty(3525744799u, BEHAVIAC_NEW CMemberProperty< HeroAgent* >("current_teammate_agent", Set_HeroAgent_current_teammate_agent, Get_HeroAgent_current_teammate_agent));
meta->RegisterMemberProperty(3525744799u, BEHAVIAC_NEW CMemberProperty< TeammateAgent* >("current_teammate_agent", Set_HeroAgent_current_teammate_agent, Get_HeroAgent_current_teammate_agent));
meta->RegisterMemberProperty(1530109714u, BEHAVIAC_NEW CMemberProperty< MasterAgent* >("master_agent", Set_HeroAgent_master_agent, Get_HeroAgent_master_agent));
meta->RegisterMemberProperty(3100058733u, BEHAVIAC_NEW CMemberProperty< int >("out_errno", Set_HeroAgent_out_errno, Get_HeroAgent_out_errno));
meta->RegisterMemberProperty(1342699083u, BEHAVIAC_NEW CMemberProperty< glm::vec3 >("out_point0", Set_HeroAgent_out_point0, Get_HeroAgent_out_point0));
@ -912,10 +912,10 @@ namespace behaviac
meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove());
// AndroidAgent
meta = BEHAVIAC_NEW AgentMeta(2904935783u);
meta = BEHAVIAC_NEW AgentMeta(949660135u);
AgentMeta::GetAgentMetas()[2475098143u] = meta;
meta->RegisterMemberProperty(2706111800u, BEHAVIAC_NEW CMemberProperty< TargetAgent* >("current_target_agent", Set_HeroAgent_current_target_agent, Get_HeroAgent_current_target_agent));
meta->RegisterMemberProperty(3525744799u, BEHAVIAC_NEW CMemberProperty< HeroAgent* >("current_teammate_agent", Set_HeroAgent_current_teammate_agent, Get_HeroAgent_current_teammate_agent));
meta->RegisterMemberProperty(3525744799u, BEHAVIAC_NEW CMemberProperty< TeammateAgent* >("current_teammate_agent", Set_HeroAgent_current_teammate_agent, Get_HeroAgent_current_teammate_agent));
meta->RegisterMemberProperty(1530109714u, BEHAVIAC_NEW CMemberProperty< MasterAgent* >("master_agent", Set_HeroAgent_master_agent, Get_HeroAgent_master_agent));
meta->RegisterMemberProperty(3100058733u, BEHAVIAC_NEW CMemberProperty< int >("out_errno", Set_HeroAgent_out_errno, Get_HeroAgent_out_errno));
meta->RegisterMemberProperty(1342699083u, BEHAVIAC_NEW CMemberProperty< glm::vec3 >("out_point0", Set_HeroAgent_out_point0, Get_HeroAgent_out_point0));
@ -1101,6 +1101,16 @@ namespace behaviac
meta->RegisterMethod(3483755530u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorContains());
meta->RegisterMethod(505785840u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorLength());
meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove());
// TeammateAgent
meta = BEHAVIAC_NEW AgentMeta(1714058232u);
AgentMeta::GetAgentMetas()[559474020u] = meta;
meta->RegisterMethod(1045109914u, BEHAVIAC_NEW CAgentStaticMethodVoid_1<char*>(FunctionPointer_TeammateAgent_LogMessage));
meta->RegisterMethod(2521019022u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorAdd());
meta->RegisterMethod(2306090221u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorClear());
meta->RegisterMethod(3483755530u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorContains());
meta->RegisterMethod(505785840u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorLength());
meta->RegisterMethod(502968959u, BEHAVIAC_NEW CMethod_behaviac_Agent_VectorRemove());
AgentMeta::Register<behaviac::Agent>("behaviac::Agent");
AgentMeta::Register<BaseAgent>("BaseAgent");
@ -1110,6 +1120,7 @@ namespace behaviac
AgentMeta::Register<HeroAgent>("HeroAgent");
AgentMeta::Register<AndroidAgent>("AndroidAgent");
AgentMeta::Register<MasterAgent>("MasterAgent");
AgentMeta::Register<TeammateAgent>("TeammateAgent");
AgentMeta::Register<SkillIdx_e>("SkillIdx_e");
AgentMeta::Register<BuffEffectType_e>("BuffEffectType_e");
AgentMeta::Register<BtEvent_e>("BtEvent_e");
@ -1131,6 +1142,7 @@ namespace behaviac
AgentMeta::UnRegister<HeroAgent>("HeroAgent");
AgentMeta::UnRegister<AndroidAgent>("AndroidAgent");
AgentMeta::UnRegister<MasterAgent>("MasterAgent");
AgentMeta::UnRegister<TeammateAgent>("TeammateAgent");
AgentMeta::UnRegister<SkillIdx_e>("SkillIdx_e");
AgentMeta::UnRegister<BuffEffectType_e>("BuffEffectType_e");
AgentMeta::UnRegister<BtEvent_e>("BtEvent_e");

View File

@ -78,7 +78,7 @@ namespace behaviac
inline void Set_HeroAgent_current_target_agent(Agent* self, TargetAgent* value) { ((HeroAgent*)self)->current_target_agent = value; };
inline const void* Get_HeroAgent_current_target_agent(Agent* self) { return &((HeroAgent*)self)->current_target_agent; };
inline void Set_HeroAgent_current_teammate_agent(Agent* self, HeroAgent* value) { ((HeroAgent*)self)->current_teammate_agent = value; };
inline void Set_HeroAgent_current_teammate_agent(Agent* self, TeammateAgent* value) { ((HeroAgent*)self)->current_teammate_agent = value; };
inline const void* Get_HeroAgent_current_teammate_agent(Agent* self) { return &((HeroAgent*)self)->current_teammate_agent; };
inline void Set_HeroAgent_master_agent(Agent* self, MasterAgent* value) { ((HeroAgent*)self)->master_agent = value; };
@ -414,6 +414,7 @@ namespace behaviac
inline int FunctionPointer_MasterAgent_RandRange(Agent* self, int min_val, int max_val) { return (int)((BaseAgent*)self)->_Execute_Method_<METHOD_TYPE_BaseAgent_RandRange, int, int, int >(min_val, max_val); }
inline float FunctionPointer_MasterAgent_RandRangeAsFloat(Agent* self, float min_val, float max_val) { return ((MasterAgent*)self)->RandRangeAsFloat(min_val, max_val); }
inline int FunctionPointer_MasterAgent_Test(Agent* self, int p1) { return (int)((BaseAgent*)self)->_Execute_Method_<METHOD_TYPE_BaseAgent_Test, int, int >(p1); }
inline void FunctionPointer_TeammateAgent_LogMessage(char* param0) { TeammateAgent::LogMessage(param0); }
inline void Set_glm_vec3_x(Agent* self, float value) { ((glm::vec3*)self)->x = value; };
inline const void* Get_glm_vec3_x(Agent* self) { return &((glm::vec3*)self)->x; };

View File

@ -13,6 +13,7 @@
#include "room_agent.h"
#include "target_agent.h"
#include "team_agent.h"
#include "teammate_agent.h"
#include "master_agent.h"
#include "behaviac_customized_types.h"

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!--EXPORTED BY TOOL, DON'T MODIFY IT!-->
<agents version="1" signature="877071597">
<agent type="HeroAgent" base="BaseAgent" signature="2694193342">
<agents version="1" signature="3979851860">
<agent type="HeroAgent" base="BaseAgent" signature="3645053199">
<properties>
<property name="current_target_agent" type="TargetAgent*" member="false" static="false" defaultvalue="null" />
<property name="current_teammate_agent" type="HeroAgent*" member="false" static="false" defaultvalue="null" />
<property name="current_teammate_agent" type="TeammateAgent*" member="false" static="false" defaultvalue="null" />
<property name="master_agent" type="MasterAgent*" member="false" static="false" defaultvalue="null" />
<property name="out_errno" type="int" member="false" static="false" defaultvalue="0" />
<property name="out_point0" type="glm::vec3" member="false" static="false" defaultvalue="{x=0;y=0;z=0;}" />
@ -32,10 +32,10 @@
<property name="tmp_val4" type="float" member="false" static="false" defaultvalue="0" />
</properties>
</agent>
<agent type="AndroidAgent" base="HeroAgent" signature="2904935783">
<agent type="AndroidAgent" base="HeroAgent" signature="949660135">
<properties>
<property name="current_target_agent" type="TargetAgent*" member="false" static="false" defaultvalue="null" />
<property name="current_teammate_agent" type="HeroAgent*" member="false" static="false" defaultvalue="null" />
<property name="current_teammate_agent" type="TeammateAgent*" member="false" static="false" defaultvalue="null" />
<property name="master_agent" type="MasterAgent*" member="false" static="false" defaultvalue="null" />
<property name="out_errno" type="int" member="false" static="false" defaultvalue="0" />
<property name="out_point0" type="glm::vec3" member="false" static="false" defaultvalue="{x=0;y=0;z=0;}" />

View File

@ -1551,6 +1551,37 @@ behaviac::EBTStatus HeroAgent::ThrowItem(int slot)
bool HeroAgent::SearchTeammate(int range)
{
if (!owner_->IsHuman()) {
return false;
}
current_teammate_agent = nullptr;
Human* nearest_teammate = nullptr;
owner_->GetTeam()->TraverseMembers
(
[this, &nearest_teammate] (Human* hum) mutable
{
if (hum == owner_) {
return true;
}
if (hum->dead) {
return true;
}
if (!nearest_teammate) {
nearest_teammate = hum;
return true;
}
if (hum->GetPos().ManhattanDistance2D(owner_->GetPos()) <
nearest_teammate->GetPos().ManhattanDistance2D(owner_->GetPos())) {
nearest_teammate = hum;
return true;
}
return true;
});
if (nearest_teammate) {
float distance = nearest_teammate->GetPos().Distance2D2(owner_->GetPos());
if (distance <= range) {
}
}
return false;
}
@ -1568,3 +1599,35 @@ bool HeroAgent::TeammateIsValid()
{
return false;
}
void HeroAgent::GetDown()
{
if (owner_->IsHuman()) {
owner_->AsHuman()->DoGetDown();
}
}
void HeroAgent::SwitchSeat(int seat)
{
}
bool HeroAgent::CarHasOil()
{
}
float HeroAgent::GetCarCurOil()
{
}
float HeroAgent::GetCarMaxOil()
{
}
bool HeroAgent::IsSingleCar()
{
}

View File

@ -16,6 +16,7 @@ class RoomAgent;
class TeamAgent;
class TargetAgent;
class MasterAgent;
class TeammateAgent;
class HeroAgent : public BaseAgent
{
public:
@ -96,6 +97,12 @@ public:
float GetTeammateDistance();
void AbandonTeammate(int min_time, int max_time);
bool TeammateIsValid();
void GetDown();
void SwitchSeat(int seat);
bool CarHasOil();
float GetCarCurOil();
float GetCarMaxOil();
bool IsSingleCar();
behaviac::EBTStatus RegisterEvents(behaviac::vector<BtEvent_e> events);
behaviac::EBTStatus ClearEvents();
@ -127,7 +134,7 @@ public:
TeamAgent* team_agent = nullptr;
MasterAgent* master_agent = nullptr;
TargetAgent* current_target_agent = nullptr;
HeroAgent* current_teammate_agent = nullptr;
TeammateAgent* current_teammate_agent = nullptr;
float task_param0 = 0.0f;
float task_param1 = 0.0f;
float task_param2 = 0.0f;

View File

@ -0,0 +1,122 @@
#include "precompile.h"
#include "teammate_agent.h"
#include "room.h"
#include "mt/Hero.h"
#include "mt/Equip.h"
TeammateAgent::TeammateAgent():BaseAgent()
{
}
TeammateAgent::~TeammateAgent()
{
}
int TeammateAgent::GetUniId()
{
if (target_.Get()) {
return target_.Get()->GetUniId();
}
return 0;
}
bool TeammateAgent::IsValid()
{
return target_.Get() && !target_.Get()->dead && target_.Get()->team_id != owner_->team_id;
}
bool TeammateAgent::IsDead()
{
if (target_.Get()) {
return target_.Get()->dead;
}
return true;
}
glm::vec3 TeammateAgent::GetPos()
{
return target_.Get()->GetPos().ToGlmVec3();
}
float TeammateAgent::GetHp()
{
if (!target_.Get()) {
abort();
}
return target_.Get()->GetHP();
}
float TeammateAgent::GetMaxHp()
{
if (!target_.Get()) {
abort();
}
return target_.Get()->GetMaxHP();
}
int TeammateAgent::GetHeroId()
{
if (!target_.Get()) {
abort();
}
return target_.Get()->GetHeroMeta()->id();
}
int TeammateAgent::GetLevel()
{
if (!target_.Get()) {
abort();
}
return target_.Get()->level;
}
void TeammateAgent::Abandon(int min_time, int max_time)
{
int time = a8::RandEx(min_time, max_time);
if (target_.Get()) {
//owner_->DelIgnoreTeammate(target_.Get()->GetUniId());
//owner_->AddIgnoreTeammate(target_.Get()->GetUniId(), time);
}
target_.Reset();
}
void TeammateAgent::SetOwner(Creature* owner)
{
owner_ = owner;
}
Room* TeammateAgent::GetRoom()
{
return owner_->room;
}
float TeammateAgent::GetShotRange()
{
if (target_.Get() && target_.Get()->GetCurrWeapon()) {
return target_.Get()->GetCurrWeapon()->meta->range();
}
return 0.0f;
}
void TeammateAgent::SetTeammate(Creature* target)
{
target_ = target->GetWeakPtrRef();
}
void TeammateAgent::ClearAbandon()
{
//owner_->ClearIgnoreTeammate();
}
float TeammateAgent::GetHPRate()
{
return GetHp() / std::max(1.0f, GetMaxHp());
}
bool TeammateAgent::HasBuffEffect(int effect_id)
{
return target_.Get() && target_.Get()->HasBuffEffect(effect_id);
}

View File

@ -0,0 +1,37 @@
#pragma once
#include "base_agent.h"
#include "creature.h"
class TeammateAgent : public BaseAgent
{
public:
TeammateAgent();
virtual ~TeammateAgent();
BEHAVIAC_DECLARE_AGENTTYPE(TeammateAgent, BaseAgent)
int GetUniId();
bool IsValid();
bool IsDead();
glm::vec3 GetPos();
float GetHp();
float GetMaxHp();
int GetHeroId();
int GetLevel();
void Abandon(int min_time, int max_time);
float GetShotRange();
void ClearAbandon();
float GetHPRate();
bool HasBuffEffect(int effect_id);
void SetOwner(Creature* owner);
void SetTeammate(Creature* target);
virtual Room* GetRoom() override;
private:
CreatureWeakPtr target_;
Creature* owner_ = nullptr;
};