00001 #ifndef __ENTITYMATERIALACTION_H__ 00002 #define __ENTITYMATERIALACTION_H__ 00003 00004 #include "OMKMaterial.h" 00005 #include "OMKAddOn.h" 00006 namespace OMK 00007 { 00008 namespace Vis 00009 { 00010 00011 //=========================================================================== 00013 class OMKADDON_API IMaterialPassAction : public IMaterialAction 00014 { 00015 public: 00017 IMaterialPassAction() : IMaterialAction() {} 00019 virtual ~IMaterialPassAction() {} 00020 protected: 00022 virtual void subEntityAction( SubEntityMaterial* subEntity ) const ; 00024 virtual void passAction( SubEntityMaterial* subEntity, Ogre::Pass* passDest, Ogre::Pass* passSrc ) const = 0 ; 00025 } ; 00026 00027 00028 //=========================================================================== 00030 class OMKADDON_API MaterialSetMaterialName : public IMaterialAction 00031 { 00032 public: 00034 MaterialSetMaterialName( const Ogre::String& materialName ) : IMaterialAction(), _materialName( materialName ) {} 00036 virtual ~MaterialSetMaterialName() {} 00037 protected: 00040 Ogre::String _materialName ; 00041 private: 00043 virtual void subEntityAction( SubEntityMaterial* subEntity ) const ; 00044 } ; 00045 00046 //=========================================================================== 00050 class OMKADDON_API MaterialSetSceneBlending : public IMaterialPassAction 00051 { 00052 public: 00054 MaterialSetSceneBlending( Ogre::SceneBlendType blendType ) : IMaterialPassAction(), _blendType( blendType ) {} 00056 virtual ~MaterialSetSceneBlending() {} 00057 protected: 00060 Ogre::SceneBlendType _blendType ; 00061 private: 00063 virtual void passAction( SubEntityMaterial* subEntity, Ogre::Pass* passDest, Ogre::Pass* passSrc ) const ; 00064 } ; 00065 00066 //=========================================================================== 00073 class OMKADDON_API MaterialSetTransparency : public IMaterialPassAction 00074 { 00075 public: 00077 MaterialSetTransparency( Ogre::Real transparency ) ; 00079 virtual ~MaterialSetTransparency() {} 00080 protected: 00083 Ogre::Real _transparency ; 00084 private: 00086 virtual bool entityAction( EntityMaterial* entity ) const ; 00088 virtual void passAction( SubEntityMaterial* subEntity, Ogre::Pass* passDest, Ogre::Pass* passSrc ) const ; 00089 } ; 00090 00091 //=========================================================================== 00095 class OMKADDON_API MaterialSetAwareness : public IMaterialPassAction 00096 { 00097 public: 00099 MaterialSetAwareness( const Ogre::Vector4& awarenessColor ) : IMaterialPassAction(), _awarenessColor( awarenessColor ) {} 00101 virtual ~MaterialSetAwareness() {} 00102 protected: 00105 Ogre::Vector4 _awarenessColor ; 00106 private: 00108 virtual void passAction( SubEntityMaterial* subEntity, Ogre::Pass* passDest, Ogre::Pass* passSrc ) const ; 00111 inline float computeBlend( float currentPrm, float awarenessPrm ) const 00112 { 00113 return ( 1.0f - _awarenessColor.w ) * currentPrm + _awarenessColor.w * awarenessPrm ; 00114 } 00117 Ogre::ColourValue computeBlend( const Ogre::ColourValue& currentColor ) const ; 00118 } ; 00119 00120 //=========================================================================== 00130 class OMKADDON_API IsProgrammable : public IMaterialAction 00131 { 00132 public: 00134 IsProgrammable() : _isProgrammable( false ) {} 00136 virtual ~IsProgrammable() {} 00138 operator bool() { return _isProgrammable ; } 00139 private: 00141 mutable bool _isProgrammable ; 00143 virtual void subEntityAction( SubEntityMaterial* subEntity ) const ; 00144 } ; 00145 00146 //=========================================================================== 00149 class OMKADDON_API MaterialSetShader : public IMaterialAction 00150 { 00151 public: 00153 MaterialSetShader( const std::string & fragment, 00154 const std::string & vertex, 00155 Ogre::GpuProgramParameters *fragmentPrm, 00156 Ogre::GpuProgramParameters *vertexPrm, 00157 bool light, 00158 const std::string & texture = "null" ) 00159 : _fragment( fragment ), 00160 _vertex( vertex ), 00161 _fragmentPrm( fragmentPrm ), 00162 _vertexPrm( vertexPrm ), 00163 _light( light ), 00164 _texture( texture ) 00165 {} 00167 virtual ~MaterialSetShader() {} 00168 private: 00170 00171 std::string _fragment ; 00172 std::string _vertex ; 00173 Ogre::GpuProgramParameters *_fragmentPrm ; 00174 Ogre::GpuProgramParameters *_vertexPrm ; 00175 bool _light ; 00176 std::string _texture ; 00178 00179 virtual void subEntityAction( SubEntityMaterial* subEntity ) const ; 00180 } ; 00181 00182 //=========================================================================== 00184 class OMKADDON_API MaterialAddPickUDO : public IMaterialAction 00185 { 00186 public: 00188 MaterialAddPickUDO() {} 00190 virtual ~MaterialAddPickUDO() {} 00191 private: 00193 virtual bool entityAction( EntityMaterial* entity ) const ; 00194 } ; 00195 00196 //=========================================================================== 00198 class OMKADDON_API MaterialRemovePickUDO : public IMaterialAction 00199 { 00200 public: 00202 MaterialRemovePickUDO() {} 00204 virtual ~MaterialRemovePickUDO() {} 00205 private: 00207 virtual bool entityAction( EntityMaterial* entity ) const ; 00208 } ; 00209 //=========================================================================== 00210 00211 } // namespace Vis 00212 } // namespace OMK 00213 00214 #endif // __ENTITYMATERIALACTION_H__ 00215 00216
Documentation generated on Mon Jun 9 11:45:56 2008 |
Generated with doxygen by Dimitri van Heesch , 1997-2007 |