[Orxonox-commit 6131] r10789 - in code/branches/AI_HS15: data/levels src/orxonox/controllers

gania at orxonox.net gania at orxonox.net
Mon Nov 9 16:38:03 CET 2015


Author: gania
Date: 2015-11-09 16:38:02 +0100 (Mon, 09 Nov 2015)
New Revision: 10789

Modified:
   code/branches/AI_HS15/data/levels/AITest.oxw
   code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc
   code/branches/AI_HS15/src/orxonox/controllers/CommonController.h
   code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc
   code/branches/AI_HS15/src/orxonox/controllers/FleetController.cc
   code/branches/AI_HS15/src/orxonox/controllers/SectionController.cc
   code/branches/AI_HS15/src/orxonox/controllers/WingmanController.cc
Log:
did nothing today

Modified: code/branches/AI_HS15/data/levels/AITest.oxw
===================================================================
--- code/branches/AI_HS15/data/levels/AITest.oxw	2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/data/levels/AITest.oxw	2015-11-09 15:38:02 UTC (rev 10789)
@@ -84,7 +84,7 @@
         </DivisionController>
       </controller>
     </SpaceShip>
-    <SpaceShip position="<?1000 ?>,<?lua print(1500+i*1000) ?>, -1600 ?>" lookat="0,0,0">
+    <!-- <SpaceShip position="<?1000 ?>,<?lua print(1500+i*1000) ?>, -1600 ?>" lookat="0,0,0">
       <templates>
         <Template link=spaceshipassff />
       </templates>
@@ -110,7 +110,7 @@
         <SectionController team=1>
         </SectionController>
       </controller>
-    </SpaceShip>
+    </SpaceShip> -->
     <?lua end ?>
    <!--  <SpaceShip position="4000, 1500, -1300 ?>" lookat="0,0,0">
       <templates>

