VG_STATIC void render_board( camera *cam, world_instance *world,
struct player_board *board, m4x3f root,
+ struct board_pose *pose,
enum board_shader shader )
{
if( !board ) return;
if( board->board.indice_count ){
m4x3f mlocal;
m3x3_identity( mlocal );
- v3_copy( board->board_position, mlocal[3] );
+
+ mdl_keyframe kf;
+ v3_zero( kf.co );
+ q_identity( kf.q );
+ v3_zero( kf.s );
+
+ v4f qroll;
+ q_axis_angle( qroll, (v3f){0.0f,0.0f,1.0f}, pose->lean * 0.6f );
+ keyframe_rotate_around( &kf, (v3f){0.0f,0.11f,0.0f},
+ (v3f){0.0f,0.0f,0.0f}, qroll );
+
+ v3_add( board->board_position, kf.co, mlocal[3] );
+ q_m3x3( kf.q, mlocal );
+
m4x3_mul( root, mlocal, mlocal );
if( shader == k_board_shader_entity ){
struct player_board *board =
addon_cache_item_if_loaded( k_addon_type_board,
player->board_view_slot );
+
render_board( cam, world, board, player->playeravatar->sk.final_mtx[
- player->playeravatar->id_board],
- k_board_shader_player );
+ player->playeravatar->id_board],
+ &player->board_pose,
+ k_board_shader_player );
SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
}