Support for team filters in radar()
parent
9a873c9bea
commit
79c5fabfe6
|
@ -228,6 +228,10 @@ CObject* CObjectManager::Radar(CObject* pThis, Math::Vector thisPosition, float
|
|||
iAngle = thisAngle+angle;
|
||||
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
||||
|
||||
int filter_team = filter & 0xFF;
|
||||
RadarFilter filter_flying = static_cast<RadarFilter>(filter & (FILTER_ONLYLANDING | FILTER_ONLYFLYING));
|
||||
RadarFilter filter_enemy = static_cast<RadarFilter>(filter & (FILTER_FRIENDLY | FILTER_ENEMY | FILTER_NEUTRAL));
|
||||
|
||||
if ( !furthest ) best = 100000.0f;
|
||||
else best = 0.0f;
|
||||
pBest = nullptr;
|
||||
|
@ -271,17 +275,29 @@ CObject* CObjectManager::Radar(CObject* pThis, Math::Vector thisPosition, float
|
|||
// END OF TODO
|
||||
}
|
||||
|
||||
if ( filter == FILTER_ONLYLANDING )
|
||||
if ( filter_flying == FILTER_ONLYLANDING )
|
||||
{
|
||||
physics = pObj->GetPhysics();
|
||||
if ( physics != nullptr && !physics->GetLand() ) continue;
|
||||
}
|
||||
if ( filter == FILTER_ONLYFLYING )
|
||||
if ( filter_flying == FILTER_ONLYFLYING )
|
||||
{
|
||||
physics = pObj->GetPhysics();
|
||||
if ( physics != nullptr && physics->GetLand() ) continue;
|
||||
}
|
||||
|
||||
if ( filter_team != 0 && pObj->GetTeam() != filter_team )
|
||||
continue;
|
||||
|
||||
if( pThis != nullptr )
|
||||
{
|
||||
RadarFilter enemy = FILTER_NONE;
|
||||
if ( pObj->GetTeam() == 0 ) enemy = static_cast<RadarFilter>(enemy | FILTER_NEUTRAL);
|
||||
if ( pObj->GetTeam() == pThis->GetTeam() ) enemy = static_cast<RadarFilter>(enemy | FILTER_FRIENDLY);
|
||||
if ( pObj->GetTeam() != pThis->GetTeam() ) enemy = static_cast<RadarFilter>(enemy | FILTER_ENEMY);
|
||||
if ( filter_enemy != 0 && (filter_enemy & enemy) == 0 ) continue;
|
||||
}
|
||||
|
||||
if ( std::find(type.begin(), type.end(), oType) == type.end() && type.size() > 0 ) continue;
|
||||
|
||||
oPos = pObj->GetPosition(0);
|
||||
|
|
|
@ -48,9 +48,14 @@ class CObjectFactory;
|
|||
|
||||
enum RadarFilter
|
||||
{
|
||||
FILTER_NONE = 0,
|
||||
FILTER_ONLYLANDING = 1,
|
||||
FILTER_ONLYFLYING = 2,
|
||||
FILTER_NONE = (0b00000000) << 8,
|
||||
|
||||
FILTER_ONLYLANDING = (0b00000001) << 8,
|
||||
FILTER_ONLYFLYING = (0b00000010) << 8,
|
||||
|
||||
FILTER_FRIENDLY = (0b00000100) << 8,
|
||||
FILTER_ENEMY = (0b00001000) << 8,
|
||||
FILTER_NEUTRAL = (0b00010000) << 8,
|
||||
};
|
||||
|
||||
using CObjectMap = std::map<int, std::unique_ptr<CObject>>;
|
||||
|
|
|
@ -1062,7 +1062,7 @@ bool CScriptFunctions::rDelete(CBotVar* var, CBotVar* result, int& exception, vo
|
|||
}
|
||||
else
|
||||
{
|
||||
if ( exploType )
|
||||
if ( exploType != 0 )
|
||||
{
|
||||
obj->ExplodeObject(static_cast<ExplosionType>(exploType), force);
|
||||
}
|
||||
|
@ -3821,12 +3821,15 @@ void CScriptFunctions::Init()
|
|||
|
||||
CBotProgram::DefineNum("FilterNone", FILTER_NONE);
|
||||
CBotProgram::DefineNum("FilterOnlyLanding", FILTER_ONLYLANDING);
|
||||
CBotProgram::DefineNum("FilterOnlyFliying", FILTER_ONLYFLYING);
|
||||
CBotProgram::DefineNum("FilterOnlyFlying", FILTER_ONLYFLYING);
|
||||
CBotProgram::DefineNum("FilterFriendly", FILTER_FRIENDLY);
|
||||
CBotProgram::DefineNum("FilterEnemy", FILTER_ENEMY);
|
||||
CBotProgram::DefineNum("FilterNeutral", FILTER_NEUTRAL);
|
||||
|
||||
CBotProgram::DefineNum("ExploNone", 0);
|
||||
CBotProgram::DefineNum("ExploBoum", static_cast<long>(ExplosionType::Bang));
|
||||
CBotProgram::DefineNum("ExploBurn", static_cast<long>(ExplosionType::Burn));
|
||||
CBotProgram::DefineNum("ExploWater", static_cast<long>(ExplosionType::Water));
|
||||
CBotProgram::DefineNum("ExplosionNone", 0);
|
||||
CBotProgram::DefineNum("ExplosionBang", static_cast<int>(ExplosionType::Bang));
|
||||
CBotProgram::DefineNum("ExplosionBurn", static_cast<int>(ExplosionType::Burn));
|
||||
CBotProgram::DefineNum("ExplosionWater", static_cast<int>(ExplosionType::Water));
|
||||
|
||||
CBotProgram::DefineNum("ResultNotEnded", ERR_MISSION_NOTERM);
|
||||
CBotProgram::DefineNum("ResultLost", INFO_LOST);
|
||||
|
|
Loading…
Reference in New Issue