Modified: code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc	2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc	2015-11-09 15:38:02 UTC (rev 10789)
@@ -44,16 +44,15 @@
 {
 
     RegisterClass(CommonController);
-    float SPEED = 0.7f;
-    float ROTATEFACTOR = 0.3f;
+    float SPEED = 0.7f/0.02f;
+    float ROTATEFACTOR = 0.3f/0.02f;
 
     CommonController::CommonController(Context* context) : Controller(context)
     {
         this->bSetupWorked = false;
 
-        this->targetMask_.exclude(ClassByString("BaseObject"));
-        this->targetMask_.include(ClassByString("WorldEntity"));
-        this->targetMask_.exclude(ClassByString("Projectile"));
+        this->executingManeuver_ = false;
+        this->executingMoveToPoint_ = false;
 
         RegisterObject(CommonController);
     }
@@ -172,30 +171,30 @@
 
 
     //copy the Roll orientation of given Quaternion.
-    void CommonController::copyOrientation(const Quaternion& orient)
+    void CommonController::copyOrientation(const Quaternion& orient, float dt)
     {
         //roll angle difference in radian
         float diff=orient.getRoll(false).valueRadians()-(this->getControllableEntity()->getOrientation().getRoll(false).valueRadians());
         while(diff>math::twoPi) diff-=math::twoPi;
         while(diff<-math::twoPi) diff+=math::twoPi;
-        this->getControllableEntity()->rotateRoll(diff*ROTATEFACTOR);
+        this->getControllableEntity()->rotateRoll(diff*ROTATEFACTOR * dt);
     }
-    void CommonController::copyTargetOrientation()
+    void CommonController::copyTargetOrientation(float dt)
     {
         if (bHasTargetOrientation_)
         {   
-            copyOrientation(targetOrientation_);
+            copyOrientation(targetOrientation_, dt);
         }
     }
 
 
 
 
-    void CommonController::moveToTargetPosition()
+    void CommonController::moveToTargetPosition(float dt)
     {
-        this->moveToPosition(this->targetPosition_);
+        this->moveToPosition(this->targetPosition_, dt);
     }
-    void CommonController::moveToPosition(const Vector3& target)
+    void CommonController::moveToPosition(const Vector3& target, float dt)
     {
         float factor = 1;
         if (!this->getControllableEntity())
@@ -226,8 +225,8 @@
         if (distance > tolerance)
         {
             //Yaw and Pitch are enough to start facing the target
-            this->getControllableEntity()->rotateYaw(-2.0f * ROTATEFACTOR * rotateX);
-            this->getControllableEntity()->rotatePitch(2.0f * ROTATEFACTOR * rotateY);
+            this->getControllableEntity()->rotateYaw(-2.0f * ROTATEFACTOR * rotateX * dt);
+            this->getControllableEntity()->rotatePitch(2.0f * ROTATEFACTOR * rotateY * dt);
 
             //300 works, maybe less is better
             if (distance < 400)
@@ -238,11 +237,11 @@
                 //Yaw and Pitch will adapt.
                 if (bHasTargetOrientation_)
                 {
-                    copyTargetOrientation();
+                    copyTargetOrientation(dt);
                 }
             }
 
-            this->getControllableEntity()->moveFrontBack(1.2f*SPEED*factor);
+            this->getControllableEntity()->moveFrontBack(1.2f*SPEED*factor * dt);
         }
         else
         {      
@@ -252,19 +251,21 @@
     }
     //to be called in action
     //PRE: relativeTargetPosition is desired position relative to the spaceship,
-    //angleRoll is the angle of Roll that should be applied by the end of the movement
-    //POST: targetPosition_ and angleRoll_ are set, so that it can be used by MoveAndRoll()
-    void MoveToPoint(const Vector3& relativeTargetPosition, float angleRoll)
+    //angleRoll is the angle in degrees of Roll that should be applied by the end of the movement
+    //POST: target orientation and position are set, so that it can be used by MoveAndRoll()
+    void CommonController::moveToPoint(const Vector3& relativeTargetPosition, float angleRoll)
     {
         ControllableEntity* entity = this->getControllableEntity();
         if (!entity)
-            return false;
+            return;
         Quaternion orient = entity->getWorldOrientation();
+        Quaternion rotation = Quaternion(Degree(angleRoll), Vector3::UNIT_Z);
 
         Vector3 target = orient * relativeTargetPosition + entity->getWorldPosition();
         setTargetPosition(target);
-        this->angleRoll_ = angleRoll;
-        this->angleRolled_ = 0;
+        orient = orient * rotation;
+        this->setTargetOrientation(orient);
+       
     }
     //to be called in tick
     //PRE: MoveToPoint was called
@@ -274,14 +275,21 @@
     //angular speed
     //if position reached with a certain tolerance, and angleRolled_ = angleRoll_, returns false,
     //otherwise returns true
-    bool MoveAndRoll(float dt)
+    //dt is normally around 0.02f, which makes it 1/0.02 = 50 frames/sec
+    bool CommonController::moveAndRoll(float dt)
     {
+        float factor = 1;
+        if (!this->getControllableEntity())
+            return false;
+        if (this->rank_ == Rank::DIVISIONLEADER)
+            factor = 0.8;
+        if (this->rank_ == Rank::SECTIONLEADER)
+            factor = 0.9;
         int tolerance = 60;
-        float rollDiff = angleRoll-angleRolled_;
-        float angleToRoll = 0;
+        
         ControllableEntity* entity = this->getControllableEntity();
         if (!entity)
-            return false;
+            return true;
         Vector2 coord = get2DViewCoordinates
             (entity->getPosition(), 
             entity->getOrientation() * WorldEntity::FRONT, 
@@ -301,44 +309,33 @@
             this->getControllableEntity()->rotateYaw(-2.0f * ROTATEFACTOR * rotateX * dt);
             this->getControllableEntity()->rotatePitch(2.0f * ROTATEFACTOR * rotateY * dt);
             
+            //Roll
+            if (bHasTargetOrientation_)
+            {
+                copyTargetOrientation(dt);
+            }
+          
             //Move
             this->getControllableEntity()->moveFrontBack(1.2f * SPEED * factor * dt);
-            
-            //Roll
-            angleToRoll = rollDiff * ROTATEFACTOR * dt;
-            this->getControllableEntity()->rotateRoll(angleToRoll);
-            angleRolled_ += angleToRoll;
             //if still moving, return false
             return false;
         }
         else
         {     
-            if (rollDiff > 0)
-            {
-                //Roll
-                angleToRoll = rollDiff * ROTATEFACTOR * dt;
-                this->getControllableEntity()->rotateRoll(angleToRoll);
-                angleRolled_ += angleToRoll;                
-
-                //Move
-                this->getControllableEntity()->moveFrontBack(0.6f * SPEED * factor);
-                return false;
-            }
+            
             //if finished, return true;
-            retun true;
+            return true;
         }
     }
 
-    float squaredDistanceToTarget()
+    float CommonController::squaredDistanceToTarget() const
     {
         if ( !this->getControllableEntity() )
             return 0;
         if ( !this->target_ )
-            return ( this->getControllableEntity()->
-                getPosition().squaredDistance(this->targetPosition_) );
+            return ( this->getControllableEntity()->getPosition().squaredDistance(this->targetPosition_) );
         else
-            return ( this->getControllableEntity()->
-                getPosition().squaredDistance(this->target_->getPosition()) );
+            return ( this->getControllableEntity()->getPosition().squaredDistance(this->target_->getPosition()) );
     }
     
     bool CommonController::isLookingAtTarget(float angle) const

Modified: code/branches/AI_HS15/src/orxonox/controllers/CommonController.h
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/CommonController.h	2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/CommonController.h	2015-11-09 15:38:02 UTC (rev 10789)
@@ -75,6 +75,7 @@
         };
     }
 
