00001
00009 #ifndef LIBRARYBEHAVIORS_H
00010 #define LIBRARYBEHAVIORS_H
00011
00012 #include "BehaviorTemplate.h"
00013 #include "BehaviorInstance.h"
00014 #include "System.h"
00015 #include "EntityInstance.h"
00016
00017 namespace green
00018 {
00024 class PEntity
00025 {
00026 public:
00030 PEntity() :
00031 x(0.0),
00032 y(0.0),
00033 xs(0.0),
00034 ys(0.0),
00035 rot(0.0)
00036 {}
00037
00042 PEntity(EntityInstancePtr entity) :
00043 x(entity->GetVariable(0).floatVal),
00044 y(entity->GetVariable(1).floatVal),
00045 xs(entity->GetVariable(2).floatVal),
00046 ys(entity->GetVariable(3).floatVal),
00047 rot(entity->GetVariable(4).floatVal)
00048 {}
00049
00055 void SetEntity(EntityInstancePtr entity) const
00056 {
00057 entity->SetVariable(0, x);
00058 entity->SetVariable(1, y);
00059 entity->SetVariable(2, xs);
00060 entity->SetVariable(3, ys);
00061 entity->SetVariable(4, rot);
00062 }
00063
00064 float x, y, xs, ys, rot;
00065
00066 };
00067
00072 class MoveBehavior
00073 {
00074 public:
00079 static BehaviorTemplatePtr CreateTemplate()
00080 {
00081
00082
00083
00084
00085 InitFormatPtr emptyInitFormat(new InitFormat());
00086
00087
00088 BehaviorTemplatePtr newBehaviorTemplate(new BehaviorTemplate());
00089
00090
00091 newBehaviorTemplate->SetInitFormat(emptyInitFormat);
00092
00093 return newBehaviorTemplate;
00094 }
00095
00107 static bool RunBehavior(SystemPtr sys, BehaviorInstancePtr behavior,
00108 EntityInstancePtr originalTarget,
00109 EntityInstancePtr newTarget)
00110 {
00111 CHECK_SHARED(sys);
00112 CHECK_SHARED(behavior);
00113 CHECK_SHARED(originalTarget);
00114 CHECK_SHARED(newTarget);
00115
00116 double deltaT = sys->GetTimer().GetTimeDelta();
00117
00118 PEntity tent(newTarget);
00119 tent.x += tent.xs * deltaT;
00120 tent.y += tent.ys * deltaT;
00121 tent.rot += 360.0 * deltaT;
00122
00123
00124
00125 tent.SetEntity(newTarget);
00126 return true;
00127 }
00128
00129 };
00130
00131 }
00132
00133
00134
00135 #endif