4a09b90589233e2c3d91a6f2cd3c81bde26abb34
2 * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved
16 #include "player_ragdoll.h"
17 #include "shaders/viewchar.h"
19 vg_tex2d tex_characters
= { .path
= "textures/ch_gradient.qoi" };
21 VG_STATIC
void player_model_init(void)
23 shader_viewchar_register();
24 vg_acquire_thread_sync();
26 vg_tex2d_init( (vg_tex2d
*[]){ &tex_characters
}, 1 );
28 vg_release_thread_sync();
30 /* load in reference player model, with animations and such */
31 mdl_open( &player
.mdl
.meta
, "models/ch_new.mdl" );
32 mdl_load_metadata( &player
.mdl
.meta
, vg_mem
.rtmemory
);
33 mdl_load_anim_data( &player
.mdl
.meta
, vg_mem
.rtmemory
);
35 vg_linear_clear( vg_mem
.scratch
);
36 mdl_load_mesh_data( &player
.mdl
.meta
, vg_mem
.scratch
);
37 mdl_close( &player
.mdl
.meta
);
40 * load in other player models. This may need to be more sophisticated in
41 * the futre if we have more of these guys
43 mdl_context ctx_outlaw
,
46 mdl_open( &ctx_outlaw
, "models/ch_outlaw.mdl" );
47 mdl_load_metadata( &ctx_outlaw
, vg_mem
.scratch
);
48 mdl_load_mesh_data( &ctx_outlaw
, vg_mem
.scratch
);
49 mdl_close( &ctx_outlaw
);
51 mdl_open( &ctx_jordan
, "models/ch_jordan.mdl" );
52 mdl_load_metadata( &ctx_jordan
, vg_mem
.scratch
);
53 mdl_load_mesh_data( &ctx_jordan
, vg_mem
.scratch
);
54 mdl_close( &ctx_jordan
);
56 vg_acquire_thread_sync();
58 mdl_unpack_glmesh( &player
.mdl
.meta
, &player
.mdl
.player_meshes
[0] );
59 mdl_unpack_glmesh( &ctx_outlaw
, &player
.mdl
.player_meshes
[1] );
60 mdl_unpack_glmesh( &ctx_jordan
, &player
.mdl
.player_meshes
[2] );
62 vg_release_thread_sync();
64 skeleton_setup( &player
.mdl
.sk
, vg_mem
.rtmemory
, &player
.mdl
.meta
);
65 player_init_ragdoll();
73 struct skeleton_anim
**anim
;
76 { "pose_stand", &player
.mdl
.anim_stand
},
77 { "pose_highg", &player
.mdl
.anim_highg
},
78 { "pose_slide", &player
.mdl
.anim_slide
},
79 { "pose_air", &player
.mdl
.anim_air
},
80 { "push", &player
.mdl
.anim_push
},
81 { "push_reverse", &player
.mdl
.anim_push_reverse
},
82 { "ollie", &player
.mdl
.anim_ollie
},
83 { "ollie_reverse",&player
.mdl
.anim_ollie_reverse
},
84 { "grabs", &player
.mdl
.anim_grabs
},
85 { "walk", &player
.mdl
.anim_walk
},
86 { "run", &player
.mdl
.anim_run
},
87 { "idle_cycle", &player
.mdl
.anim_idle
},
88 { "jump", &player
.mdl
.anim_jump
}
91 for( int i
=0; i
<vg_list_size(anims
); i
++ )
93 *anims
[i
].anim
= skeleton_get_anim( &player
.mdl
.sk
, anims
[i
].name
);
95 if( !(*anims
[i
].anim
) )
97 vg_error( "Animation '%s' is missing\n", anims
[i
].name
);
98 vg_fatal_exit_loop( "Invalid character file" );
111 { "hips", &player
.mdl
.id_hip
},
112 { "hand.IK.L", &player
.mdl
.id_ik_hand_l
},
113 { "hand.IK.R", &player
.mdl
.id_ik_hand_r
},
114 { "elbow.L", &player
.mdl
.id_ik_elbow_l
},
115 { "elbow.R", &player
.mdl
.id_ik_elbow_r
},
116 { "head", &player
.mdl
.id_head
},
117 { "foot.IK.L", &player
.mdl
.id_ik_foot_l
},
118 { "foot.IK.R", &player
.mdl
.id_ik_foot_r
},
119 { "board", &player
.mdl
.id_board
}
122 for( int i
=0; i
<vg_list_size(bones
); i
++ )
124 *bones
[i
].bone_id
= skeleton_bone_id( &player
.mdl
.sk
, bones
[i
].name
);
126 if( !(*bones
[i
].bone_id
) )
128 vg_error( "Required bone '%s' is missing\n", bones
[i
].name
);
129 vg_fatal_exit_loop( "Invalid character file" );