X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_glide.c;h=eccf3ab0696690d4c4538f87e0b4e73bef436acb;hb=ec3a96fde91385417ffc20e0f7745d7d8e2889ca;hp=7725cf023a12948c9666246ede6c7afefecd25e4;hpb=83890302a02892a2e6f26fa8d7bfe1309463c133;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_glide.c b/player_glide.c index 7725cf0..eccf3ab 100644 --- a/player_glide.c +++ b/player_glide.c @@ -7,6 +7,7 @@ #include "vg/vg_rigidbody.h" #include "scene_rigidbody.h" #include "shaders/model_board_view.h" +#include "shaders/model_entity.h" static f32 k_glide_steer = 2.0f, k_glide_cl = 0.04f, @@ -263,6 +264,15 @@ static void player_glide_animator_exchange( bitpack_ctx *ctx, void *data ){ bitpack_qquat( ctx, animator->root_q ); } +static void +player_glide_remote_animator_exchange( bitpack_ctx *ctx, void *data ){ + struct remote_glider_animator *animator = data; + + bitpack_qv3f( ctx, 24, -1024.0f, 1024.0f, animator->root_co ); + bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->s ); + bitpack_qquat( ctx, animator->root_q ); +} + static void player_glide_im_gui(void){ player__debugtext( 1, "Nothing here" ); player__debugtext( 1, " lift: %.2f %.2f %.2f", @@ -411,6 +421,51 @@ static void player_glide_transition(void){ player__begin_holdout( (v3f){0,0,0} ); } +static void render_glider_model( camera *cam, world_instance *world, + m4x3f mmdl, enum board_shader shader ){ + u32 current_tex = 0xffffffff; + glActiveTexture( GL_TEXTURE0 ); + + mdl_context *mdl = &player_glide.glider; + mesh_bind( &player_glide.glider_mesh ); + + for( u32 i=0; imeshs); i ++ ){ + mdl_mesh *mesh = mdl_arritm( &mdl->meshs, i ); + + m4x3f mmmdl; + mdl_transform_m4x3( &mesh->transform, mmmdl ); + m4x3_mul( mmdl, mmmdl, mmmdl ); + + if( shader == k_board_shader_player ) + shader_model_board_view_uMdl( mmmdl ); + else if( shader == k_board_shader_entity ){ + m4x4f m4mmmdl; + m4x3_expand( mmmdl, m4mmmdl ); + m4x4_mul( cam->mtx_prev.pv, m4mmmdl, m4mmmdl ); + + shader_model_entity_uMdl( mmmdl ); + shader_model_entity_uPvmPrev( m4mmmdl ); + } + + for( u32 j=0; jsubmesh_count; j ++ ){ + mdl_submesh *sm = mdl_arritm( &mdl->submeshs, mesh->submesh_start+j ); + if( !sm->material_id ) { + vg_error( "Invalid material ID 0\n" ); + continue; + } + + mdl_material *mat = mdl_arritm( &mdl->materials, sm->material_id-1 ); + if( mat->tex_diffuse != current_tex ){ + glBindTexture( GL_TEXTURE_2D, + player_glide.glider_textures[ mat->tex_diffuse ] ); + current_tex = mat->tex_diffuse; + } + + mdl_draw_submesh( sm ); + } + } +} + /* * TODO: more flexible way to call * - this depends on the current state, but we need to pass a struct in @@ -509,38 +564,12 @@ static void player_glide_render( camera *cam, world_instance *world, m3x3_scale( mmdl, kf_res.s ); v3_copy( kf_res.co, mmdl[3] ); - u32 current_tex = 0xffffffff; - glActiveTexture( GL_TEXTURE0 ); - - mdl_context *mdl = &player_glide.glider; - mesh_bind( &player_glide.glider_mesh ); - - for( u32 i=0; imeshs); i ++ ){ - mdl_mesh *mesh = mdl_arritm( &mdl->meshs, i ); - - m4x3f mmmdl; - mdl_transform_m4x3( &mesh->transform, mmmdl ); - m4x3_mul( mmdl, mmmdl, mmmdl ); - - shader_model_board_view_uMdl( mmmdl ); + render_glider_model( cam, world, mmdl, k_board_shader_player ); - for( u32 j=0; jsubmesh_count; j ++ ){ - mdl_submesh *sm = mdl_arritm( &mdl->submeshs, mesh->submesh_start+j ); - if( !sm->material_id ) { - vg_error( "Invalid material ID 0\n" ); - continue; - } - - mdl_material *mat = mdl_arritm( &mdl->materials, sm->material_id-1 ); - if( mat->tex_diffuse != current_tex ){ - glBindTexture( GL_TEXTURE_2D, - player_glide.glider_textures[ mat->tex_diffuse ] ); - current_tex = mat->tex_diffuse; - } - - mdl_draw_submesh( sm ); - } - } + /* totally FUCKED */ + v4_copy( kf_res.q, player_glide.remote_animator.root_q ); + v3_copy( kf_res.co, player_glide.remote_animator.root_co ); + player_glide.remote_animator.s = kf_res.s[0]; } #endif /* PLAYER_GLIDE_C */