本文整理汇总了C++中MoverPtr::getEcmRange方法的典型用法代码示例。如果您正苦于以下问题:C++ MoverPtr::getEcmRange方法的具体用法?C++ MoverPtr::getEcmRange怎么用?C++ MoverPtr::getEcmRange使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MoverPtr
的用法示例。
在下文中一共展示了MoverPtr::getEcmRange方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: calcContactStatus
long SensorSystem::calcContactStatus (MoverPtr mover) {
if (!owner->getTeam())
return(CONTACT_NONE);
if (mover->getFlag(OBJECT_FLAG_REMOVED)) {
return(CONTACT_NONE);
}
//----------------------------------------------------------
//If object we are looking for is at the edge, NO CONTACT!!
if (!Terrain::IsGameSelectTerrainPosition(mover->getPosition()))
return CONTACT_NONE;
//-------------------------------------------------------------
// Should be properly set when active probes are implemented...
long newContactStatus = CONTACT_NONE;
if (!notShutdown || (range == 0.0) && !broken)
{
if (owner->lineOfSight(mover) && !mover->isDisabled())
newContactStatus = CONTACT_VISUAL;
return(newContactStatus);
}
if ((masterIndex == -1) || (range < 0.0)) {
return(CONTACT_NONE);
}
if (owner->isMover()) {
MoverPtr mover = (MoverPtr)owner;
if ((mover->sensor == 255) || mover->inventory[mover->sensor].disabled || broken) {
return(CONTACT_NONE);
}
}
if (mover->getFlag(OBJECT_FLAG_SENSOR) && !mover->isDisabled())
{
bool moverNotContact = mover->hasNullSignature() || (mover->getEcmRange() != 0.0f);
bool moverInvisible = (mover->getStatus() == OBJECT_STATUS_SHUTDOWN);
if (!moverInvisible && !moverNotContact)
{
float distanceToMover = owner->distanceFrom(mover->getPosition());
float sensorRange = getEffectiveRange();
if (distanceToMover <= sensorRange)
{
//-------------------------------------------
//No need to check shutdown and probe AGAIN!
newContactStatus = getSensorQuality();
//---------------------------------------
// If ecm affecting me, my skill drops...
// CUT, per Mitch 2/10/00
if ((ecmEffect < 1.0) && (newContactStatus > CONTACT_SENSOR_QUALITY_1))
newContactStatus--;
//---------------------------------------------------
// We now we are within sensor range, check visual.
float startRadius = 0.0f;
if (!owner->isMover())
startRadius = owner->getAppearRadius();
if (hasLOSCapability && owner->lineOfSight(mover,startRadius))
newContactStatus = CONTACT_VISUAL;
}
else //Still need to check if visual!!! ECM and Lookout Towers!!
{
float startRadius = 0.0f;
if (!owner->isMover())
startRadius = owner->getAppearRadius();
if (hasLOSCapability && owner->lineOfSight(mover,startRadius))
newContactStatus = CONTACT_VISUAL;
}
}
else
{
//Target is shutdown, can ONLY be visual cause this platform has no probe.
float startRadius = 0.0f;
if (!owner->isMover())
startRadius = owner->getAppearRadius();
if (hasLOSCapability && owner->lineOfSight(mover,startRadius))
newContactStatus = CONTACT_VISUAL;
}
}
//Let us know that we can see something, sensor or otherwise!!
if (mover->getTeam() && (owner->getTeam() == Team::home) && mover->getTeam()->isEnemy(Team::home) &&
(newContactStatus != CONTACT_NONE))
{
SensorSystemManager::enemyInLOS = true;
}
return(newContactStatus);
}
示例2: render
//.........这里部分代码省略.........
if ( s_lastBlinkTime > s_blinkLength )
{
colorBlip = 0;
colorRing = 0;
s_lastBlinkTime = 0.f;
}
}
colors[count] = colorBlip;
ringColors[count] = colorRing;
ranges[count] = pSensor->getRange();
selected[count] = 0;
positions[count] = pSensor->owner->getPosition();
count++;
}
}
}
}
unsigned long colorBlip, colorRing;
//-----------------------------------------------------
// draw the movers
for (i=0;i<(ObjectManager->numMovers);i++)
{
MoverPtr mover = ObjectManager->getMover(i);
if (mover && mover->getExists() && !(mover->isDestroyed() || mover->isDisabled()))
{
SensorSystem* pSensor = mover->getSensorSystem();
float range = pSensor ? pSensor->getRange() : 0;
long contactStatus = mover->getContactStatus(Team::home->getId(), true);
if (mover->getTeamId() == Team::home->id)
{
if (mover->getCommanderId() == Commander::home->getId())
{
if (mover->isOnGUI())
{
colorBlip = mover->getSelected() ? 0xff4bff4b : 0xff00cc00;
mover->getStatus() == OBJECT_STATUS_SHUTDOWN ? colorRing = 0 : colorRing = 0xff00cc00;
}
else
continue;
}
else
{
if (mover->isOnGUI() && land->IsGameSelectTerrainPosition(mover->getPosition()) && mover->pathLocks)
{
colorBlip = mover->getSelected() ? 0xff4b4bff : 0xff0000cc;
mover->getStatus() == OBJECT_STATUS_SHUTDOWN ? colorRing = 0 : colorRing = 0xff0000cc;
}
else
continue;
}
}
else if (g_dbgShowMovers || (MPlayer && MPlayer->allUnitsDestroyed[MPlayer->commanderID]) || ((mover->getTeamId() != Team::home->id)
&& ( contactStatus != CONTACT_NONE )
&& (mover->getStatus() != OBJECT_STATUS_SHUTDOWN)
&& (!mover->hasNullSignature())
&& (mover->getEcmRange() <= 0.0f) ) ) //Do not draw ECM mechs!!)
{
//Not on our side. Draw by contact status
colorBlip = mover->getSelected() ? 0xffff3f3f : 0xffff0000;
colorRing = 0xffff0000;
}
else
continue;
colors[count] = colorBlip;
ringColors[count] = colorRing;
ranges[count] = range;
selected[count] = mover->getSelected();
positions[count] = mover->getPosition();
count++;
}
}
for ( i = 0; i < count; i++ )
{
drawSensor( positions[i], ranges[i], ringColors[i] );
}
bool bSel = 0; // draw unselected first
for ( int j = 0; j < 2; j++ )
{
for ( int i = 0; i < count; i++ )
{
if ( selected[i] == bSel )
{
drawBlip( positions[i], colors[i], DOT_BLIP );
}
}
bSel = 1;
}
}