[Orxonox-commit 4203] r8874 - in code/branches/ai2: data/levels src/modules/overlays/hud

jo at orxonox.net jo at orxonox.net
Sun Sep 4 15:15:42 CEST 2011


Author: jo
Date: 2011-09-04 15:15:41 +0200 (Sun, 04 Sep 2011)
New Revision: 8874

Modified:
   code/branches/ai2/data/levels/missionOne.oxw
   code/branches/ai2/src/modules/overlays/hud/HUDNavigation.cc
   code/branches/ai2/src/modules/overlays/hud/HUDNavigation.h
   code/branches/ai2/src/modules/overlays/hud/HUDRadar.cc
   code/branches/ai2/src/modules/overlays/hud/HUDRadar.h
Log:
Radar & Navigation tweaks: Radar is now hiding 'radar invisible' objects in the same way as the navigation markers are hidden. New 'feature': objects that are too far away are not displayed.

Modified: code/branches/ai2/data/levels/missionOne.oxw
===================================================================
--- code/branches/ai2/data/levels/missionOne.oxw	2011-09-01 10:11:47 UTC (rev 8873)
+++ code/branches/ai2/data/levels/missionOne.oxw	2011-09-04 13:15:41 UTC (rev 8874)
@@ -400,43 +400,6 @@
     </StaticEntity>
 
 
-<!-- 
-          <events>
-            <visibility>
-              <EventTrigger>
-                <events>
-                  <trigger>
-                    <EventListener event=trigger1 />
-                  </trigger>
-                </events>
-                <EventTrigger invert=true>
-                  <events>
-                    <trigger>
-                      <EventListener event=trigger2 />
-                    </trigger>
-                  </events>
-                </EventTrigger>
-              </EventTrigger>
-            </visibility>
-          </events>
-Activated: after destroying pirates after successfull docking// Deactivated: @Beginning, after first usage, after second usage
-
-activate:
-
-                <EventListener event="movingpirates2" />
-
-                <EventListener event=ondock />
-
-deactivate:
-
-
-                <EventListener event=toHydroFarmer />
-
-
-                <EventListener event=attack />
-
--->
-
 <!-- @Objects: PORTAL: from DuBall to HydroHarvester  -->
     <Template name=PortalDefault>
         <PortalEndPoint>
@@ -461,7 +424,7 @@
                   <EventTrigger invert=true>
                     <events>
                       <trigger>
-                        <EventListener event=toHydroFarmer />
+                        <EventListener event="toHydroFarmer" />
                       </trigger>
                     </events>
                   </EventTrigger>
@@ -470,18 +433,25 @@
                   <EventTrigger>
                     <events>
                       <trigger>
-                        <EventListener event=ondock />
+                        <EventListener event="ondock" />
                       </trigger>
                     </events>
                   </EventTrigger>
                   <EventTrigger invert=true>
                     <events>
                       <trigger>
-                        <EventListener event=attack />
+                        <EventListener event="attack" />
                       </trigger>
                     </events>
                   </EventTrigger>
                 </Trigger>
+                <EventTrigger>
+                  <events>
+                    <trigger>
+                      <EventListener event="HydroFarmer" />
+                    </trigger>
+                  </events>
+                </EventTrigger>
               </Trigger>
             </activity>
           </events>
@@ -490,7 +460,7 @@
     <PortalEndPoint position="-47000,-1000,1300" id="2" distance="70" target="MobileEntity" design="PortalDefault">
           <events>
             <activity>
-              <Trigger mode="or" activations="2">
+              <Trigger mode="or" activations="3">
                 <Trigger mode="and" activations="1">
                   <EventTrigger>
                     <events>
@@ -502,7 +472,7 @@
                   <EventTrigger invert=true>
                     <events>
                       <trigger>
-                        <EventListener event=toHydroFarmer />
+                        <EventListener event="toHydroFarmer" />
                       </trigger>
                     </events>
                   </EventTrigger>
@@ -511,28 +481,53 @@
                   <EventTrigger>
                     <events>
                       <trigger>
-                        <EventListener event=ondock />
+                        <EventListener event="ondock" />
                       </trigger>
                     </events>
                   </EventTrigger>
                   <EventTrigger invert=true>
                     <events>
                       <trigger>
-                        <EventListener event=attack />
+                        <EventListener event="attack" />
                       </trigger>
                     </events>
                   </EventTrigger>
                 </Trigger>
