@@ -608,18 +608,18 @@ void W3DRadar::drawEvents( Int pixelX, Int pixelY, Int width, Int height )
608608void W3DRadar::drawIcons ( Int pixelX, Int pixelY, Int width, Int height )
609609{
610610 // draw the hero icons
611- std::list <const Coord3D *>::const_iterator iter = m_cachedHeroPosList .begin ();
612- while (iter != m_cachedHeroPosList .end ())
611+ std::vector <const Object *>::const_iterator iter = m_cachedHeroObjectList .begin ();
612+ while (iter != m_cachedHeroObjectList .end ())
613613 {
614- drawHeroIcon ( pixelX, pixelY, width, height, (*iter) );
614+ drawHeroIcon ( pixelX, pixelY, width, height, (*iter)-> getPosition () );
615615 ++iter;
616616 }
617617}
618618
619619// -------------------------------------------------------------------------------------------------
620620/* * Render an object list into the texture passed in */
621621// -------------------------------------------------------------------------------------------------
622- void W3DRadar::renderObjectList ( const RadarObject *listHead, TextureClass *texture, Bool calcHero )
622+ void W3DRadar::renderObjectList ( const RadarObject *listHead, TextureClass *texture )
623623{
624624
625625 // sanity
@@ -637,12 +637,6 @@ void W3DRadar::renderObjectList( const RadarObject *listHead, TextureClass *text
637637 if (player)
638638 playerIndex=player->getPlayerIndex ();
639639
640- if ( calcHero )
641- {
642- // clear all entries from the cached hero object list
643- m_cachedHeroPosList.clear ();
644- }
645-
646640 for ( const RadarObject *rObj = listHead; rObj; rObj = rObj->friend_getNext () )
647641 {
648642
@@ -652,11 +646,6 @@ void W3DRadar::renderObjectList( const RadarObject *listHead, TextureClass *text
652646 // get object
653647 const Object *obj = rObj->friend_getObject ();
654648
655- // cache hero object positions for drawing in icon layer
656- if ( calcHero && obj->isHero () )
657- {
658- m_cachedHeroPosList.push_back (obj->getPosition ());
659- }
660649 Bool skip = FALSE ;
661650
662651 // check for shrouded status
@@ -1001,6 +990,34 @@ void W3DRadar::update( void )
1001990
1002991} // end update
1003992
993+ // -------------------------------------------------------------------------------------------------
994+ bool W3DRadar::addObject ( Object *obj )
995+ {
996+ if (Radar::addObject (obj))
997+ {
998+ if (obj->isHero ())
999+ {
1000+ m_cachedHeroObjectList.push_back (obj);
1001+ }
1002+ return true ;
1003+ }
1004+ return false ;
1005+ }
1006+
1007+ // -------------------------------------------------------------------------------------------------
1008+ bool W3DRadar::removeObject ( Object *obj )
1009+ {
1010+ if (Radar::removeObject (obj))
1011+ {
1012+ if (obj->isHero ())
1013+ {
1014+ stl::find_and_erase_unordered (m_cachedHeroObjectList, obj);
1015+ }
1016+ return true ;
1017+ }
1018+ return false ;
1019+ }
1020+
10041021// -------------------------------------------------------------------------------------------------
10051022/* * Reset the radar for the new map data being given to it */
10061023// -------------------------------------------------------------------------------------------------
@@ -1416,7 +1433,7 @@ void W3DRadar::draw( Int pixelX, Int pixelY, Int width, Int height )
14161433
14171434 // rebuild the object overlay
14181435 renderObjectList ( getObjectList (), m_overlayTexture );
1419- renderObjectList ( getLocalObjectList (), m_overlayTexture, TRUE );
1436+ renderObjectList ( getLocalObjectList (), m_overlayTexture );
14201437
14211438 } // end if
14221439
@@ -1475,7 +1492,7 @@ void W3DRadar::refreshTerrain( TerrainLogic *terrain )
14751492
14761493/*
14771494 *
1478- void W3DRadar::renderObjectList( const RadarObject *listHead, TextureClass *texture, Bool calcHero )
1495+ void W3DRadar::renderObjectList( const RadarObject *listHead, TextureClass *texture )
14791496{
14801497
14811498 // sanity
@@ -1495,12 +1512,6 @@ void W3DRadar::refreshTerrain( TerrainLogic *terrain )
14951512
14961513 UnsignedByte minAlpha = 8;
14971514
1498- if( calcHero )
1499- {
1500- // clear all entries from the cached hero object list
1501- m_cachedHeroPosList.clear();
1502- }
1503-
15041515 for( const RadarObject *rObj = listHead; rObj; rObj = rObj->friend_getNext() )
15051516 {
15061517 UnsignedByte h = (UnsignedByte)(rObj->isTemporarilyHidden());
@@ -1513,12 +1524,6 @@ void W3DRadar::refreshTerrain( TerrainLogic *terrain )
15131524 const Object *obj = rObj->friend_getObject();
15141525 UnsignedByte r = 1; // all decoys
15151526
1516- // cache hero object positions for drawing in icon layer
1517- if( calcHero && obj->isHero() )
1518- {
1519- m_cachedHeroPosList.push_back(obj->getPosition());
1520- }
1521-
15221527 // get the color we're going to draw in
15231528 UnsignedInt c = 0xfe000000;// this is a decoy
15241529 c |= (UnsignedInt)( obj->testStatus( OBJECT_STATUS_STEALTHED ) );//so is this
0 commit comments