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 void player_model_register(void)
16 shader_viewchar_register();
19 static void player_model_init(void)
21 vg_tex2d_init( (vg_tex2d
*[]){ &tex_characters
}, 1 );
26 * Load model from file (.mdl)
28 static int player_load_model( const char *name
)
32 snprintf( buf
, sizeof(buf
)-1, "models/%s.mdl", name
);
33 mdl_header
*src
= mdl_load( buf
);
38 struct player_model
*mdl
= &player
.mdl
;
40 mdl_unpack_glmesh( src
, &mdl
->mesh
);
41 skeleton_setup( &mdl
->sk
, src
);
49 struct skeleton_anim
**anim
;
52 { "pose_stand", &mdl
->anim_stand
},
53 { "pose_highg", &mdl
->anim_highg
},
54 { "pose_slide", &mdl
->anim_slide
},
55 { "pose_air", &mdl
->anim_air
},
56 { "push", &mdl
->anim_push
},
57 { "push_reverse", &mdl
->anim_push_reverse
},
58 { "ollie", &mdl
->anim_ollie
},
59 { "ollie_reverse",&mdl
->anim_ollie_reverse
},
60 { "grabs", &mdl
->anim_grabs
},
61 { "walk", &mdl
->anim_walk
},
62 { "run", &mdl
->anim_run
},
63 { "idle_cycle", &mdl
->anim_idle
}
66 for( int i
=0; i
<vg_list_size(anims
); i
++ )
68 *anims
[i
].anim
= skeleton_get_anim( &mdl
->sk
, anims
[i
].name
);
70 if( !(*anims
[i
].anim
) )
72 vg_error( "Animation '%s' is missing from character '%s'\n",
73 anims
[i
].name
, name
);
87 { "hips", &mdl
->id_hip
},
88 { "hand.IK.L", &mdl
->id_ik_hand_l
},
89 { "hand.IK.R", &mdl
->id_ik_hand_r
},
90 { "elbow.L", &mdl
->id_ik_elbow_l
},
91 { "elbow.R", &mdl
->id_ik_elbow_r
},
92 { "head", &mdl
->id_head
}
95 for( int i
=0; i
<vg_list_size(bones
); i
++ )
97 *bones
[i
].bone_id
= skeleton_bone_id( &mdl
->sk
, bones
[i
].name
);
99 if( !(*bones
[i
].bone_id
) )
101 vg_error( "Required bone '%s' is missing from character '%s'\n",
102 bones
[i
].name
, name
);
107 player_init_ragdoll( src
);