2 * Copyright 2021-2022 (C) Mount0 Software, Harry Godden - All Rights Reserved
9 #include "player_ragdoll.h"
10 #include "shaders/viewchar.h"
12 vg_tex2d tex_characters
= { .path
= "textures/ch_gradient.qoi" };
14 static int player_model_init(void)
16 shader_viewchar_register();
18 if( vg_acquire_thread_sync(1) )
20 vg_tex2d_init( (vg_tex2d
*[]){ &tex_characters
}, 1 );
21 vg_release_thread_sync(1);
28 static void player_model_free(void *_
)
30 vg_tex2d_free( (vg_tex2d
*[]){ &tex_characters
}, 1 );
34 * Load model from file (.mdl)
36 static int player_load_model( const char *name
)
40 snprintf( buf
, sizeof(buf
)-1, "models/%s.mdl", name
);
41 mdl_header
*src
= mdl_load( buf
);
46 struct player_model
*mdl
= &player
.mdl
;
48 if( !mdl_unpack_glmesh( src
, &mdl
->mesh
) )
51 skeleton_setup( &mdl
->sk
, src
);
59 struct skeleton_anim
**anim
;
62 { "pose_stand", &mdl
->anim_stand
},
63 { "pose_highg", &mdl
->anim_highg
},
64 { "pose_slide", &mdl
->anim_slide
},
65 { "pose_air", &mdl
->anim_air
},
66 { "push", &mdl
->anim_push
},
67 { "push_reverse", &mdl
->anim_push_reverse
},
68 { "ollie", &mdl
->anim_ollie
},
69 { "ollie_reverse",&mdl
->anim_ollie_reverse
},
70 { "grabs", &mdl
->anim_grabs
},
71 { "walk", &mdl
->anim_walk
},
72 { "run", &mdl
->anim_run
},
73 { "idle_cycle", &mdl
->anim_idle
}
76 for( int i
=0; i
<vg_list_size(anims
); i
++ )
78 *anims
[i
].anim
= skeleton_get_anim( &mdl
->sk
, anims
[i
].name
);
80 if( !(*anims
[i
].anim
) )
82 vg_error( "Animation '%s' is missing from character '%s'\n",
83 anims
[i
].name
, name
);
97 { "hips", &mdl
->id_hip
},
98 { "hand.IK.L", &mdl
->id_ik_hand_l
},
99 { "hand.IK.R", &mdl
->id_ik_hand_r
},
100 { "elbow.L", &mdl
->id_ik_elbow_l
},
101 { "elbow.R", &mdl
->id_ik_elbow_r
},
102 { "head", &mdl
->id_head
}
105 for( int i
=0; i
<vg_list_size(bones
); i
++ )
107 *bones
[i
].bone_id
= skeleton_bone_id( &mdl
->sk
, bones
[i
].name
);
109 if( !(*bones
[i
].bone_id
) )
111 vg_error( "Required bone '%s' is missing from character '%s'\n",
112 bones
[i
].name
, name
);
117 player_init_ragdoll( src
);