X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_model.h;h=2567a83aac42668c46843d73e0cb4519b27536c1;hb=6b9993651343af73bd48e2213910bbaadb41edaf;hp=cab438e9d7c24afebffb36045a8486e0d5c441c1;hpb=47941822dae18a018c985847b052e70214a3ccc6;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_model.h b/player_model.h index cab438e..2567a83 100644 --- a/player_model.h +++ b/player_model.h @@ -5,13 +5,70 @@ #ifndef CHARACTER_H #define CHARACTER_H -#include "player.h" +#define VG_GAME +#include "vg/vg.h" + +#include "model.h" +#include "skeleton.h" #include "player_ragdoll.h" -#include "shaders/viewchar.h" +#include "rigidbody.h" + +#include "shaders/model_character_view.h" + +struct player_avatar +{ + mdl_context meta; + struct skeleton sk; + + u32 id_hip, + id_ik_hand_l, + id_ik_hand_r, + id_ik_elbow_l, + id_ik_elbow_r, + id_head, + id_ik_foot_l, + id_ik_foot_r, + id_ik_knee_l, + id_ik_knee_r, + id_wheel_l, + id_wheel_r, + id_board; +}; + +#if 0 +glmesh player_meshes[3]; +#endif -vg_tex2d tex_characters = { .path = "textures/ch_gradient.qoi" }; +VG_STATIC void player_avatar_load( struct player_avatar *av, const char *path ) +{ + /* load in reference player model, with animations and such */ + /* FIXME: This is allocated as un-freeable systems memory */ + + mdl_open( &av->meta, path, vg_mem.rtmemory ); + mdl_load_metadata_block( &av->meta, vg_mem.rtmemory ); + mdl_load_animation_block( &av->meta, vg_mem.rtmemory ); + mdl_close( &av->meta ); + + struct skeleton *sk = &av->sk; + skeleton_setup( sk, vg_mem.rtmemory, &av->meta ); -VG_STATIC void player_model_init(void) + av->id_hip = skeleton_bone_id( sk, "hips" ); + av->id_ik_hand_l = skeleton_bone_id( sk, "hand.IK.L" ); + av->id_ik_hand_r = skeleton_bone_id( sk, "hand.IK.R" ); + av->id_ik_elbow_l = skeleton_bone_id( sk, "elbow.L" ); + av->id_ik_elbow_r = skeleton_bone_id( sk, "elbow.R" ); + av->id_head = skeleton_bone_id( sk, "head" ); + av->id_ik_foot_l = skeleton_bone_id( sk, "foot.IK.L" ); + av->id_ik_foot_r = skeleton_bone_id( sk, "foot.IK.R" ); + av->id_board = skeleton_bone_id( sk, "board" ); + av->id_wheel_l = skeleton_bone_id( sk, "wheel.L" ); + av->id_wheel_r = skeleton_bone_id( sk, "wheel.R" ); + av->id_ik_knee_l = skeleton_bone_id( sk, "knee.L" ); + av->id_ik_knee_r = skeleton_bone_id( sk, "knee.R" ); +} + +#if 0 +VG_STATIC void player_load_reference( struct player_model *pmodel ) { shader_viewchar_register(); vg_acquire_thread_sync(); @@ -106,7 +163,10 @@ VG_STATIC void player_model_init(void) { "hand.IK.R", &player.mdl.id_ik_hand_r }, { "elbow.L", &player.mdl.id_ik_elbow_l }, { "elbow.R", &player.mdl.id_ik_elbow_r }, - { "head", &player.mdl.id_head } + { "head", &player.mdl.id_head }, + { "foot.IK.L", &player.mdl.id_ik_foot_l }, + { "foot.IK.R", &player.mdl.id_ik_foot_r }, + { "board", &player.mdl.id_board } }; for( int i=0; i