[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