Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 27, 2010, 10:16:08 PM (14 years ago)
Author:
gasserlu
Message:

drone smooth flight mode & minmaxDistance, multiple drones possible

Location:
code/branches/ai/src/orxonox/controllers
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • code/branches/ai/src/orxonox/controllers/ArtificialController.cc

    r6986 r6991  
    762762        if (droneController && static_cast<ControllableEntity*>(droneController->getOwner()) == entity1)
    763763            return true;
     764        DroneController* droneController1 = orxonox_cast<DroneController*>(entity1->getController());
     765        DroneController* droneController2 = orxonox_cast<DroneController*>(entity2->getController());
     766        if (droneController1 && droneController2 && droneController1->getOwner() == droneController2->getOwner())
     767            return true;
    764768
    765769        return (team1 == team2 && team1 != -1);
  • code/branches/ai/src/orxonox/controllers/DroneController.cc

    r6918 r6991  
    8080
    8181        const Vector3& locOwnerDir = getDrone()->getOrientation().UnitInverse()*(ownerPosition-dronePosition); //Vector from Drone To Owner out of drones local coordinate system
    82 /*
    83         int distance_square  = (ownerPosition.x-dronePosition.x)*(ownerPosition.x-dronePosition.x)
    84                              + (ownerPosition.y-dronePosition.y)*(ownerPosition.y-dronePosition.y)
    85                              + (ownerPosition.z-dronePosition.z)*(ownerPosition.z-dronePosition.z); //distance to Owner squared
    86 */
     82
    8783        random = rnd(maxrand);
    8884        if ( random < 30 && (!this->target_))
    8985            this->searchNewTarget();
    90 /*
    91         //face target
    92         drone_->rotateYaw(-targetPosition_.x);
    93         drone_->rotatePitch(targetPosition_.y);
    94   */     
    95         if (this->target_)
     86
     87        if (random < 50 && this->target_)
    9688        {
     89            this->isShooting_ = true;
    9790            this->aimAtTarget();
     91            drone_->rotateYaw(targetPosition_.x);   //face target
     92            drone_->rotatePitch(targetPosition_.y);
    9893            drone_->fire(0);
     94            this->isShooting_ = false;
    9995        }
    100          
    10196
    102 
    103 /*
    104         COUT(0) << "Drone: " << dronePosition << endl;
    105         COUT(0) << "Distance: " << distance << endl;
    106         COUT(0) << "locDrone: " << locOwnerDir << endl;
    107         COUT(0) << "target: " << targetPosition_ << endl;
    108         COUT(0) << "Owner: " << ownerPosition << endl;
    109         COUT(0) << "Rand: " << random << endl;
    110 */
    111 /*
    112         // search enemy
    113         random = rnd(maxrand);
    114         if (random < 15 && (!this->target_))
    115             this->searchNewTarget();
    116 
    117         // forget enemy
    118         random = rnd(maxrand);
    119         if (random < 5 && (this->target_))
    120             this->forgetTarget();
    121 
    122         // next enemy
    123         random = rnd(maxrand);
    124         if (random < 10 && (this->target_))
    125             this->searchNewTarget();
    126 
    127         //fly somewhere
    128         random = rnd(maxrand);
    129         if (random < 50 && (!this->bHasTargetPosition_ && !this->target_))
    130             this->searchRandomTargetPosition();
    131  
    132         // stop flying
    133         random = rnd(maxrand);
    134         if (random < 10 && (this->bHasTargetPosition_ && !this->target_))
    135             this->bHasTargetPosition_ = false;
    136 
    137         // fly somewhere else
    138         random = rnd(maxrand);
    139         if (random < 30 && (this->bHasTargetPosition_ && !this->target_))
    140             this->searchRandomTargetPosition();
    141 
    142         // shoot
    143         random = rnd(maxrand);
    144         if (random < 75 && (this->target_ && !this->bShooting_))
    145             this->bShooting_ = true;
    146 
    147         // stop shooting
    148         random = rnd(maxrand);
    149         if (random < 25 && (this->bShooting_))
    150             this->bShooting_ = false; */
    15197    }
    15298
    153 
    154     /**
     99    /*
    155100    @brief
    156101        The controlling happens here. This method defines what the controller has to do each tick.
     
    163108
    164109        Drone *myDrone = static_cast<Drone*>(this->getControllableEntity());
    165 
    166         if ((this->getDrone()->getWorldPosition() - this->getOwner()->getWorldPosition()).squaredLength()  > 150*150) { //TODO: variable implementation of maxdistance
     110        float maxDistanceSquared = this->getDrone()->getMaxDistanceToOwner()*this->getDrone()->getMaxDistanceToOwner();
     111        float minDistanceSquared = this->getDrone()->getMinDistanceToOwner()*this->getDrone()->getMinDistanceToOwner();
     112        if ((this->getDrone()->getWorldPosition() - this->getOwner()->getWorldPosition()).squaredLength()  > maxDistanceSquared) {
    167113            this->moveToPosition(this->getOwner()->getWorldPosition());
    168 
    169114        }
    170 
     115        else if((this->getDrone()->getWorldPosition() - this->getOwner()->getWorldPosition()).squaredLength() < minDistanceSquared) {
     116            this->moveToPosition(-this->getOwner()->getWorldPosition());
     117        }
     118        else if(!isShooting_) {
     119            float random = rnd(2.0f);
     120            float randomSelection = rnd(6.0f);
     121            if((int)randomSelection==0) drone_->moveUpDown(random);
     122            else if((int)randomSelection==1) drone_->moveRightLeft(random);
     123            else if((int)randomSelection==2) drone_->moveFrontBack(random);
     124            else if((int)randomSelection==3) drone_->rotateYaw(random);
     125            else if((int)randomSelection==4) drone_->rotatePitch(random);
     126            else if((int)randomSelection==5) drone_->rotateRoll(random);
     127        }
    171128        SUPER(AIController, tick, dt);
    172129
  • code/branches/ai/src/orxonox/controllers/DroneController.h

    r6918 r6991  
    6666            virtual void action();
    6767            void ownerDied();
     68            bool isShooting_;
    6869
    6970        private:
Note: See TracChangeset for help on using the changeset viewer.