Files
mod-playerbots/src/strategy/values/CollisionValue.cpp
2024-08-04 10:23:36 +08:00

38 lines
1.1 KiB
C++

/*
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
* and/or modify it under version 2 of the License, or (at your option), any later version.
*/
#include "CollisionValue.h"
#include "CellImpl.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "Playerbots.h"
#include "ServerFacade.h"
bool CollisionValue::Calculate()
{
Unit* target = AI_VALUE(Unit*, qualifier);
if (!target)
return false;
std::list<Unit*> targets;
float range = sPlayerbotAIConfig->contactDistance;
Acore::AnyUnitInObjectRangeCheck u_check(bot, range);
Acore::UnitListSearcher<Acore::AnyUnitInObjectRangeCheck> searcher(bot, targets, u_check);
Cell::VisitAllObjects(bot, searcher, range);
for (Unit* target : targets)
{
if (bot == target)
continue;
float dist = sServerFacade->GetDistance2d(bot, target->GetPositionX(), target->GetPositionY());
if (sServerFacade->IsDistanceLessThan(dist, target->GetCombatReach()))
return true;
}
return false;
}