Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jun 9, 2011, 11:40:54 PM (14 years ago)
Author:
jo
Message:

First successful attempt, to make bots shoot rockets. Unfortunately they're shooting the wrong ones.

Location:
code/branches/ai/src/orxonox
Files:
6 edited

Legend:

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

    r8238 r8701  
    3535#include "worldentities/pawns/Pawn.h"
    3636
    37 //Todo: Bot soll pickupspawner besuchen können, falls Pickup vorhanden
     37//Todo: Bot soll pickupspawner besuchen können, falls Pickup vorhanden --modules/weapons/
    3838namespace orxonox
    3939{
     
    205205        float random;
    206206        float maxrand = 100.0f / ACTION_INTERVAL;
    207        
     207       
    208208        if (!this->isActive())
    209209            return;
    210210
    211         if (this->state_ == MASTER)
    212         {
    213             if (this->specificMasterAction_ ==  NONE)
     211        if(this->mode_ == DEFAULT)
     212        {
     213            if (this->state_ == MASTER)
     214            {
     215                if (this->specificMasterAction_ ==  NONE)
     216                {
     217                    if (this->target_)
     218                    {
     219                        if (!this->target_->getRadarVisibility()) /* So AI won't shoot invisible Spaceships */
     220                            this->forgetTarget();
     221                        else
     222                        {
     223                            this->aimAtTarget();
     224                            random = rnd(maxrand);
     225                            if(this->botlevel_*100 > random)
     226                                this->follow();//If a bot is shooting a player, it shouldn't let him go away easily.
     227                        }
     228                    }
     229
     230                    if (this->bHasTargetPosition_)
     231                        this->moveToTargetPosition();
     232
     233                    this->doFire();
     234                }
     235
     236                if (this->specificMasterAction_  == TURN180)
     237                    this->turn180();
     238
     239                if (this->specificMasterAction_ == SPIN)
     240                    this->spin();
     241                if (this->specificMasterAction_ == FOLLOW)
     242                    this->follow();
     243            }
     244
     245            if (this->state_ == SLAVE)
     246            {
     247                if (this->bHasTargetPosition_)
     248                    this->moveToTargetPosition();
     249            }
     250
     251            if (this->state_ == FREE)
    214252            {
    215253                if (this->target_)
     
    223261                        if(this->botlevel_*100 > random)
    224262                            this->follow();//If a bot is shooting a player, it shouldn't let him go away easily.
    225                     }
     263                     }
    226264                }
    227265
     
    231269                this->doFire();
    232270            }
    233 
    234             if (this->specificMasterAction_  == TURN180)
    235                     this->turn180();
    236 
    237             if (this->specificMasterAction_ == SPIN)
    238                     this->spin();
    239             if (this->specificMasterAction_ == FOLLOW)
    240                     this->follow();
    241         }
    242 
    243         if (this->state_ == SLAVE)
    244         {
    245             if (this->bHasTargetPosition_)
    246                 this->moveToTargetPosition();
    247         }
    248 
    249         if (this->state_ == FREE)
    250         {
    251             if (this->target_)
    252             {
    253                 if (!this->target_->getRadarVisibility()) /* So AI won't shoot invisible Spaceships */
    254                     this->forgetTarget();
    255                 else
    256                 {
    257                     this->aimAtTarget();
    258                     random = rnd(maxrand);
    259                     if(this->botlevel_*100 > random)
    260                         this->follow();//If a bot is shooting a player, it shouldn't let him go away easily.
     271        }//END_OF DEFAULT MODE
     272        else if (this->mode_ == ROCKET)
     273        {   
     274            ControllableEntity *controllable = this->getControllableEntity();
     275            if(controllable)
     276            {
     277                 if(controllable->getRocket())//Check wether the bot is controlling the rocket.
     278                 {
     279                     this->follow(); //TODO: CHECK: does follow make the bot crash into the target_ ?
    261280                 }
    262             }
    263 
    264             if (this->bHasTargetPosition_)
    265                 this->moveToTargetPosition();
    266 
    267             this->doFire();
    268         }
    269 
     281                 else
     282                     this->mode_ = DEFAULT;//no rocket -> get out of rocket mode
     283            }
     284            else
     285                this->mode_ = DEFAULT;//If bot dies -> getControllableEntity == NULL -> get out of ROCKET mode
     286        }//END_OF ROCKET MODE
    270287        SUPER(AIController, tick, dt);
    271288    }
    272289
    273290}
     291
  • code/branches/ai/src/orxonox/controllers/AIController.h

    r5929 r8701  
    5555
    5656#endif /* _AIController_H__ */
     57
  • code/branches/ai/src/orxonox/controllers/ArtificialController.cc

    r8239 r8701  
    8888        this->numberOfWeapons = 0;
    8989        this->botlevel_ = 1.0f;
     90        this->mode_ = DEFAULT;
    9091    }
    9192
     
    10341035        else if(this->getControllableEntity()&&(numberOfWeapons>0)&&this->bShooting_ && this->isCloseAtTarget((1 + 2*botlevel_)*1000) && this->isLookingAtTarget(math::pi / 20.0f))
    10351036        {
    1036             if (this->isCloseAtTarget(130) && this->isLookingAtTarget(math::pi / 20.0f)&&(weapons[1]==1) )
     1037            /*if (this->isCloseAtTarget(130) && this->isLookingAtTarget(math::pi / 20.0f)&&(weapons[1]==1) )
     1038            {//LENSFLARE: short range weapon     
    10371039                this->getControllableEntity()->fire(1); //ai uses lens flare if they're close enough to the target
    1038 
    1039           //default fire (laser)
    1040           else if ((weapons[0]==0))
    1041                this->getControllableEntity()->fire(0);
     1040            }
     1041            else if(this->isLookingAtTarget(math::pi / 20.0f)&&(weapons[3]==3)&& this->isCloseAtTarget(260) &&projectiles[3] )*/
     1042            {//ROCKET: mid range weapon
     1043                //TODO: Which weapon is the rocket? How many rockets are available?
     1044                this->mode_ = ROCKET;
     1045                //TODO: this->rockettimer->start()
     1046                this->getControllableEntity()->fire(3);//launch rocket
     1047                this->projectiles[3]-=1;//decrease ammo !!
     1048            }
     1049           
     1050            /*else if ((weapons[0]==0))//LASER: default weapon
     1051                this->getControllableEntity()->fire(0);*/
    10421052        }
    10431053    }
     
    10451055        @brief Information gathering: Which weapons are ready to use?
    10461056    */
    1047     void ArtificialController::setupWeapons()
     1057    void ArtificialController::setupWeapons() //TODO: Make this function generic!! (at the moment is is based on conventions)
    10481058    {
    10491059        if(this->getControllableEntity())
     
    10571067                      {
    10581068                          weapons[i]=i;
     1069                          projectiles[i]=1;//TODO: how to express infinite ammo? how to get data??
    10591070                          numberOfWeapons++;
    10601071                      }
     
    10621073                          weapons[i]=-1;
    10631074                 }
     1075                 //pawn->weaponSystem_->getMunition(SubclassIdentifier< Munition > *identifier)->getNumMunition (WeaponMode *user);
    10641076            }
    10651077        }
     
    10701082    {
    10711083        if (level < 0.0f)
    1072             this->botlevel_ = 0.0f;
    1073         else if (level > 1.0f)
    1074             this->botlevel_ = 1.0f;
    1075         else
     1084            this->botlevel_ = 0.0f;
     1085        else if (level > 1.0f)
     1086            this->botlevel_ = 1.0f;
     1087        else
    10761088            this->botlevel_ = level;
    10771089    }
     
    10841096   
    10851097}
     1098
  • code/branches/ai/src/orxonox/controllers/ArtificialController.h

    r7842 r8701  
    146146            bool bShooting_;
    147147           
    148             int numberOfWeapons;
     148            int numberOfWeapons;//< Used for weapon init function. Displayes number of weapons available for a bot.
    149149            int weapons[WeaponSystem::MAX_WEAPON_MODES];
     150            int projectiles[WeaponSystem::MAX_WEAPON_MODES];
    150151            float botlevel_; //< Makes the level of a bot configurable.
     152
     153            enum Mode {DEFAULT, ROCKET, DEFENCE, MOVING};//TODO; implement DEFENCE, MOVING modes
     154            Mode mode_;
    151155
    152156        private:
     
    157161
    158162#endif /* _ArtificialController_H__ */
     163
  • code/branches/ai/src/orxonox/worldentities/ControllableEntity.cc

    r7534 r8701  
    8888        this->setPriority( Priority::VeryHigh );
    8989        this->registerVariables();
     90        this->bIsRocket=false;
    9091    }
    9192
  • code/branches/ai/src/orxonox/worldentities/ControllableEntity.h

    r7533 r8701  
    155155                { return this->target_.get(); }
    156156            void setTargetInternal( uint32_t targetID );
     157            inline bool getRocket() const
     158                {return this-> bIsRocket;}
    157159
    158160        protected:
     
    168170
    169171            Ogre::SceneNode* cameraPositionRootNode_;
     172            bool bIsRocket; //Workaround to see, if the controllable entity is a Rocket.
    170173
    171174        private:
Note: See TracChangeset for help on using the changeset viewer.