- skele->bone_count = inf->channels;
- skele->ik_count = inf->ik_count;
- skele->collider_count = inf->collider_count;
- skele->bones = malloc(sizeof(struct skeleton_bone)*skele->bone_count);
- skele->ik = malloc(sizeof(struct skeleton_ik)*skele->ik_count);
- skeleton_root = i;
- }
- else if( skele->bone_count )
- {
- int is_bone = pnode->classtype == k_classtype_bone;
-
- if( is_bone )
- {
- if( bone_count == skele->bone_count )
- {
- vg_error( "too many bones (%u/%u) @%s!\n",
- bone_count, skele->bone_count,
- mdl_pstr( mdl, pnode->pstr_name ));
-
- goto error_dealloc;
- }
-
- 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;
- strncpy( sb->name, mdl_pstr(mdl,pnode->pstr_name), 15 );
- sb->deform = bone_inf->deform;
-
- if( is_ik )
- {
- sb->ik = 1; /* TODO: place into new IK array */
- skele->bones[ sb->parent ].ik = 1;
-
- if( ik_count == skele->ik_count )
- {
- vg_error( "Too many ik bones, corrupt model file\n" );
- goto error_dealloc;
- }
-
- struct skeleton_ik *ik = &skele->ik[ ik_count ++ ];
- ik->upper = bone_count;
- ik->lower = sb->parent;
- ik->target = bone_inf->ik_target;
- ik->pole = bone_inf->ik_pole;
- }
- else
- {
- sb->ik = 0;
- }
-
- sb->collider = bone_inf->collider;
- box_copy( bone_inf->hitbox, sb->hitbox );
-
- if( bone_inf->collider )
- {
- if( collider_count == skele->collider_count )
- {
- vg_error( "Too many collider bones\n" );
- goto error_dealloc;
- }
-
- collider_count ++;
- }
-
- bone_count ++;