00001 #if defined (_MSC_VER) && (_MSC_VER >= 1000)
00002 #pragma once
00003 #endif
00004 #ifndef _INC_ORGANISM
00005 #define _INC_ORGANISM
00006
00007 #include "ControlCenter.h"
00008
00009 #include "Physics.h"
00010
00011 #include "Geometric.h"
00012
00013 namespace mial
00014 {
00015
00017
00057 template<class DataType,int nDims>
00058 class Organism
00059 {
00060 protected:
00061
00063 typename Physics<DataType,nDims>::Pointer physLayer;
00064
00066 typename Geometric<DataType,nDims>::Pointer geomLayer;
00067
00069 typename ControlCenter<DataType,nDims>::Pointer cgLayer;
00070
00071 DataType runTime;
00072
00073 public:
00074
00076 typedef Geometric<DataType,nDims> GeometricType;
00077
00078
00079
00081
00085 virtual bool addBehaviour( Behavior<DataType,nDims> * b,bool replacePhys=true ){if(b!=NULL){if(replacePhys){b->setPhysLayer(physLayer);}return cgLayer->addBehavior(b);}else{ return false;}};
00086
00088
00091 virtual bool addDeformation( Deformation<DataType,nDims> * d ){ return physLayer->addDeformation(d); };
00092
00094
00097 virtual bool setCognitiveLayer( ControlCenter<DataType,nDims> *c ){ if(c!=NULL){cgLayer = c;return true;}else{return false;}};
00098
00099
00101
00104 virtual bool setPhysicsLayer( Physics<DataType,nDims> * p ){if(p!=NULL){physLayer = p; return true;}else{ return false;} };
00105
00107
00110 virtual bool setGeometricLayer( Geometric<DataType,nDims> * g ){if(g!=NULL){geomLayer = g; return true;}else{return false;} };
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00124
00127 virtual int run() =0;
00128
00129 virtual void setRunTime(DataType r){runTime = r;};
00130
00131 private:
00132
00133 };
00134
00135 }
00136 #include "Organism.cxx"
00137 #endif