+                <EventTrigger>
+                  <events>
+                    <trigger>
+                      <EventListener event="HydroFarmer" />
+                    </trigger>
+                  </events>
+                </EventTrigger>
               </Trigger>
             </activity>
           </events>
     </PortalEndPoint>
     <PortalLink fromID="1" toID="2" />
     <PortalLink fromID="2" toID="1" />
+<!-- ????????????????????????????????????????????????????? why does this NOT work ??
+                <Trigger mode="and" activations="1">
+                  <EventTrigger>
+                    <events>
+                      <trigger>
+                        <EventListener event="HydroFarmer" />
+                      </trigger>
+                    </events>
+                  </EventTrigger>
+                  <EventTrigger invert=true>
+                    <events>
+                      <trigger>
+                        <EventListener event="attack" />
+                      </trigger>
+                    </events>
+                  </EventTrigger>
+                </Trigger>
+-->
 <!-- PORTALS END-->
 
-    <!--DistanceTrigger name="toHydroFarmer" position="-47000,-1000,1300" target="Pawn" distance=700 stayActive="true" delay=0 /-->
-    <SimpleNotification message="Find the Hydrogen Farmer.">
+
+    <SimpleNotification message="Dock to the Hydrogen Farmer.">
         <events>
             <trigger>
                 <EventListener event=toHydroFarmer />
@@ -561,7 +556,7 @@
 
 
 <!-- @Objects: HYDROGEN FARMER & DOCKING -->
-    <SpaceShip position="-48900,100,0" roll=90 yaw=0 pitch=20 mass=10000 health=100000 >
+    <SpaceShip position="-48900,100,0" roll=90 yaw=0 pitch=20 mass=10000 health=100000 name="HydroFarmer">
       <attached>
         <!-- Docking -->
         <DistanceTriggerBeacon name="bcnDestroyer" />
@@ -625,11 +620,49 @@
         </attached>
     </Dock>
 
-    <SpaceShip template="spaceshipspacecruiser" position="-48900,800,0" orientation="-0.14, 0.68, 0.68, 0.223" health="300" maxhealth="400" initialhealth="300">
+    <SpaceShip template="spaceshipspacecruiser" position="-48900,800,0" orientation="-0.14, 0.68, 0.68, 0.223" health="300" maxhealth="400" initialhealth="300" name="cruiser" >
       <attached>
         <DockingTarget name="spaceShip" />
       </attached>
     </SpaceShip>
+
+
+          <Trigger name="cruiserFriendlyFire" mode="and" activations="2">
+            <EventTrigger>
+              <events>
+                <trigger>
+                  <EventListener event="cruiser" />
+                </trigger>
+              </events>
+            </EventTrigger>
+            <EventTrigger invert=true>
+              <events>
+                <trigger>
+                  <EventListener event="ondock" />
+                </trigger>
+              </events>
+            </EventTrigger>
+          </Trigger>
+
+
+    <SimpleNotification message="You killed the Hydrogen Farmer!" broadcast="true">
+        <events>
+            <trigger>
+                <EventListener event="HydroFarmer" />
+            </trigger>
+        </events>
+    </SimpleNotification>
+
+    <SimpleNotification message="You killed the SpaceCruiser!" broadcast="true">
+        <events>
+            <trigger>
+                <EventListener event="cruiserFriendlyFire" /><!--cruiserFriendlyFire-->
+            </trigger>
+        </events>
+    </SimpleNotification>
+
+
+
 <!-- hydrogen farmer & docking END -->
 
 
@@ -1125,4 +1158,6 @@
 ! Quest Interface
 - Foolproof text messages (e.g. verspätete Nachrichten unterdrücken)
 - Radar visibility & Hud Markers
+- End Tutorial, if either the Hydrogen Farmer or the SpaceCruiser gets destroyed.
+
  -->

Modified: code/branches/ai2/src/modules/overlays/hud/HUDNavigation.cc
===================================================================
--- code/branches/ai2/src/modules/overlays/hud/HUDNavigation.cc	2011-09-01 10:11:47 UTC (rev 8873)
+++ code/branches/ai2/src/modules/overlays/hud/HUDNavigation.cc	2011-09-04 13:15:41 UTC (rev 8874)
@@ -62,6 +62,7 @@
 void HUDNavigation::setConfigValues()
 {
   SetConfigValue(markerLimit_, 3);
+
 }
 
 CreateFactory ( HUDNavigation );
@@ -76,6 +77,7 @@
     setFont ( "Monofur" );
     setTextSize ( 0.05f );
     setNavMarkerSize ( 0.05f );