+
     class _OrxonoxExport CommonController : public Controller
     {
         public:
@@ -120,13 +121,16 @@
 
         protected:
 
-            void moveToPosition(const Vector3& target);
-            void moveToTargetPosition();
+            void moveToPoint(const Vector3& relativeTargetPosition, float angleRoll);
+            bool moveAndRoll(float dt);
+
+            void moveToPosition(const Vector3& target, float dt);
+            void moveToTargetPosition(float dt);
             //enum Mode {ROCKET, ATTACK, MOVE, HOLD};//TODO; implement DEFENCE, MOVING modes
 
             //Mode mode_;
-            void copyOrientation(const Quaternion& orient);
-            void copyTargetOrientation();
+            void copyOrientation(const Quaternion& orient, float dt);
+            void copyTargetOrientation(float dt);
 
             float squaredDistanceToTarget() const;
             void doFire();
@@ -159,8 +163,6 @@
             bool bShooting_;
             WeakPtr<ControllableEntity> objectiveTarget_;
 
-            float angleRolled_;
-            float angleRoll_;
 
 
             FormationMode::Value formationMode_;
@@ -168,8 +170,8 @@
             ManeuverType::Value maneuverType_;
             Maneuver::Value maneuver_;
 
-            ClassTreeMask               targetMask_;
-
+            bool executingManeuver_;
+            bool executingMoveToPoint_;
          
         private:
             

Modified: code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc	2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc	2015-11-09 15:38:02 UTC (rev 10789)
@@ -62,10 +62,14 @@
             this->doFire();
             this->bShooting_ = true;
         }*/
-     
-        if (this->bHasTargetPosition_)
+        
+       /* if (this->bHasTargetPosition_)
         {
             this->moveToTargetPosition();
+        }*/
+        if (executingMoveToPoint_)
+        {
+            executingMoveToPoint_ = !this->moveAndRoll(dt);
         }
         if (this->bShooting_)
             doFire();
@@ -80,7 +84,12 @@
 
         setTargetPositionOfFollower();
         setTargetPositionOfWingman();
-
+        if (!executingMoveToPoint_)
+        {
+            Vector3* targetPosition = new Vector3 (0, 0, -2000);
+            moveToPoint(*targetPosition, 180);
+            executingMoveToPoint_ = true;
+        }
         
         if (this->myFollower_ && this->target_)
             this->myFollower_->setTarget(this->target_);

Modified: code/branches/AI_HS15/src/orxonox/controllers/FleetController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/FleetController.cc	2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/FleetController.cc	2015-11-09 15:38:02 UTC (rev 10789)
@@ -68,7 +68,7 @@
         {
             (*it2)->setTargetPosition(this->getControllableEntity()->getWorldPosition());   
         }*/ 
-        for (ObjectList<Controller>::iterator it = ObjectList<Controller>::begin(); it; ++it)
+        /*for (ObjectList<Controller>::iterator it = ObjectList<Controller>::begin(); it; ++it)
         {
             if ((this->getControllableEntity()->getTeam() != (it)->getControllableEntity()->getTeam()) && (it)->getControllableEntity()->getTeam() == 0)
             {
@@ -78,7 +78,7 @@
                 }               
                 break;
             } 
-        }
+        }*/
 
     }
     void FleetController::tick(float dt)

Modified: code/branches/AI_HS15/src/orxonox/controllers/SectionController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/SectionController.cc	2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/SectionController.cc	2015-11-09 15:38:02 UTC (rev 10789)
@@ -60,7 +60,7 @@
         
         if (this->bHasTargetPosition_)
         {
-            this->moveToTargetPosition();
+            this->moveToTargetPosition(dt);
         }
         if (this->bShooting_)
             doFire();

Modified: code/branches/AI_HS15/src/orxonox/controllers/WingmanController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/WingmanController.cc	2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/WingmanController.cc	2015-11-09 15:38:02 UTC (rev 10789)
@@ -124,7 +124,7 @@
         }
         if (this->bHasTargetPosition_)
         {
-            this->moveToTargetPosition();
+            this->moveToTargetPosition(dt);
         } 
         
         if (this->bShooting_)




More information about the Orxonox-commit mailing list