2 * Copyright (C) 2021-2022 Mt.ZERO 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 VG_STATIC
void player_model_init(void)
16 shader_viewchar_register();
17 vg_acquire_thread_sync();
19 vg_tex2d_init( (vg_tex2d
*[]){ &tex_characters
}, 1 );
21 vg_release_thread_sync();
23 /* load in reference player model, with animations and such */
24 mdl_open( &player
.mdl
.meta
, "models/ch_new.mdl" );
25 mdl_load_metadata( &player
.mdl
.meta
, vg_mem
.rtmemory
);
26 mdl_load_anim_data( &player
.mdl
.meta
, vg_mem
.rtmemory
);
28 vg_linear_clear( vg_mem
.scratch
);
29 mdl_load_mesh_data( &player
.mdl
.meta
, vg_mem
.scratch
);
30 mdl_close( &player
.mdl
.meta
);
33 * load in other player models. This may need to be more sophisticated in
34 * the futre if we have more of these guys
36 mdl_context ctx_outlaw
,
39 mdl_open( &ctx_outlaw
, "models/ch_outlaw.mdl" );
40 mdl_load_metadata( &ctx_outlaw
, vg_mem
.scratch
);
41 mdl_load_mesh_data( &ctx_outlaw
, vg_mem
.scratch
);
42 mdl_close( &ctx_outlaw
);
44 mdl_open( &ctx_jordan
, "models/ch_jordan.mdl" );
45 mdl_load_metadata( &ctx_jordan
, vg_mem
.scratch
);
46 mdl_load_mesh_data( &ctx_jordan
, vg_mem
.scratch
);
47 mdl_close( &ctx_jordan
);
49 vg_acquire_thread_sync();
51 mdl_unpack_glmesh( &player
.mdl
.meta
, &player
.mdl
.player_meshes
[0] );
52 mdl_unpack_glmesh( &ctx_outlaw
, &player
.mdl
.player_meshes
[1] );
53 mdl_unpack_glmesh( &ctx_jordan
, &player
.mdl
.player_meshes
[2] );
55 vg_release_thread_sync();
57 skeleton_setup( &player
.mdl
.sk
, vg_mem
.rtmemory
, &player
.mdl
.meta
);
58 player_init_ragdoll();
66 struct skeleton_anim
**anim
;
69 { "pose_stand", &player
.mdl
.anim_stand
},
70 { "pose_highg", &player
.mdl
.anim_highg
},
71 { "pose_slide", &player
.mdl
.anim_slide
},
72 { "pose_air", &player
.mdl
.anim_air
},
73 { "push", &player
.mdl
.anim_push
},
74 { "push_reverse", &player
.mdl
.anim_push_reverse
},
75 { "ollie", &player
.mdl
.anim_ollie
},
76 { "ollie_reverse",&player
.mdl
.anim_ollie_reverse
},
77 { "grabs", &player
.mdl
.anim_grabs
},
78 { "walk", &player
.mdl
.anim_walk
},
79 { "run", &player
.mdl
.anim_run
},
80 { "idle_cycle", &player
.mdl
.anim_idle
},
81 { "jump", &player
.mdl
.anim_jump
}
84 for( int i
=0; i
<vg_list_size(anims
); i
++ )
86 *anims
[i
].anim
= skeleton_get_anim( &player
.mdl
.sk
, anims
[i
].name
);
88 if( !(*anims
[i
].anim
) )
90 vg_error( "Animation '%s' is missing\n", anims
[i
].name
);
91 vg_fatal_exit_loop( "Invalid character file" );
104 { "hips", &player
.mdl
.id_hip
},
105 { "hand.IK.L", &player
.mdl
.id_ik_hand_l
},
106 { "hand.IK.R", &player
.mdl
.id_ik_hand_r
},
107 { "elbow.L", &player
.mdl
.id_ik_elbow_l
},
108 { "elbow.R", &player
.mdl
.id_ik_elbow_r
},
109 { "head", &player
.mdl
.id_head
}
112 for( int i
=0; i
<vg_list_size(bones
); i
++ )
114 *bones
[i
].bone_id
= skeleton_bone_id( &player
.mdl
.sk
, bones
[i
].name
);
116 if( !(*bones
[i
].bone_id
) )
118 vg_error( "Required bone '%s' is missing\n", bones
[i
].name
);
119 vg_fatal_exit_loop( "Invalid character file" );