Advertisement
Guest User

Untitled

a guest
Oct 24th, 2014
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.76 KB | None | 0 0
  1.  
  2. #ifndef NEXUS_WATER_SURFACE_INTERFACE_H
  3. #define NEXUS_WATER_SURFACE_INTERFACE_H
  4.  
  5. #include "common/math/vector.h"
  6. #include "common/stl/stl_str.h"
  7. #include "kernel/resources/texture/i_texture.h"
  8. #include "kernel/base/interface.h"
  9.  
  10. namespace Nexus
  11. {
  12.    
  13.  
  14.     //*********************************************************************************************
  15.     //*********************************************************************************************
  16.     //*********************************************************************************************
  17.     //
  18.     //
  19.     // I_WaterSurface
  20.     //
  21.     //
  22.     //*********************************************************************************************
  23.     //*********************************************************************************************
  24.     //*********************************************************************************************
  25.  
  26.     class I_WaterSurface : public I_Interface
  27.     {
  28.     public:
  29.  
  30.         enum E_TextureType
  31.         {
  32.             E_TEX_NORMALS_LAYER0,
  33.             E_TEX_NORMALS_LAYER1,
  34.             E_TEX_NORMALS_LAYER2,
  35.             E_TEX_NORMALS_LAYER3,
  36.             E_TEX_FOAM,
  37.             E_NUM_TEXTURES
  38.         };
  39.  
  40.         static const UINT   NUM_NORMALS_LAYERS = 4;
  41.  
  42.         struct S_LayerParams
  43.         {
  44.             FLOAT       m_OrientationAng;
  45.             FLOAT       m_MovementSpeed;
  46.             FLOAT       m_NormalMapTilingScale;
  47.             FLOAT       m_NormalMapIntensityScale;
  48.  
  49.             S_LayerParams();
  50.         };
  51.  
  52.         struct S_GeomWavesLayer : public I_RefBaseObject
  53.         {
  54.             CStdString  m_Name;
  55.             bool        m_Enabled;
  56.             FLOAT       m_WindOrientationAngle;
  57.             FLOAT       m_WindDispersionAngle;
  58.             FLOAT       m_WavesAmplitudesScaler;
  59.             FLOAT       m_WavesSpeedsScaler;
  60.             FLOAT       m_WavesSpeedVariation;
  61.             FLOAT       m_WavesLengthsScaler;
  62.             FLOAT       m_MinWaveLength;
  63.             FLOAT       m_MaxWaveLength;
  64.             FLOAT       m_MinWaveLengthMaxAmplitude;
  65.             FLOAT       m_MaxWaveLengthMaxAmplitude;
  66.  
  67.             FLOAT       m_Steepness;
  68.             UINT        m_RandomSeed;
  69.             UINT        m_NumWaves;
  70.             Vector4     m_WavesLengths;
  71.             Vector4     m_WavesAmplitudes;
  72.  
  73.        
  74.             S_GeomWavesLayer();
  75.  
  76.  
  77.             virtual bool            SaveState(const CSmartPtrRef<Persistence::COutputNode> &node,const Persistence::CIOCtxBase &ctx);
  78.             virtual bool            RestoreState(const CSmartPtrRef<Persistence::CInputNode> &node,const Persistence::CIOCtxBase &ctx);
  79.  
  80.             virtual const CHAR *    GetReflexObjName() const    { return m_Name.c_str(); }
  81.  
  82.         private:
  83.  
  84.             template <typename T_Functor>
  85.             void        IOReflection(T_Functor &func);
  86.  
  87.             CStdString          m_SchemaId;
  88.  
  89.  
  90.             NX_DECLARE_RTTI;
  91.             NX_DECLARE_CVARS(17);
  92.         };
  93.  
  94.  
  95.         virtual FLOAT                   GetHeight() const = 0;
  96.         virtual void                    SetHeight(FLOAT v) = 0;
  97.  
  98.         virtual void                    SetTexture(E_TextureType texType,const CStdString &id) = 0;
  99.         virtual CSmartPtrRef<I_Texture> GetTexture(E_TextureType texType) const = 0;
  100.         virtual const CStdString &      GetTextureId(E_TextureType texType) const = 0;
  101.  
  102.         virtual const S_LayerParams &   GetLayerParams(UINT idx) const = 0;
  103.  
  104.         virtual Vector3                 GetScatterColor() const = 0;
  105.         virtual Vector3                 GetColorAttenuationFactors() const = 0;
  106.         virtual FLOAT                   GetScatteringCoeff() const = 0;
  107.  
  108.         virtual FLOAT                   GetSpecPower() const = 0;
  109.         virtual void                    SetSpecPower(FLOAT v) = 0;
  110.  
  111.         virtual FLOAT                   GetFresnelBias() const = 0;
  112.         virtual FLOAT                   GetFresnelPower() const = 0;
  113.         virtual FLOAT                   GetEdgeSofteningFactor() const = 0;
  114.         virtual FLOAT                   GetRefractionBumpsScale() const = 0;
  115.         virtual FLOAT                   GetReflectionsBumpsScale() const = 0;
  116.         virtual FLOAT                   GetProjGridSlideBackDist() const = 0;
  117.         virtual FLOAT                   GetFoamAmountScaler() const = 0;
  118.         virtual FLOAT                   GetFoamMaskSharpness() const = 0;
  119.  
  120.         virtual UINT                    NumGeomWavesLayers() const = 0;
  121.         virtual const S_GeomWavesLayer& GetGeomWavesLayer(UINT idx) const = 0;
  122.  
  123.     protected:
  124.  
  125.         I_WaterSurface();
  126.         virtual ~I_WaterSurface() {}
  127.  
  128.         NX_DECLARE_RTTI;
  129.     };
  130.  
  131.  
  132. } // Nexus
  133.  
  134.  
  135.  
  136.  
  137. //
  138. // CPP file
  139. //
  140.  
  141. #include "common/persistence/persistence.h"
  142. #include "kernel/interfaces/interfaces_ids.h"
  143. #include "kernel/interfaces/i_water_surf.h"
  144.  
  145. namespace Nexus
  146. {
  147.     NX_IMPLEMENT_RTTI(I_WaterSurface,I_Interface);
  148.     NX_IMPLEMENT_RTTI(I_WaterSurface::S_GeomWavesLayer,I_RefBaseObject);
  149.  
  150.  
  151.     NX_BEGIN_CVARS(I_WaterSurface::S_GeomWavesLayer,17);
  152.  
  153.     NX_REG_CVAR_STDSTR_USRID    (I_WaterSurface::S_GeomWavesLayer,  m_SchemaId,                     "schema",                   CVAR_READ);
  154.     NX_REG_CVAR_BOOL_USRID      (I_WaterSurface::S_GeomWavesLayer,  m_Enabled,                      "enabled",                  CVAR_READ | CVAR_WRITE);
  155.  
  156.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_WindOrientationAngle,         "windOrientation",          CVAR_READ | CVAR_WRITE);
  157.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_WindDispersionAngle,          "windDispersion",           CVAR_READ | CVAR_WRITE);
  158.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_WavesAmplitudesScaler,        "wavesAmplitudesScaler",    CVAR_READ | CVAR_WRITE);
  159.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_WavesSpeedsScaler,            "wavesSpeedsScaler",        CVAR_READ | CVAR_WRITE);
  160.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_WavesSpeedVariation,          "wavesSpeedVariation",      CVAR_READ | CVAR_WRITE);
  161.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_WavesLengthsScaler,           "wavesLengthsScaler",       CVAR_READ | CVAR_WRITE);
  162.  
  163.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_MinWaveLength,                "minWaveLength",            CVAR_READ | CVAR_WRITE);
  164.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_MaxWaveLength,                "maxWaveLength",            CVAR_READ | CVAR_WRITE);
  165.  
  166.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_MinWaveLengthMaxAmplitude,    "minWaveLengthMaxAmplitude",CVAR_READ | CVAR_WRITE);
  167.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_MaxWaveLengthMaxAmplitude,    "maxWaveLengthMaxAmplitude",CVAR_READ | CVAR_WRITE);
  168.  
  169.     NX_REG_CVAR_FLOAT_USRID     (I_WaterSurface::S_GeomWavesLayer,  m_Steepness,                    "steepness",                CVAR_READ | CVAR_WRITE);
  170.     NX_REG_CVAR_UINT_USRID      (I_WaterSurface::S_GeomWavesLayer,  m_RandomSeed,                   "randomSeed",               CVAR_READ | CVAR_WRITE);
  171.     NX_REG_CVAR_UINT_USRID      (I_WaterSurface::S_GeomWavesLayer,  m_NumWaves,                     "numWaves",                 CVAR_READ | CVAR_WRITE);
  172.  
  173.     NX_REG_CVAR_VECT4F_USRID    (I_WaterSurface::S_GeomWavesLayer,  m_WavesLengths,                 "wavesLengths",             CVAR_READ | CVAR_WRITE);
  174.     NX_REG_CVAR_VECT4F_USRID    (I_WaterSurface::S_GeomWavesLayer,  m_WavesAmplitudes,              "wavesAmplitudes",          CVAR_READ | CVAR_WRITE);
  175.  
  176.     NX_END_CVARS(I_WaterSurface::S_GeomWavesLayer);
  177.  
  178.  
  179.  
  180.     I_WaterSurface::S_LayerParams::S_LayerParams()
  181.         :m_OrientationAng(0)
  182.         ,m_MovementSpeed(0.005f)
  183.         ,m_NormalMapTilingScale(1)
  184.         ,m_NormalMapIntensityScale(1)
  185.     {
  186.     }
  187.  
  188.     I_WaterSurface::S_GeomWavesLayer::S_GeomWavesLayer()
  189.         :m_Name("Default")
  190.         ,m_Enabled(true)
  191.         ,m_WindOrientationAngle(0)
  192.         ,m_WindDispersionAngle(360)
  193.         ,m_WavesAmplitudesScaler(1)
  194.         ,m_WavesSpeedsScaler(1)
  195.         ,m_WavesSpeedVariation(0.25f)
  196.         ,m_WavesLengthsScaler(1)
  197.         ,m_MinWaveLength(1)
  198.         ,m_MaxWaveLength(70)
  199.         ,m_MinWaveLengthMaxAmplitude(0.1f)
  200.         ,m_MaxWaveLengthMaxAmplitude(3)
  201.         ,m_Steepness(2)
  202.         ,m_RandomSeed(2)
  203.         ,m_NumWaves(16)
  204.         ,m_WavesLengths(107,67,23,11)
  205.         ,m_WavesAmplitudes(4,2,1,0.5f)
  206.         ,m_SchemaId("GeomWavesLayer")
  207.     {
  208.         NX_INIT_CVARS(I_WaterSurface::S_GeomWavesLayer);
  209.     }
  210.  
  211.     I_WaterSurface::I_WaterSurface()
  212.         :I_Interface(IID_WATER_SURFACE)
  213.     {
  214.     }
  215.  
  216.  
  217.     bool I_WaterSurface::S_GeomWavesLayer::SaveState(const CSmartPtrRef<Persistence::COutputNode> &node,const Persistence::CIOCtxBase &ctx)
  218.     {
  219.         IOReflection(*node);
  220.  
  221.         return true;
  222.     }
  223.  
  224.     bool I_WaterSurface::S_GeomWavesLayer::RestoreState(const CSmartPtrRef<Persistence::CInputNode> &node,const Persistence::CIOCtxBase &ctx)
  225.     {
  226.         IOReflection(*node);
  227.  
  228.         return true;
  229.     }
  230.  
  231.  
  232.     template <typename T_Functor>
  233.     void I_WaterSurface::S_GeomWavesLayer::IOReflection(T_Functor &func)
  234.     {
  235.         func.Process(CToken("name").Get(),m_Name);
  236.         func.Process(CToken("enabled").Get(),m_Enabled);
  237.         func.Process(CToken("windOrientationAngle").Get(),m_WindOrientationAngle);
  238.         func.Process(CToken("windDispersion").Get(),m_WindDispersionAngle);
  239.         func.Process(CToken("wavesAmplitudesScaler").Get(),m_WavesAmplitudesScaler);
  240.         func.Process(CToken("wavesSpeedsScaler").Get(),m_WavesSpeedsScaler);
  241.         func.Process(CToken("wavesSpeedsVariation").Get(),m_WavesSpeedVariation);
  242.         func.Process(CToken("wavesLengthsScaler").Get(),m_WavesLengthsScaler);
  243.         func.Process(CToken("minWaveLength").Get(),m_MinWaveLength);
  244.         func.Process(CToken("maxWaveLength").Get(),m_MaxWaveLength);
  245.         func.Process(CToken("minWaveLengthMaxAmp").Get(),m_MinWaveLengthMaxAmplitude);
  246.         func.Process(CToken("maxWaveLengthMaxAmp").Get(),m_MaxWaveLengthMaxAmplitude);
  247.  
  248.         func.Process(CToken("steepness").Get(),m_Steepness);
  249.         func.Process(CToken("randomSeed").Get(),m_RandomSeed);
  250.         func.Process(CToken("numWaves").Get(),m_NumWaves);
  251.         func.Process(CToken("wavesLengths").Get(),m_WavesLengths);
  252.         func.Process(CToken("wavesAmplitudes").Get(),m_WavesAmplitudes);               
  253.     }
  254.  
  255. } // Nexus
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement