Changeset 522 for trunk/src


Ignore:
Timestamp:
10/14/16 18:17:17 (9 years ago)
Author:
epyon
Message:
  • updates lol
Location:
trunk/src/engine
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/engine/mesh_manager.cc

    r509 r522  
    8585
    8686                NV_LOG_ERROR( "Resource path fail! - ", path );
    87                 NV_ASSERT( false, "Resource path fail!" );
     87                //NV_ASSERT( false, "Resource path fail!" );
    8888        }
    8989        else
    9090        {
    9191                NV_LOG_ERROR( "Resource lock fail! - ", path );
    92                 NV_ASSERT( false, "Resource lock fail!" );
     92                //NV_ASSERT( false, "Resource lock fail!" );
    9393        }
    9494        return nv::resource< nv::data_channel_set >();
  • trunk/src/engine/particle_engine.cc

    r520 r522  
    306306                else
    307307                        info->emitters[i].pause = m_rng->frange( data->emitters[i].duration_min, data->emitters[i].duration_max );
    308 
    309308        }
    310309
     
    313312
    314313        return result;
     314}
     315
     316void nv::particle_engine::set_on_collide( particle_system system, const particle_on_collide_func& f )
     317{
     318        particle_system_info* info = m_systems.get( system );
     319        if ( info )
     320                info->on_collide = f;
    315321}
    316322
     
    364370                m_systems.destroy( system );
    365371        }
     372}
     373
     374bool nv::particle_engine::is_finished( particle_system system )
     375{
     376        particle_system_info* info = m_systems.get( system );
     377        if ( info )
     378        {
     379                if ( info->count > 0 ) return false;
     380                for ( uint32 i = 0; i < info->data->emitter_count; ++i )
     381                {
     382                        const auto& edata = info->emitters[i];
     383                        if ( edata.active || edata.pause > 0.0f )
     384                        {
     385                                return false;
     386                        }
     387                }
     388        }
     389        return true;
    366390}
    367391
     
    403427void nv::particle_engine::set_texcoords( particle_system system, vec2 a, vec2 b )
    404428{
    405 
    406429        particle_system_info* info = m_systems.get( system );
    407430        if ( info )
     
    513536                pdata.position += pdata.velocity * factor;
    514537        }
     538
     539        if ( info->on_collide )
     540        {
     541                for ( uint32 i = 0; i < info->count; ++i )
     542                {
     543                        particle& pdata = info->particles[i];
     544                        if ( pdata.position.y <= 0.0f )
     545                        {
     546                                info->on_collide( pdata.position, pdata.velocity );
     547                                pdata.death = pdata.lifetime;
     548                        }
     549                }
     550        }
     551
    515552}
    516553
  • trunk/src/engine/renderer.cc

    r518 r522  
    117117
    118118        scene_state ss( s );
     119        render_state rs( pass.rstate );
    119120        m_context->bind( pass.fbuffer, FRAMEBUFFER );
    120121        m_context->set_draw_buffers( pass.output_count, pass.output );
     
    157158                                        m_context->get_device()->set_opt_uniform( *program, "nv_index", unsigned( index ) );
    158159                                        m_context->apply_engine_uniforms( *program, ss );
     160                                        if ( rs.blending != element.blending )
     161                                                rs.blending = element.blending;
    159162
    160163                                        if ( element.instances > 0 )
    161                                                 m_context->draw_instanced( TRIANGLES, pass.rstate, *program, element.instances, element.va, element.count, element.first );
     164                                                m_context->draw_instanced( TRIANGLES, rs, *program, element.instances, element.va, element.count, element.first );
    162165                                        else
    163                                                 m_context->draw( TRIANGLES, pass.rstate, *program, element.va, element.count, element.first );
     166                                                m_context->draw( TRIANGLES, rs, *program, element.va, element.count, element.first );
    164167
    165168                                        m_statistics[TRIANGLE_COUNT] += ( element.count / 3 ) * max< uint32 >( element.instances, 1 );
Note: See TracChangeset for help on using the changeset viewer.