Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jun 8, 2008, 5:46:52 AM (16 years ago)
Author:
landauf
Message:
  • several small changes in most of the HUD classes (code cleanup): removed obsolete variables, privatized all member variables, removed resizing functioncalls from tick, destroying overlayelements, added some const qualifiers.
  • moved calculation functions for RadarObject-position to Math.h and changed the phi/right/radius format to Vector2. the functions are used too by SpaceShipAI.
  • cycleNavigationFocus takes the nearest object if focus was NULL
  • BarOverlayElement works in both directions (left to right and right to left)
  • fixed bug causing SpaceShipAI to not stop shooting when losing target - this also speeds up orxonox a lot, because there are less projectiles

####################################

!! UPDATE YOUR MEDIA REPOSITORY !!

####################################
…or the BarOverlayElement will look strange

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/util/Math.cc

    r1505 r1564  
    2626 *
    2727 */
     28
     29#include <OgrePlane.h>
    2830
    2931#include "Math.h"
     
    6870    return in;
    6971}
     72
     73
     74float getAngle(const orxonox::Vector3& myposition, const orxonox::Vector3& mydirection, const orxonox::Vector3& otherposition)
     75{
     76    orxonox::Vector3 distance = otherposition - myposition;
     77    return acos(mydirection.dotProduct(distance) / distance.length());
     78}
     79
     80orxonox::Vector2 get2DViewdirection(const orxonox::Vector3& myposition, const orxonox::Vector3& mydirection, const orxonox::Vector3& myorthonormal, const orxonox::Vector3& otherposition)
     81{
     82    orxonox::Vector3 distance = otherposition - myposition;
     83
     84    // project difference vector on our plane
     85    orxonox::Vector3 projection = Ogre::Plane(mydirection, myposition).projectVector(distance);
     86    float angle = acos(myorthonormal.dotProduct(projection) / projection.length());
     87
     88    if ((mydirection.crossProduct(myorthonormal)).dotProduct(distance) > 0)
     89        return orxonox::Vector2(sin(angle), cos(angle));
     90    else
     91        return orxonox::Vector2(-sin(angle), cos(angle));
     92}
     93
     94orxonox::Vector2 get2DViewcoordinates(const orxonox::Vector3& myposition, const orxonox::Vector3& mydirection, const orxonox::Vector3& myorthonormal, const orxonox::Vector3& otherposition)
     95{
     96    orxonox::Vector3 distance = otherposition - myposition;
     97
     98    // project difference vector on our plane
     99    orxonox::Vector3 projection = Ogre::Plane(mydirection, myposition).projectVector(distance);
     100    float angle = acos(myorthonormal.dotProduct(projection) / projection.length());
     101    float radius = acos(mydirection.dotProduct(distance) / distance.length()) / Ogre::Math::PI;
     102
     103    if ((mydirection.crossProduct(myorthonormal)).dotProduct(distance) > 0)
     104        return orxonox::Vector2(sin(angle) * radius, cos(angle) * radius);
     105    else
     106        return orxonox::Vector2(-sin(angle) * radius, cos(angle) * radius);
     107}
Note: See TracChangeset for help on using the changeset viewer.