+    setDetectionLimit( 10000.0f );
 }
 
 HUDNavigation::~HUDNavigation()
@@ -94,9 +96,10 @@
 {
     SUPER ( HUDNavigation, XMLPort, xmlelement, mode );
 
-    XMLPortParam ( HUDNavigation, "font",          setFont,          getFont,          xmlelement, mode );
-    XMLPortParam ( HUDNavigation, "textSize",      setTextSize,      getTextSize,      xmlelement, mode );
-    XMLPortParam ( HUDNavigation, "navMarkerSize", setNavMarkerSize, getNavMarkerSize, xmlelement, mode );
+    XMLPortParam ( HUDNavigation, "font",           setFont,           getFont,           xmlelement, mode );
+    XMLPortParam ( HUDNavigation, "textSize",       setTextSize,       getTextSize,       xmlelement, mode );
+    XMLPortParam ( HUDNavigation, "navMarkerSize",  setNavMarkerSize,  getNavMarkerSize,  xmlelement, mode );
+    XMLPortParam ( HUDNavigation, "detectionLimit", setDetectionLimit, getDetectionLimit, xmlelement, mode );
 }
 
 void HUDNavigation::setFont ( const std::string& font )
@@ -160,13 +163,16 @@
     sortedObjectList_.sort ( compareDistance );
 
     unsigned int markerCount_ = 0;
-
+    bool closeEnough_ = false; //inly display objects that are close enough to be relevant for the player
 //         for (ObjectMap::iterator it = activeObjectList_.begin(); it != activeObjectList_.end(); ++it)
     for ( sortedList::iterator listIt = sortedObjectList_.begin(); listIt != sortedObjectList_.end(); ++markerCount_, ++listIt )
     {
         ObjectMap::iterator it = activeObjectList_.find ( listIt->first );
-
-        if ( markerCount_ < markerLimit_ )
+        if( detectionLimit_ < 0 )
+            closeEnough_ = true ;
+        else
+            closeEnough_ = listIt->second < detectionLimit_ ;
+        if ( markerCount_ < markerLimit_ && closeEnough_ ) // display on HUD íf statement is true
         {
 
 
@@ -276,7 +282,7 @@
             it->second.panel_->show();
             it->second.text_->show();
         }
-        else
+        else // do not display on HUD
         {
             it->second.panel_->hide();
             it->second.text_->hide();
@@ -308,7 +314,7 @@
 
 void HUDNavigation::addObject ( RadarViewable* object )
 {
-    if( showObject(object)==false )
+    if( showObject(object) == false )
         return;
 
     if ( activeObjectList_.size() >= markerLimit_ )
@@ -395,7 +401,7 @@
     if ( rv == dynamic_cast<RadarViewable*> ( this->getOwner() ) )
         return false;
     assert( rv->getWorldEntity() );
-    if ( rv->getWorldEntity()->isVisible()==false || rv->getRadarVisibility()==false )
+    if ( rv->getWorldEntity()->isVisible() == false || rv->getRadarVisibility() == false )
         return false;
     return true;
 }

Modified: code/branches/ai2/src/modules/overlays/hud/HUDNavigation.h
===================================================================
--- code/branches/ai2/src/modules/overlays/hud/HUDNavigation.h	2011-09-01 10:11:47 UTC (rev 8873)
+++ code/branches/ai2/src/modules/overlays/hud/HUDNavigation.h	2011-09-04 13:15:41 UTC (rev 8874)
@@ -84,6 +84,11 @@
     float getNavMarkerSize() const
     { return navMarkerSize_; }
 
+    void setDetectionLimit( float limit )
+    { this->detectionLimit_ = limit; }
+    float getDetectionLimit() const
+    { return this->detectionLimit_; }
+
     void setTextSize ( float size );
     float getTextSize() const;
 
@@ -101,9 +106,9 @@
     std::string fontName_;
     float textSize_;
 
-    unsigned int markerLimit_;; //TODO: is it possible to set this over the console and/or the IG-Setting
-
-
+    unsigned int markerLimit_; //TODO: is it possible to set this over the console and/or the IG-Setting
+    float detectionLimit_; //!< Objects that are more far away than detectionLimit_ are not displayed on the HUD. 10000.0f is the default value.
+                           //!< In order to bypass this behaviour, set a negative detectionLimit_. Then the detection range is "infinite".
 };
 }
 

