//========================================================================================= //// Public Bolt Routines int G2_Add_Bolt_Surf_Num(CGhoul2Info *ghlInfo, boltInfo_v &bltlist, surfaceInfo_v &slist, const int surfNum) { assert(ghlInfo&&ghlInfo->mValid); boltInfo_t tempBolt; assert(surfNum>=0&&surfNum<(int)slist.size()); // ensure surface num is valid if (surfNum >= (int)slist.size()) { return -1; } // look through entire list - see if it's already there first for(size_t i=0; i<bltlist.size(); i++) { // already there?? if (bltlist[i].surfaceNumber == surfNum) { // increment the usage count bltlist[i].boltUsed++; return i; } } // we have a surface // look through entire list - see if it's already there first for(size_t i=0; i<bltlist.size(); i++) { // if this surface entry has info in it, bounce over it if (bltlist[i].boneNumber == -1 && bltlist[i].surfaceNumber == -1) { // if we found an entry that had a -1 for the bone / surface number, then we hit a surface / bone slot that was empty bltlist[i].surfaceNumber = surfNum; bltlist[i].surfaceType = G2SURFACEFLAG_GENERATED; bltlist[i].boltUsed = 1; return i; } } // ok, we didn't find an existing surface of that name, or an empty slot. Lets add an entry tempBolt.surfaceNumber = surfNum; tempBolt.surfaceType = G2SURFACEFLAG_GENERATED; tempBolt.boneNumber = -1; tempBolt.boltUsed = 1; bltlist.push_back(tempBolt); return bltlist.size()-1; }
void G2_RemoveRedundantGeneratedSurfaces(surfaceInfo_v &slist, int *activeSurfaces) { // walk the surface list, removing surface overrides or generated surfaces that are pointing at surfaces that aren't active anymore for (size_t i=0; i<slist.size(); i++) { if (slist[i].surface != -1) { // is this a generated surface? if (slist[i].offFlags & G2SURFACEFLAG_GENERATED) { // if it's not in the list, remove it if (!activeSurfaces[slist[i].genPolySurfaceIndex & 0xffff]) { G2_RemoveSurface(slist, i); } } // no, so it does point back at a legal surface else { // if it's not in the list, remove it if (!activeSurfaces[slist[i].surface]) { G2_RemoveSurface(slist, i); } } } } }
//========================================================================================= //// Public Bolt Routines int G2_Add_Bolt_Surf_Num(const char *fileName, boltInfo_v &bltlist, surfaceInfo_v &slist, const int surfNum) { boltInfo_t tempBolt; int i; // first up, make sure have a surface first if (surfNum >= slist.size()) { return -1; } // look through entire list - see if it's already there first for(i=0; i<bltlist.size(); i++) { // already there?? if (bltlist[i].surfaceNumber == surfNum) { // increment the usage count bltlist[i].boltUsed++; return i; } } // we have a surface // look through entire list - see if it's already there first for(i=0; i<bltlist.size(); i++) { // if this surface entry has info in it, bounce over it if (bltlist[i].boneNumber == -1 && bltlist[i].surfaceNumber == -1) { // if we found an entry that had a -1 for the bone / surface number, then we hit a surface / bone slot that was empty bltlist[i].surfaceNumber = surfNum; bltlist[i].surfaceType = G2SURFACEFLAG_GENERATED; bltlist[i].boltUsed = 1; return i; } } // ok, we didn't find an existing surface of that name, or an empty slot. Lets add an entry tempBolt.surfaceNumber = surfNum; tempBolt.surfaceType = G2SURFACEFLAG_GENERATED; tempBolt.boneNumber = -1; tempBolt.boltUsed = 1; bltlist.push_back(tempBolt); return (int)bltlist.size()-1; }