VG_CHECK_GL_ERR();
}
-static void particle_alloc( particle_system *sys, u32 max ){
- static int reg = 1;
- if( reg ){
- shader_particle_register();
- shader_trail_register();
- reg = 0;
- }
+static void particle_init(void){
+ shader_particle_register();
+}
+static void particle_alloc( particle_system *sys, u32 max ){
size_t stride = sizeof(particle_vert);
sys->max = max;
&player_glide.glider_textures[i+1] );
}
+ /* load trail positions */
+ mdl_array_ptr markers;
+ MDL_LOAD_ARRAY( mdl, &markers, ent_marker, vg_mem.scratch );
+
+ for( u32 i=0; i<mdl_arrcount( &markers ); i ++ ){
+ ent_marker *marker = mdl_arritm( &markers, i );
+ v3_copy( marker->transform.co,
+ player_glide.trail_positions[ player_glide.trail_count ++ ] );
+
+ if( player_glide.trail_count == vg_list_size(trails_glider) )
+ break;
+ }
+
mdl_close( mdl );
+
+ /* allocate effects */
+ for( u32 i=0; i<vg_list_size(trails_glider); i ++ ){
+ trail_alloc( &trails_glider[i], 200 );
+ }
}
static void player_glide_transition(void){
player_glide.remote_animator.s = kf_res.s[0];
}
+static void player_glide_render_effects( camera *cam ){
+ v3f co, temp;
+ v4f q;
+ rb_extrapolate( &player_glide.rb, co, q );
+ q_mulv( q, (v3f){0,-0.5f,0}, temp );
+ v3_add( temp, co, co );
+
+ f32 alpha = vg_maxf( (fabsf(player_glide.info_lift[2])-1.0f), 0.0f ) /18.0f;
+
+ for( u32 i=0; i<player_glide.trail_count; i ++ ){
+ v3f vvert;
+ q_mulv( q, player_glide.trail_positions[i], vvert );
+ v3_add( co, vvert, vvert );
+
+ trail_system_update( &trails_glider[i], vg.time_delta, vvert,
+ localplayer.rb.to_world[1], alpha );
+
+ trail_system_prerender( &trails_glider[i] );
+ trail_system_render( &trails_glider[i], &skaterift.cam );
+ }
+}
+
#endif /* PLAYER_GLIDE_C */
#define PLAYER_GLIDE_H
#include "player.h"
+#include "trail.h"
struct player_glide {
struct skeleton_anim *anim_glide;
}
parts[4];
+ u32 trail_count;
+ v3f trail_positions[2];
+
mdl_context glider;
GLuint *glider_textures;
glmesh glider_mesh;
}
};
+static trail_system trails_glider[] = {
+{
+ .width = 0.035f,
+ .lifetime = 5.0f,
+ .min_dist = 0.5f
+},
+{
+ .width = 0.035f,
+ .lifetime = 5.0f,
+ .min_dist = 0.5f
+},
+};
+
static void player_glide_pre_update(void);
static void player_glide_update(void);
static void player_glide_post_update(void);
SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ glEnable( GL_CULL_FACE );
player_glide_render( cam, world, &localplayer.pose );
+ glDisable( GL_CULL_FACE );
}
static void player_mirror_pose( mdl_keyframe pose[32],
particle_alloc( &particles_grind, 300 );
particle_alloc( &particles_env, 200 );
- trail_alloc( &trails_test, 200 );
player_load_animation_reference( "models/ch_none.mdl" );
player_model_load( &localplayer.fallback_model, "models/ch_none.mdl" );
vg_loader_step( skateshop_init, NULL );
vg_loader_step( ent_tornado_init, NULL );
vg_loader_step( testing_init, NULL );
+ vg_loader_step( trail_init, NULL );
+ vg_loader_step( particle_init, NULL );
vg_loader_step( skaterift_load_player_content, NULL );
particle_system_prerender( &particles_env );
particle_system_render( &particles_env, &skaterift.cam );
- v3f co;
- v4f q;
- rb_extrapolate( &localplayer.rb, co, q );
-
- trail_system_update( &trails_test, vg.time_delta,
- co,
- localplayer.rb.to_world[1], 1.0f );
- trail_system_debug( &trails_test );
- trail_system_prerender( &trails_test );
- trail_system_render( &trails_test, &skaterift.cam );
+ player_glide_render_effects( &skaterift.cam );
/*
* render transition
};
static void testing_update(void){
+ if( !vg_console.cheats )
+ return;
+
if( vg_getkey( SDLK_9 ) ){
v3_add( localplayer.rb.co, (v3f){0,1,0}, baller.rb.co );
v3_zero( baller.rb.w );
shader_trail_use();
shader_trail_uPv( cam->mtx.pv );
shader_trail_uPvPrev( cam->mtx_prev.pv );
+ shader_trail_uColour( (v4f){1.0f,1.0f,1.0f,1.0f} );
glBindVertexArray( sys->vao );
glDrawArrays( GL_TRIANGLE_STRIP, 0, sys->count*2 );
}
+
+static void trail_init( void ){
+ shader_trail_register();
+}
/* render settings */
f32 width, lifetime, min_dist;
-}
-static trails_test = {
- .width = 0.25f,
- .lifetime = 5.0f,
- .min_dist = 0.5f
};
static void trail_alloc( trail_system *sys, u32 max );