command.h

Go to the documentation of this file.
00001 /*
00002  * command.h
00003  *
00004  *  Created on: Dec 21, 2011
00005  *      Author: sushil
00006  */
00007 
00008 #ifndef COMMAND_H_
00009 #define COMMAND_H_
00010 
00011 #include "DEBUG.h"
00012 #include <OgreVector3.h>
00013 
00014 #include<target.h>
00015 //#include<ent.h>
00016 #include "enums.h"
00017 
00018 namespace FastEcslent {
00019 
00020         enum CommandType {
00021                 MoveCommand     = 0,
00022                 AttackCommand   = 1,
00023                 RamCommand      = 2,
00024                 MaintainCommand = 3,
00025                 GatherCommand   = 4,
00026                 ConstructCommand= 5,
00027 
00028                 FLOCK
00029         };
00030 
00031 
00032         enum LeadershipType {
00033                 ClosestToTarget     = 0,
00034                 FurthestFromTarget  = 1,
00035                 MostMassive         = 2,
00036                 LeastMassive        = 3,
00037                 Random              = 4
00038         };
00039 
00040         class Entity;
00041         class Group;
00042 
00043         class Command {
00044         public:
00045                 CommandType commandType ;
00046                 Entity *entity; 
00047                 Command(CommandType ct,Entity *entity = NULL): entity(entity),commandType(ct) {};
00048                 Command(Command& orig): entity(orig.entity), commandType(orig.commandType) {};
00049 
00050                 virtual bool done() = 0;// {return false;}
00051                 virtual void init() = 0;
00052                 virtual void tick(double dt) = 0;
00053                 virtual void postProcess() = 0;
00054                 virtual Command* clone() {};
00055         };
00056         
00057         class BuildCommand : public Command {
00058 
00059         public:
00060 
00061             EntityType entType; 
00062             bool isDone; 
00064                 BuildCommand(Entity* entity, EntityType entType, CommandType ct): Command(ct), entType(entType), isDone(false) {this->entity = entity;}
00065                 BuildCommand(BuildCommand& orig): Command(orig.commandType), entType(orig.entType) {}
00066                 virtual bool done();
00067                 virtual void init();
00068                 virtual void tick(double dt);
00069                 virtual Command* clone() {return new BuildCommand(*this);}
00070                 virtual void postProcess() {};
00071 
00072         };
00073         
00074         class GasFieldCommand : public Command {
00075 
00076         public:
00077 
00078                 GasFieldCommand(CommandType ct,Entity *entity): Command(ct,entity) {}
00079                 GasFieldCommand(GasFieldCommand& orig): Command(orig.commandType) {}
00080                 virtual bool done();
00081                 virtual void init();
00082                 virtual void tick(double dt);
00083                 virtual Command* clone() {return new GasFieldCommand(*this);}
00084                 virtual void postProcess() {};
00085 
00086         };
00087 
00088 
00089         class UnitCommand : public Command {
00090 
00091         public:
00092 
00093                 Target *target;
00094                 //Entity *entity;
00095 
00096                 UnitCommand(Entity *ent, CommandType ct, Target* targ): Command(ct,ent) {
00097                         //entity = ent;
00098                         target = targ;
00099                 }
00100 
00101                 // vars
00102                 Ogre::Vector3 relativePos;
00103                 Ogre::Vector3 relativeVel;
00104                 Ogre::Vector3 predictedPos;
00105                 Ogre::Vector3 interceptPos;
00106 
00107                 double predictedTimeToClose;
00108                 double relativeSpeed;
00109         };
00110 
00111 
00112         class Tactic: public Command {
00113         public:
00114                 GroupTarget* target;
00115                 Group* group;
00116                 Tactic(Group* grp, CommandType ct, GroupTarget* trgt): Command(ct){
00117                         group = grp;
00118                         target = trgt;
00119                 }
00120 
00121                 int mostMassive(bool);
00122                 int closestToTarget(bool, Ogre::Vector3 tpos);
00123                 void changeLeadership(LeadershipType selector);
00124 
00125         };
00126         
00127 //        class BuildStructure: public UnitCommand {
00128 //      private:
00129 //                EntityType entType; /*! The type of entity the BuildCommand constructs */
00130 //              bool valid(Ogre::Vector3 pos){
00131 //                      return true;
00132 //              }
00133 //
00134 //      public:
00135 //              BuildStructure (Entity *ent, Target *tgt): UnitCommand(ent, MoveCommand, tgt) {
00136 //                      if(valid(tgt->location)) {
00137 //                              DEBUG(std::cout << "Moving to build at: " << tgt->location << std::endl;)
00138 //                      }
00139 //              }
00140 //              virtual bool done();
00141 //              virtual void init();
00142 //              virtual void tick(double dt);
00143 //              virtual void postProcess(){}; //called when the command is interrupted.
00144 //                virtual Command* clone() {};
00145 //      };
00146 
00147 
00148 
00149         class Move: public UnitCommand {
00150         private:
00151                 bool valid(Ogre::Vector3 pos){
00152                         return true;
00153                 }
00154 
00155         public:
00156                 Move (Entity *ent, Target *tgt): UnitCommand(ent, MoveCommand, tgt) {
00157                         if(valid(tgt->location)) {
00158                                 DEBUG(std::cout << "Moving to: " << tgt->location << std::endl;)
00159                         }
00160                 }
00161                 virtual bool done();
00162                 virtual void init();
00163                 virtual void tick(double dt);
00164                 virtual void postProcess(){}; //called when the command is interrupted.
00165                 virtual Command* clone() {};
00166         };
00167 
00168         //-----------------Wait--------------------------
00169         class Wait: public UnitCommand { // For SCVs
00170         private:
00171                 bool valid(Ogre::Vector3 pos){
00172                         return true;
00173                 }
00174 
00175         public:
00176                 Wait (Entity *ent, Target *tgt): UnitCommand(ent, GatherCommand, tgt) {
00177                         timeLeftToWait = tgt->waitTime;
00178                         DEBUG(std::cout << "Waiting for: " << tgt->waitTime << std::endl;)
00179                 }
00180                 bool finished;
00181                 double timeLeftToWait;
00182                 virtual bool done();
00183                 virtual void init();
00184                 virtual void tick(double dt);
00185                 void postProcess(){};
00186                 virtual Command* clone() {};
00187         };
00188         //---------------END--Gather--------------------------
00189 
00190 
00191         class PotentialMove: public UnitCommand {
00192         private:
00193                 bool valid(Ogre::Vector3 pos){
00194                         return true;
00195                 }
00196                 double A, B, B2, m, n, RepulsionThresholdDistance;
00197 
00198         public:
00199                 PotentialMove (Entity *ent, Target *tgt): UnitCommand(ent, MoveCommand, tgt) {
00200                         if(valid(tgt->location)) {
00201                                 DEBUG(std::cout << "Moving to: " << tgt->location << " using Potential Fields" << std::endl;)
00202                                 A = 1000.0;
00203                                 B = 800000.0;
00204                                 B2 = 3000000.0;
00205                                 m = 4.0;
00206                                 n = 1;
00207                                 RepulsionThresholdDistance = 10000;
00208                         }
00209                 }
00210                 virtual bool done();
00211                 virtual void init();
00212                 virtual void tick(double dt);
00213                 virtual void postProcess(){};
00214                 virtual Command* clone() {};
00215 
00216         };
00217 
00218         class Maintain: public UnitCommand {
00219         private:
00220                 bool valid (Entity *ent);
00221 
00222         public:
00223                 Maintain (Entity *ent, Target *tgt);
00224                 virtual bool done();
00225                 virtual void init();
00226                 virtual void tick(double dt);
00227                 virtual Command* clone() {};
00228 
00229         };
00230 
00231 }
00232 
00233 
00234 
00235 #endif /* COMMAND_H_ */

Generated on Fri Dec 13 14:54:15 2013 for FastECSLent by  doxygen 1.5.4