plish
[carveJwlIkooP6JGAAIwe30JlM.git] / player_model.h
index cab438e9d7c24afebffb36045a8486e0d5c441c1..6c46f08e4c18601048272135d1740f3f4cca3885 100644 (file)
@@ -5,13 +5,61 @@
 #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 "rigidbody.h"
+
 #include "shaders/viewchar.h"
 
-vg_tex2d tex_characters = { .path = "textures/ch_gradient.qoi" };
+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_board;
+};
+
+#if 0
+glmesh player_meshes[3];
+#endif
+
+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 );
+   mdl_load_metadata( &av->meta, vg_mem.rtmemory );
+   mdl_load_anim_data( &av->meta, vg_mem.rtmemory );
+
+   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" );
+}
+
+#if 0
+VG_STATIC void player_load_reference( struct player_model *pmodel )
 {
    shader_viewchar_register();
    vg_acquire_thread_sync();
@@ -106,7 +154,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<vg_list_size(bones); i++ )
@@ -120,5 +171,6 @@ VG_STATIC void player_model_init(void)
       }
    }
 }
+#endif
 
 #endif