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