Advertisement
snake5

particle system editor - emitter class

Mar 1st, 2015
543
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.14 KB | None | 0 0
  1. struct EdEmitter : EDGUILayoutRow
  2. {
  3.     EdEmitter() :
  4.         grpSpawn( false, "Spawn properties" ),
  5.         spawn_MaxCount( 0, 0, MAX_PARTICLES ),
  6.         spawn_Count( 0, 0, MAX_PARTICLES ),
  7.         spawn_CountExt( 0, 0, MAX_PARTICLES ),
  8.         spawn_TimeExt( V2(0), 2, V2(0), V2(MAX_TIME) ),
  9.        
  10.         grpPosition( false, "Initial position" ),
  11.         create_Pos( V3(0), 2, V3(-MAX_POS), V3(MAX_POS) ),
  12.         create_PosBox( V3(0), 2, V3(0), V3(MAX_POS) ),
  13.         create_PosRadius( 0, 2, 0, MAX_POS ),
  14.        
  15.         grpVelocity( false, "Initial velocity" ),
  16.         create_VelMicroDir( V3(0), 2, V3(-MAX_NORMAL), V3(MAX_NORMAL) ),
  17.         create_VelMicroDvg( 0, 2, 0, 1 ),
  18.         create_VelMicroDistExt( V2(0), 2, V2(0), V2(MAX_VEL) ),
  19.         create_VelMacroDir( V3(0), 2, V3(-MAX_NORMAL), V3(MAX_NORMAL) ),
  20.         create_VelMacroDvg( 0, 2, 0, 1 ),
  21.         create_VelMacroDistExt( V2(0), 2, V2(0), V2(MAX_VEL) ),
  22.         create_VelCluster( 0, 0, MAX_PARTICLES ),
  23.         create_VelClusterExt( 0, 0, MAX_PARTICLES ),
  24.        
  25.         grpMisc( false, "Misc. properties" ),
  26.         create_LifetimeExt( V2(0), 2, V2(0), V2(MAX_TIME) ),
  27.         create_AngleDirDvg( V2(0), 2, V2(0,0), V2(360,180) ),
  28.         create_AngleVelDvg( V2(0), 2, V2(-1000), V2(1000) ),
  29.         tick_AngleAcc( 0, 2, -10000, 10000 ),
  30.         absolute( true ),
  31.        
  32.         grpSizeColor( false, "Size/color curves" ),
  33.         curve_Size( false, "Size" ),
  34.         curve_ColorHue( false, "Color - hue" ),
  35.         curve_ColorSat( false, "Color - saturation" ),
  36.         curve_ColorVal( false, "Color - value" ),
  37.         curve_Opacity( false, "Opacity" ),
  38.        
  39.         grpRender( true, "Rendering data" ),
  40.         render_Texture0( g_UITexPicker, "bullet" ),
  41.         render_Texture1( g_UITexPicker, "" ),
  42.         render_Texture2( g_UITexPicker, "" ),
  43.         render_Texture3( g_UITexPicker, "" ),
  44.         render_Shader( g_UIShaderPicker, "particle" ),
  45.         render_Additive( false ),
  46.         render_Stretch( false ),
  47.        
  48.         m_psys( NULL ), m_emitter( NULL )
  49.     {
  50.         spawn_MaxCount.caption = "Max. particle count";
  51.         spawn_Count.caption = "# of particles to spawn";
  52.         spawn_CountExt.caption = "# + random";
  53.         spawn_TimeExt.caption = "Spawn time / rand.ext.";
  54.        
  55.         create_Pos.caption = "Origin";
  56.         create_PosBox.caption = "Random extents";
  57.         create_PosRadius.caption = "Random radius";
  58.        
  59.         create_VelMicroDir.caption = "V/micro/direction";
  60.         create_VelMicroDvg.caption = "V/micro/divergence";
  61.         create_VelMicroDistExt.caption = "V/micro/dist+rand.ext.";
  62.         create_VelMacroDir.caption = "V/macro/direction";
  63.         create_VelMacroDvg.caption = "V/macro/divergence";
  64.         create_VelMacroDistExt.caption = "V/macro/dist+rand.ext.";
  65.         create_VelCluster.caption = "V - cluster size";
  66.         create_VelClusterExt.caption = "V - cluster rand.ext.";
  67.        
  68.         create_LifetimeExt.caption = "Lifetime + rand.ext.";
  69.         create_AngleDirDvg.caption = "Angle / divergence";
  70.         create_AngleVelDvg.caption = "Angular velocity / divergence";
  71.         tick_AngleAcc.caption = "Angle - acceleration";
  72.         absolute.caption = "World space";
  73.        
  74.         render_Texture0.caption = "Texture #1";
  75.         render_Texture1.caption = "Texture #2";
  76.         render_Texture2.caption = "Texture #3";
  77.         render_Texture3.caption = "Texture #4";
  78.         render_Shader.caption = "Shader";
  79.         render_Additive.caption = "Is additive+unlit?";
  80.         render_Stretch.caption = "Is velocity-stretched?";
  81.        
  82.         grpSpawn.Add( &spawn_MaxCount );
  83.         grpSpawn.Add( &spawn_Count );
  84.         grpSpawn.Add( &spawn_CountExt );
  85.         grpSpawn.Add( &spawn_TimeExt );
  86.         Add( &grpSpawn );
  87.        
  88.         grpPosition.Add( &create_Pos );
  89.         grpPosition.Add( &create_PosBox );
  90.         grpPosition.Add( &create_PosRadius );
  91.         Add( &grpPosition );
  92.        
  93.         grpVelocity.Add( &create_VelMicroDir );
  94.         grpVelocity.Add( &create_VelMicroDvg );
  95.         grpVelocity.Add( &create_VelMicroDistExt );
  96.         grpVelocity.Add( &create_VelMacroDir );
  97.         grpVelocity.Add( &create_VelMacroDvg );
  98.         grpVelocity.Add( &create_VelMacroDistExt );
  99.         grpVelocity.Add( &create_VelCluster );
  100.         grpVelocity.Add( &create_VelClusterExt );
  101.         Add( &grpVelocity );
  102.        
  103.         grpMisc.Add( &create_LifetimeExt );
  104.         grpMisc.Add( &create_AngleDirDvg );
  105.         grpMisc.Add( &create_AngleVelDvg );
  106.         grpMisc.Add( &tick_AngleAcc );
  107.         grpMisc.Add( &absolute );
  108.         Add( &grpMisc );
  109.        
  110.         grpSizeColor.Add( &curve_Size );
  111.         grpSizeColor.Add( &curve_ColorHue );
  112.         grpSizeColor.Add( &curve_ColorSat );
  113.         grpSizeColor.Add( &curve_ColorVal );
  114.         grpSizeColor.Add( &curve_Opacity );
  115.         Add( &grpSizeColor );
  116.        
  117.         grpRender.Add( &render_Texture0 );
  118.         grpRender.Add( &render_Texture1 );
  119.         grpRender.Add( &render_Texture2 );
  120.         grpRender.Add( &render_Texture3 );
  121.         grpRender.Add( &render_Shader );
  122.         grpRender.Add( &render_Additive );
  123.         grpRender.Add( &render_Stretch );
  124.         Add( &grpRender );
  125.     }
  126.    
  127.     int OnEvent( EDGUIEvent* e )
  128.     {
  129.         switch( e->type )
  130.         {
  131.         case EDGUI_EVENT_PROPEDIT:
  132.             if( e->target == &spawn_MaxCount ){ m_emitter->spawn_MaxCount = spawn_MaxCount.m_value; _U(false); }
  133.             if( e->target == &spawn_Count ){ m_emitter->spawn_Count = spawn_Count.m_value; _U(false); }
  134.             if( e->target == &spawn_CountExt ){ m_emitter->spawn_CountExt = spawn_CountExt.m_value; _U(false); }
  135.             if( e->target == &spawn_TimeExt ){ m_emitter->spawn_TimeExt = spawn_TimeExt.m_value; _U(false); }
  136.             if( e->target == &create_Pos ){ m_emitter->create_Pos = create_Pos.m_value; _U(false); }
  137.             if( e->target == &create_PosBox ){ m_emitter->create_PosBox = create_PosBox.m_value; _U(false); }
  138.             if( e->target == &create_PosRadius ){ m_emitter->create_PosRadius = create_PosRadius.m_value; _U(false); }
  139.             if( e->target == &create_VelMicroDir ){ m_emitter->create_VelMicroDir = create_VelMicroDir.m_value; _U(false); }
  140.             if( e->target == &create_VelMicroDvg ){ m_emitter->create_VelMicroDvg = create_VelMicroDvg.m_value; _U(false); }
  141.             if( e->target == &create_VelMicroDistExt ){ m_emitter->create_VelMicroDistExt = create_VelMicroDistExt.m_value; _U(false); }
  142.             if( e->target == &create_VelMacroDir ){ m_emitter->create_VelMacroDir = create_VelMacroDir.m_value; _U(false); }
  143.             if( e->target == &create_VelMacroDvg ){ m_emitter->create_VelMacroDvg = create_VelMacroDvg.m_value; _U(false); }
  144.             if( e->target == &create_VelMacroDistExt ){ m_emitter->create_VelMacroDistExt = create_VelMacroDistExt.m_value; _U(false); }
  145.             if( e->target == &create_VelCluster ){ m_emitter->create_VelCluster = create_VelCluster.m_value; _U(false); }
  146.             if( e->target == &create_VelClusterExt ){ m_emitter->create_VelClusterExt = create_VelClusterExt.m_value; _U(false); }
  147.             if( e->target == &create_LifetimeExt ){ m_emitter->create_LifetimeExt = create_LifetimeExt.m_value; _U(false); }
  148.             if( e->target == &create_AngleDirDvg ){ m_emitter->create_AngleDirDvg = DEG2RAD( create_AngleDirDvg.m_value ); _U(false); }
  149.             if( e->target == &create_AngleVelDvg ){ m_emitter->create_AngleVelDvg = DEG2RAD( create_AngleVelDvg.m_value ); _U(false); }
  150.             if( e->target == &tick_AngleAcc ){ m_emitter->tick_AngleAcc = DEG2RAD( tick_AngleAcc.m_value ); _U(false); }
  151.             if( e->target == &absolute ){ m_emitter->absolute = absolute.m_value; _U(false); }
  152.             if( e->target == &render_Texture0 ){ m_emitter->render_Textures[0] = GetParticleTexHandle( render_Texture0.m_value ); _U(true); }
  153.             if( e->target == &render_Texture1 ){ m_emitter->render_Textures[1] = GetParticleTexHandle( render_Texture1.m_value ); _U(true); }
  154.             if( e->target == &render_Texture2 ){ m_emitter->render_Textures[2] = GetParticleTexHandle( render_Texture2.m_value ); _U(true); }
  155.             if( e->target == &render_Texture3 ){ m_emitter->render_Textures[3] = GetParticleTexHandle( render_Texture3.m_value ); _U(true); }
  156.             if( e->target == &render_Shader ){ m_emitter->render_Shader = render_Shader.m_value; _U(true); }
  157.             if( e->target == &render_Additive ){ m_emitter->render_Additive = render_Additive.m_value; _U(true); }
  158.             if( e->target == &render_Stretch ){ m_emitter->render_Stretch = render_Stretch.m_value; _U(true); }
  159.             break;
  160.         }
  161.         return EDGUILayoutRow::OnEvent( e );
  162.     }
  163.     void _U( bool renderupdate )
  164.     {
  165.         if( renderupdate )
  166.             m_psys->OnRenderUpdate();
  167.     }
  168.    
  169.     void Prepare( ParticleSystem* PS, size_t emid )
  170.     {
  171.         m_psys = PS;
  172.         m_emitter = &PS->emitters[ emid ];
  173.        
  174.         spawn_MaxCount.SetValue( m_emitter->spawn_MaxCount );
  175.         spawn_Count.SetValue( m_emitter->spawn_Count );
  176.         spawn_CountExt.SetValue( m_emitter->spawn_CountExt );
  177.         spawn_TimeExt.SetValue( m_emitter->spawn_TimeExt );
  178.        
  179.         create_Pos.SetValue( m_emitter->create_Pos );
  180.         create_PosBox.SetValue( m_emitter->create_PosBox );
  181.         create_PosRadius.SetValue( m_emitter->create_PosRadius );
  182.    
  183.         create_VelMicroDir.SetValue( m_emitter->create_VelMicroDir );
  184.         create_VelMicroDvg.SetValue( m_emitter->create_VelMicroDvg );
  185.         create_VelMicroDistExt.SetValue( m_emitter->create_VelMicroDistExt );
  186.         create_VelMacroDir.SetValue( m_emitter->create_VelMacroDir );
  187.         create_VelMacroDvg.SetValue( m_emitter->create_VelMacroDvg );
  188.         create_VelMacroDistExt.SetValue( m_emitter->create_VelMacroDistExt );
  189.         create_VelCluster.SetValue( m_emitter->create_VelCluster );
  190.         create_VelClusterExt.SetValue( m_emitter->create_VelClusterExt );
  191.        
  192.         create_LifetimeExt.SetValue( m_emitter->create_LifetimeExt );
  193.         create_AngleDirDvg.SetValue( RAD2DEG( m_emitter->create_AngleDirDvg ) );
  194.         create_AngleVelDvg.SetValue( RAD2DEG( m_emitter->create_AngleVelDvg ) );
  195.         tick_AngleAcc.SetValue( RAD2DEG( m_emitter->tick_AngleAcc ) );
  196.         absolute.SetValue( m_emitter->absolute );
  197.        
  198.         curve_Size.SetValue( m_emitter->curve_Size );
  199.         curve_ColorHue.SetValue( m_emitter->curve_ColorHue );
  200.         curve_ColorSat.SetValue( m_emitter->curve_ColorSat );
  201.         curve_ColorVal.SetValue( m_emitter->curve_ColorVal );
  202.         curve_Opacity.SetValue( m_emitter->curve_Opacity );
  203.        
  204.         render_Texture0.SetValue( GetParticleTexName( m_emitter->render_Textures[0] ) );
  205.         render_Texture1.SetValue( GetParticleTexName( m_emitter->render_Textures[1] ) );
  206.         render_Texture2.SetValue( GetParticleTexName( m_emitter->render_Textures[2] ) );
  207.         render_Texture3.SetValue( GetParticleTexName( m_emitter->render_Textures[3] ) );
  208.         render_Shader.SetValue( m_emitter->render_Shader );
  209.         render_Additive.SetValue( m_emitter->render_Additive );
  210.         render_Stretch.SetValue( m_emitter->render_Stretch );
  211.     }
  212.    
  213.     EDGUIGroup grpSpawn;
  214.     EDGUIPropInt spawn_MaxCount;
  215.     EDGUIPropInt spawn_Count;
  216.     EDGUIPropInt spawn_CountExt;
  217.     EDGUIPropVec2 spawn_TimeExt;
  218.    
  219.     EDGUIGroup grpPosition;
  220.     EDGUIPropVec3 create_Pos;
  221.     EDGUIPropVec3 create_PosBox;
  222.     EDGUIPropFloat create_PosRadius;
  223.    
  224.     EDGUIGroup grpVelocity;
  225.     EDGUIPropVec3 create_VelMicroDir;
  226.     EDGUIPropFloat create_VelMicroDvg;
  227.     EDGUIPropVec2 create_VelMicroDistExt;
  228.     EDGUIPropVec3 create_VelMacroDir;
  229.     EDGUIPropFloat create_VelMacroDvg;
  230.     EDGUIPropVec2 create_VelMacroDistExt;
  231.     EDGUIPropInt create_VelCluster;
  232.     EDGUIPropInt create_VelClusterExt;
  233.    
  234.     EDGUIGroup grpMisc;
  235.     EDGUIPropVec2 create_LifetimeExt;
  236.     EDGUIPropVec2 create_AngleDirDvg;
  237.     EDGUIPropVec2 create_AngleVelDvg;
  238.     EDGUIPropFloat tick_AngleAcc;
  239.     EDGUIPropBool absolute;
  240.    
  241.     EDGUIGroup grpSizeColor;
  242.     EdEmitCurve curve_Size;
  243.     EdEmitCurve curve_ColorHue;
  244.     EdEmitCurve curve_ColorSat;
  245.     EdEmitCurve curve_ColorVal;
  246.     EdEmitCurve curve_Opacity;
  247.    
  248.     EDGUIGroup grpRender;
  249.     EDGUIPropRsrc render_Texture0;
  250.     EDGUIPropRsrc render_Texture1;
  251.     EDGUIPropRsrc render_Texture2;
  252.     EDGUIPropRsrc render_Texture3;
  253.     EDGUIPropRsrc render_Shader;
  254.     EDGUIPropBool render_Additive;
  255.     EDGUIPropBool render_Stretch;
  256.    
  257.     ParticleSystem* m_psys;
  258.     ParticleSystem::Emitter* m_emitter;
  259. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement