X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=skeleton.h;fp=skeleton.h;h=4f35d58e25d50681b462cfac7596f3a8b02991da;hb=2a238d32da833812e837cf38e16a7685c98db5c3;hp=9f715efa0e8391127df9169051b984171024d59c;hpb=cbce8a9ec86c6f061c292eec1855eacafc6a3a4f;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/skeleton.h b/skeleton.h index 9f715ef..4f35d58 100644 --- a/skeleton.h +++ b/skeleton.h @@ -14,16 +14,14 @@ struct skeleton v3f co, end; u32 parent; - int deform, ik; + u32 flags; int defer; mdl_keyframe kf; u32 orig_node; - int collider; boxf hitbox; - const char *name; } *bones; @@ -155,7 +153,8 @@ VG_STATIC int should_apply_bone( struct skeleton *skele, u32 id, anim_apply type if( type == k_anim_apply_defer_ik ) { - if( (sp->ik && !sb->ik) || sp->defer ) + if( ((sp->flags & k_bone_flag_ik) && !(sb->flags & k_bone_flag_ik)) + || sp->defer ) { sb->defer = 1; return 0; @@ -185,7 +184,7 @@ VG_STATIC void skeleton_apply_pose( struct skeleton *skele, mdl_keyframe *pose, { m4x3_identity( skele->final_mtx[0] ); skele->bones[0].defer = 0; - skele->bones[0].ik = 0; + skele->bones[0].flags &= ~k_bone_flag_ik; for( int i=1; ibone_count; i++ ) { @@ -454,18 +453,16 @@ VG_STATIC void skeleton_setup( struct skeleton *skele, struct skeleton_bone *sb = &skele->bones[bone_count]; struct classtype_bone *bone_inf = mdl_get_entdata( mdl, pnode ); - int is_ik = bone_inf->ik_target; v3_copy( pnode->co, sb->co ); v3_copy( pnode->s, sb->end ); sb->parent = pnode->parent-skeleton_root; sb->name = mdl_pstr( mdl, pnode->pstr_name ); - sb->deform = bone_inf->deform; + sb->flags = bone_inf->flags; - if( is_ik ) + if( sb->flags & k_bone_flag_ik ) { - sb->ik = 1; /* TODO: place into new IK array */ - skele->bones[ sb->parent ].ik = 1; + skele->bones[ sb->parent ].flags |= k_bone_flag_ik; if( ik_count == skele->ik_count ) { @@ -479,16 +476,11 @@ VG_STATIC void skeleton_setup( struct skeleton *skele, ik->target = bone_inf->ik_target; ik->pole = bone_inf->ik_pole; } - else - { - sb->ik = 0; - } - sb->collider = bone_inf->collider; sb->orig_node = i; box_copy( bone_inf->hitbox, sb->hitbox ); - if( bone_inf->collider ) + if( bone_inf->flags & k_bone_flag_collider_any ) { if( collider_count == skele->collider_count ) { @@ -538,7 +530,7 @@ VG_STATIC void skeleton_setup( struct skeleton *skele, v3_zero( skele->bones[0].co ); v3_copy( (v3f){0.0f,1.0f,0.0f}, skele->bones[0].end ); skele->bones[0].parent = 0xffffffff; - skele->bones[0].collider = 0; + skele->bones[0].flags = 0; skele->bones[0].name = "[root]"; /* process animation quick refs */ @@ -575,9 +567,9 @@ VG_STATIC void skeleton_debug( struct skeleton *skele ) m4x3_mulv( skele->final_mtx[i], p0, p0 ); m4x3_mulv( skele->final_mtx[i], p1, p1 ); - if( sb->deform ) + if( sb->flags & k_bone_flag_deform ) { - if( sb->ik ) + if( sb->flags & k_bone_flag_ik ) { vg_line( p0, p1, 0xff0000ff ); }