From: Mircea Kitsune Date: Sat, 14 Jan 2012 15:00:49 +0000 (+0200) Subject: Don't keep the skeletal object around, but only check if the model index has changed X-Git-Tag: xonotic-v0.6.0~110^2^2~10 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=e2cdd292127becabc2bbc805d83695713c553781;p=xonotic%2Fxonotic-data.pk3dir.git Don't keep the skeletal object around, but only check if the model index has changed --- diff --git a/qcsrc/common/util.qc b/qcsrc/common/util.qc index 534eca15c..9e4bdf7e7 100644 --- a/qcsrc/common/util.qc +++ b/qcsrc/common/util.qc @@ -2214,17 +2214,17 @@ float ReadApproxPastTime() #endif #ifndef MENUQC -.float skeletonmodelindex; // used to check if the model has changed -float Update_Skeleton(entity e) -{ - // updates the fake skeleton if needed, and returns the total number of bones - if(e.skeletonmodelindex != e.modelindex) - { - if(e.fake_skeletonindex) - skel_delete(e.fake_skeletonindex); - e.fake_skeletonindex = skel_create(e.modelindex); - e.skeletonmodelindex = e.modelindex; - } - return skel_get_numbones(e.fake_skeletonindex); +.float skeleton_bones_index; +void Skeleton_SetBones(entity e) +{ + // set skeleton_bones to the total number of bones on the model + if(e.skeleton_bones_index == e.modelindex) + return; // same model, nothing to update + + float skelindex; + skelindex = skel_create(e.modelindex); + e.skeleton_bones = skel_get_numbones(skelindex); + skel_delete(skelindex); + e.skeleton_bones_index = e.modelindex; } #endif diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index cdaf27c73..db075ec2a 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -292,10 +292,10 @@ float InterpretBoolean(string input); void Shutdown(); #ifndef MENUQC -.float fake_skeletonindex; // maintains a fake skeleton for property checking without affecting the actual mesh -float Update_Skeleton(entity e); +.float skeleton_bones; +void Skeleton_SetBones(entity e); // loops through the tags of model v using counter tagnum -#define FOR_EACH_TAG(v) float tagnum, tags; tags = Update_Skeleton(v); for(tagnum = 0; tagnum < tags; tagnum++, gettaginfo(v, tagnum)) +#define FOR_EACH_TAG(v) float tagnum; Skeleton_SetBones(v); for(tagnum = 0; tagnum < v.skeleton_bones; tagnum++, gettaginfo(v, tagnum)) #endif #ifdef SVQC void WriteApproxPastTime(float dst, float t);