Modified: code/branches/ai2/src/modules/overlays/hud/HUDRadar.cc
===================================================================
--- code/branches/ai2/src/modules/overlays/hud/HUDRadar.cc	2011-09-01 10:11:47 UTC (rev 8873)
+++ code/branches/ai2/src/modules/overlays/hud/HUDRadar.cc	2011-09-04 13:15:41 UTC (rev 8874)
@@ -63,7 +63,7 @@
         this->shapeMaterials_[RadarViewable::Dot]      = "RadarDot.png";
         this->shapeMaterials_[RadarViewable::Triangle] = "RadarTriangle.png";
         this->shapeMaterials_[RadarViewable::Square]   = "RadarSquare.png";
-
+        this->setDetectionLimit( 10000.0f );
         this->owner_ = 0;
     }
 
@@ -93,6 +93,8 @@
     {
         if (object == dynamic_cast<RadarViewable*>(this->owner_))
             return;
+        if( showObject(object) == false ) //do not show objects that are "invisible" or "radar invisible"
+            return;
 
         // Make sure the object hasn't been added yet
         assert( this->radarObjects_.find(object) == this->radarObjects_.end() );
@@ -122,8 +124,12 @@
 
     void HUDRadar::objectChanged( RadarViewable* rv )
     {
-        if (rv == dynamic_cast<RadarViewable*>(this->owner_))
+        if(rv == dynamic_cast<RadarViewable*>(this->owner_)) //case: player changed
             return;
+        if( showObject(rv) == false ) //case: (radar) invisible object changed
+            return;
+        if( this->radarObjects_.find(rv) == this->radarObjects_.end() ) // if (radar) invisibility becomes (radar) visible
+            this->addObject(rv);
         assert( this->radarObjects_.find(rv) != this->radarObjects_.end() );
         Ogre::PanelOverlayElement* panel = this->radarObjects_[rv];
         panel->setMaterialName(TextureGenerator::getMaterialName(
@@ -171,7 +177,10 @@
             Vector2 coord = get2DViewcoordinates(this->owner_->getPosition(), this->owner_->getOrientation() * WorldEntity::FRONT, this->owner_->getOrientation() * WorldEntity::UP, wePointer->getWorldPosition());
             coord *= math::pi / 3.5f; // small adjustment to make it fit the texture
             it->second->setPosition((1.0f + coord.x - size) * 0.5f, (1.0f - coord.y - size) * 0.5f);
-            it->second->show();
+            if( distance < detectionLimit_ || detectionLimit_ < 0 )
+                it->second->show();
+            else
+                it->second->hide();
 
             // if this object is in focus, then set the focus marker
             if (isFocus)
@@ -183,6 +192,17 @@
         }
     }
 
+    bool HUDRadar::showObject(RadarViewable* rv)
+    {
+        if ( rv == dynamic_cast<RadarViewable*> ( this->getOwner() ) )
+            return false;
+        assert( rv->getWorldEntity() );
+        if ( rv->getWorldEntity()->isVisible()==false || rv->getRadarVisibility()==false )
+            return false;
+        return true;
+    }
+
+
     void HUDRadar::changedOwner()
     {
         SUPER(HUDRadar, changedOwner);

Modified: code/branches/ai2/src/modules/overlays/hud/HUDRadar.h
===================================================================
--- code/branches/ai2/src/modules/overlays/hud/HUDRadar.h	2011-09-01 10:11:47 UTC (rev 8873)
+++ code/branches/ai2/src/modules/overlays/hud/HUDRadar.h	2011-09-04 13:15:41 UTC (rev 8874)
@@ -56,6 +56,11 @@
         float getHalfDotSizeDistance() const { return this->halfDotSizeDistance_; }
         void setHalfDotSizeDistance(float distance) { this->halfDotSizeDistance_ = distance; }
 
+        void setDetectionLimit( float limit )
+        { this->detectionLimit_ = limit; }
+        float getDetectionLimit() const
+        { return this->detectionLimit_; }
+
         float getMaximumDotSize() const { return this->maximumDotSize_; }
         void setMaximumDotSize(float size) { this->maximumDotSize_ = size; }
 
@@ -68,6 +73,7 @@
         virtual void removeObject(RadarViewable* viewable);
         virtual void objectChanged( RadarViewable* rv );
         void radarTick(float dt);
+        bool showObject( RadarViewable* rv ); //!< Do not display an object on radar, if showObject(.) is false.
 
         void gatherObjects();
 
@@ -82,7 +88,7 @@
         float maximumDotSize_;
 
         float sensitivity_;
-
+        float detectionLimit_;
         ControllableEntity* owner_;
     };
 }




More information about the Orxonox-commit mailing list