src/tron/zone/zZoneInfluence.h

Go to the documentation of this file.
00001 #ifndef ArmageTron_ZoneInfluence_H
00002 #define ArmageTron_ZoneInfluence_H
00003 
00004 #include <boost/shared_ptr.hpp>
00005 #include <vector>
00006 #include "defs.h"
00007 #include "eCoord.h"
00008 #include "tSafePTR.h"
00009 #include "rColor.h"
00010 #include "tFunction.h"
00011 #include "tPolynomial.h"
00012 #include "tPolynomialMarshaler.h"
00013 #include "nNetwork.h"
00014 
00015 class zZone;
00016 //typedef boost::shared_ptr< zZone > zZonePtr;
00017 typedef tJUST_CONTROLLED_PTR< zZone> zZonePtr;
00018 
00019 class zZoneInfluenceItem;
00020 typedef boost::shared_ptr<zZoneInfluenceItem> zZoneInfluenceItemPtr;
00021 typedef std::vector<zZoneInfluenceItemPtr> zZoneInfluenceItemList;
00022 
00023 class zZoneInfluence {
00024 protected:
00025     zZonePtr zone;
00026     zZoneInfluenceItemList zoneInfluenceItems;
00027 
00028 public:
00029     zZoneInfluence(zZonePtr _zone);
00030     ~zZoneInfluence();
00031     void apply(const tPolynomial<nMessage> &value);
00032 
00033     void addZoneInfluenceRule(zZoneInfluenceItemPtr aRule) {
00034         zoneInfluenceItems.push_back(aRule);
00035     };
00036 };
00037 
00038 class zZoneInfluenceItem {
00039 protected:
00040     zZonePtr zone;
00041 public:
00042     zZoneInfluenceItem(zZonePtr aZone);
00043     virtual ~zZoneInfluenceItem();
00044 
00045     virtual void apply(const tPolynomial<nMessage> &value) {};
00046 };
00047 
00048 class zZoneInfluenceItemRotation : public zZoneInfluenceItem {
00049 protected:
00050     tPolynomialMarshaler<nMessage> rotation;
00051 public:
00052     zZoneInfluenceItemRotation(zZonePtr aZone);
00053     virtual ~zZoneInfluenceItemRotation() {};
00054 
00055     void set(const tPolynomialMarshaler<nMessage> & other)
00056     {
00057         rotation = other;
00058     }
00059 
00060     virtual void apply(const tPolynomial<nMessage> &value);
00061 };
00062 
00063 class zZoneInfluenceItemScale : public zZoneInfluenceItem {
00064 protected:
00065     REAL scale;
00066 public:
00067     zZoneInfluenceItemScale(zZonePtr aZone);
00068     virtual ~zZoneInfluenceItemScale() {};
00069 
00070     void set(REAL sca) {
00071         scale = sca;
00072     };
00073     virtual void apply(const tPolynomial<nMessage> &value);
00074 };
00075 
00076 class zZoneInfluenceItemPosition : public zZoneInfluenceItem {
00077 protected:
00078     eCoord pos;
00079 public:
00080     zZoneInfluenceItemPosition(zZonePtr aZone);
00081     virtual ~zZoneInfluenceItemPosition() {};
00082 
00083     void set(eCoord const & p) {
00084         pos = p;
00085     };
00086     virtual void apply(const tPolynomial<nMessage> &value);
00087 };
00088 
00089 class zZoneInfluenceItemColor : public zZoneInfluenceItem {
00090 protected:
00091     rColor color;
00092 public:
00093     zZoneInfluenceItemColor(zZonePtr aZone);
00094     virtual ~zZoneInfluenceItemColor() {};
00095 
00096     void set(rColor const & col) {
00097         color = col;
00098         color.a_ = color.a_ < 0.0?0.0:(color.a_>0.7?0.7:color.a_);
00099     };
00100     virtual void apply(const tPolynomial<nMessage> &value);
00101 };
00102 
00103 #include "zZone.h"
00104 
00105 #endif

Generated on Sat Mar 15 22:56:13 2008 for Armagetron Advanced by  doxygen 1.5.4