123 lines
2.1 KiB
C++
123 lines
2.1 KiB
C++
#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()->GetHeroLevel();
|
|
}
|
|
|
|
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::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);
|
|
}
|
|
|
|
void TeammateAgent::SetTarget(Creature* target)
|
|
{
|
|
target_ = target->GetWeakPtrRef();
|
|
}
|