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;
return i;
}
+ vg_error( "skeleton_bone_id( *, \"%s\" );\n", name );
+ vg_fatal_exit_loop( "Bone does not exist\n" );
+
return 0;
}
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;
{
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; i<skele->bone_count; i++ )
{
* Get an animation by name
*/
VG_STATIC struct skeleton_anim *skeleton_get_anim( struct skeleton *skele,
- const char *name )
+ const char *name )
{
for( int i=0; i<skele->anim_count; i++ )
{
return anim;
}
+ vg_error( "skeleton_get_anim( *, \"%s\" )\n", name );
+ vg_fatal_exit_loop( "Invalid animation name\n" );
+
return NULL;
}
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 )
{
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 )
{
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 */
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 );
}