]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Weapons.cpp
convenience functions
[lugaru.git] / Source / Weapons.cpp
index f6cf200fe8d5ef519b3d0222bb62796c292eea38..0346e57da74276347263ff297410b55cce4c154b 100644 (file)
@@ -54,17 +54,17 @@ extern int tutoriallevel;
 extern int numthrowkill;
 
 Model Weapon::throwingknifemodel;
-GLuint Weapon::knifetextureptr = 0;
-GLuint Weapon::lightbloodknifetextureptr = 0;
-GLuint Weapon::bloodknifetextureptr = 0;
+Texture Weapon::knifetextureptr;
+Texture Weapon::lightbloodknifetextureptr;
+Texture Weapon::bloodknifetextureptr;
 
 Model Weapon::swordmodel;
-GLuint Weapon::swordtextureptr = 0;
-GLuint Weapon::lightbloodswordtextureptr = 0;
-GLuint Weapon::bloodswordtextureptr = 0;
+Texture Weapon::swordtextureptr;
+Texture Weapon::lightbloodswordtextureptr;
+Texture Weapon::bloodswordtextureptr;
 
 Model Weapon::staffmodel;
-GLuint Weapon::stafftextureptr = 0;
+Texture Weapon::stafftextureptr;
 
 Weapon::Weapon(int t, int o) : owner(o) {
        setType(t);
@@ -159,11 +159,11 @@ void Weapon::DoStuff(int i) {
                                        int k=terrain.patchobjects[whichpatchx][whichpatchz][j];
                                        start=oldtippoint;
                                        end=tippoint;
-                                       whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.rotation[k]);
+                                       whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.yaw[k]);
                                        if(whichhit!=-1) {
                                                if(objects.type[k]==treetrunktype){
-                                                       objects.model[k].MakeDecal(breakdecal,DoRotation(colpoint-objects.position[k],0,-objects.rotation[k],0),.1,1,Random()%360);
-                                                       normalrot=DoRotation(objects.model[k].facenormals[whichhit],0,objects.rotation[k],0);
+                                                       objects.model[k].MakeDecal(breakdecal,DoRotation(colpoint-objects.position[k],0,-objects.yaw[k],0),.1,1,Random()%360);
+                                                       normalrot=DoRotation(objects.model[k].facenormals[whichhit],0,objects.yaw[k],0);
                                                        velocity=0;
                                                        if(type==knife)
                                                                position=colpoint-normalrot*.1;
@@ -214,18 +214,18 @@ void Weapon::DoStuff(int i) {
                if(velocity.x||velocity.y||velocity.z) {
                        for(int j=0;j<numplayers;j++) {
                                footvel=0;
-                               footpoint=DoRotation((player[j].skeleton.joints[player[j].skeleton.jointlabels[abdomen]].position+player[j].skeleton.joints[player[j].skeleton.jointlabels[neck]].position)/2,0,player[j].rotation,0)*player[j].scale+player[j].coords;
-                               if(owner==-1 && findDistancefastflat(&position,&player[j].coords)<1.5 && 
-                               findDistancefast(&position,&player[j].coords)<4 && player[j].weaponstuck==-1 &&
+                               footpoint=DoRotation((player[j].jointPos(abdomen)+player[j].jointPos(neck))/2,0,player[j].yaw,0)*player[j].scale+player[j].coords;
+                               if(owner==-1 && distsqflat(&position,&player[j].coords)<1.5 && 
+                               distsq(&position,&player[j].coords)<4 && player[j].weaponstuck==-1 &&
                                !player[j].skeleton.free && j!=oldowner) {
-                                       if((player[j].aitype!=attacktypecutoff||abs(Random()%6)==0||(player[j].targetanimation!=backhandspringanim&&player[j].targetanimation!=rollanim&&player[j].targetanimation!=flipanim&&Random()%2==0))&&!missed) {
-                                               if( (player[j].creature==wolftype       &&      Random()%3!=0 && player[j].weaponactive==-1 && (player[j].isIdle()||player[j].isRun()||player[j].targetanimation==walkanim))||
+                                       if((player[j].aitype!=attacktypecutoff||abs(Random()%6)==0||(player[j].animTarget!=backhandspringanim&&player[j].animTarget!=rollanim&&player[j].animTarget!=flipanim&&Random()%2==0))&&!missed) {
+                                               if( (player[j].creature==wolftype       &&      Random()%3!=0 && player[j].weaponactive==-1 && (player[j].isIdle()||player[j].isRun()||player[j].animTarget==walkanim))||
                                                        (player[j].creature==rabbittype &&      Random()%2==0 && player[j].aitype==attacktypecutoff && player[j].weaponactive==-1)) {
                                                        emit_sound_at(knifedrawsound, player[j].coords, 128.);
 
                                                        player[j].weaponactive=0;
-                                                       player[j].targetanimation=removeknifeanim;
-                                                       player[j].targetframe=1;
+                                                       player[j].animTarget=removeknifeanim;
+                                                       player[j].frameTarget=1;
                                                        player[j].target=1;
                                                        owner=player[j].id;
                                                        if(player[j].num_weapons>0){
@@ -248,10 +248,10 @@ void Weapon::DoStuff(int i) {
                                                        player[j].weaponids[player[j].num_weapons-1]=i;
 
                                                        player[j].RagDoll(0);
-                                                       player[j].skeleton.joints[player[j].skeleton.jointlabels[abdomen]].velocity+=velocity*2;
-                                                       player[j].skeleton.joints[player[j].skeleton.jointlabels[neck]].velocity+=velocity*2;
-                                                       player[j].skeleton.joints[player[j].skeleton.jointlabels[rightshoulder]].velocity+=velocity*2;
-                                                       player[j].skeleton.joints[player[j].skeleton.jointlabels[leftshoulder]].velocity+=velocity*2;
+                                                       player[j].jointVel(abdomen)+=velocity*2;
+                                                       player[j].jointVel(neck)+=velocity*2;
+                                                       player[j].jointVel(rightshoulder)+=velocity*2;
+                                                       player[j].jointVel(leftshoulder)+=velocity*2;
                                                        if(bloodtoggle&&tutoriallevel!=1)
                                                                Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3);
                                                        if(tutoriallevel==1)
@@ -276,7 +276,7 @@ void Weapon::DoStuff(int i) {
 
                                                        emit_sound_at(fleshstabsound, position, 128.);
 
-                                                       if(animation[player[0].targetanimation].height==highheight)
+                                                       if(animation[player[0].animTarget].height==highheight)
                                                          award_bonus(0, ninja);
                                                        else
                                                          award_bonus(0, Bullseyebonus);
@@ -331,15 +331,15 @@ void Weapon::DoStuff(int i) {
                                XYZ terrainlight;
                                terrainlight=terrain.getLighting(position.x,position.z);
                                if(environment==snowyenvironment){
-                                       if(findDistancefast(&position,&viewer)<viewdistance*viewdistance/4)
+                                       if(distsq(&position,&viewer)<viewdistance*viewdistance/4)
                                                Sprite::MakeSprite(cloudsprite, position,velocity, terrainlight.x,terrainlight.y,terrainlight.z, .5, .7);
                                }
                                else if(environment==grassyenvironment){
-                                       if(findDistancefast(&position,&viewer)<viewdistance*viewdistance/4)
+                                       if(distsq(&position,&viewer)<viewdistance*viewdistance/4)
                                                Sprite::MakeSprite(cloudsprite, position,velocity, terrainlight.x*90/255,terrainlight.y*70/255,terrainlight.z*8/255, .5, .5);
                                }
                                else if(environment==desertenvironment){
-                                       if(findDistancefast(&position,&viewer)<viewdistance*viewdistance/4)
+                                       if(distsq(&position,&viewer)<viewdistance*viewdistance/4)
                                                Sprite::MakeSprite(cloudsprite, position,velocity, terrainlight.x*190/255,terrainlight.y*170/255,terrainlight.z*108/255, .5, .7);
                                }
 
@@ -420,7 +420,7 @@ void Weapon::DoStuff(int i) {
                                                        if(type==staff) {
                                                                start=tippoint-(position-tippoint)/5;
                                                                end=position+(position-tippoint)/30;
-                                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.rotation[k]);
+                                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.yaw[k]);
                                                                if(whichhit!=-1) {
                                                                        XYZ diff;
                                                                        diff=(colpoint-position);
@@ -435,7 +435,7 @@ void Weapon::DoStuff(int i) {
                                                        } else {
                                                                start=position-(tippoint-position)/5;
                                                                end=tippoint+(tippoint-position)/30;
-                                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.rotation[k]);
+                                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.yaw[k]);
                                                                if(whichhit!=-1){
                                                                        XYZ diff;
                                                                        diff=(colpoint-tippoint);
@@ -452,11 +452,11 @@ void Weapon::DoStuff(int i) {
 
                                                start=oldposition;
                                                end=position;
-                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.rotation[k]);
+                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.yaw[k]);
                                                if(whichhit!=-1) {
                                                        hitsomething=1;
                                                        position=colpoint;
-                                                       terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.rotation[k],0)*-1;
+                                                       terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.yaw[k],0)*-1;
                                                        ReflectVector(&velocity,&terrainnormal);
                                                        position+=terrainnormal*.002;
 
@@ -480,11 +480,11 @@ void Weapon::DoStuff(int i) {
                                                }
                                                start=oldtippoint;
                                                end=tippoint;
-                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.rotation[k]);
+                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.yaw[k]);
                                                if(whichhit!=-1) {
                                                        hitsomething=1;
                                                        tippoint=colpoint;
-                                                       terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.rotation[k],0)*-1;
+                                                       terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.yaw[k],0)*-1;
                                                        ReflectVector(&tipvelocity,&terrainnormal);
                                                        tippoint+=terrainnormal*.002;
 
@@ -506,7 +506,7 @@ void Weapon::DoStuff(int i) {
                                                        }
                                                }
 
-                                               if((objects.type[k]!=boxtype && objects.type[k]!=platformtype && objects.type[k]!=walltype && objects.type[k]!=weirdtype)||objects.rotation2[k]!=0)
+                                               if((objects.type[k]!=boxtype && objects.type[k]!=platformtype && objects.type[k]!=walltype && objects.type[k]!=weirdtype)||objects.pitch[k]!=0)
                                                        for(int m=0;m<2;m++){
                                                                mid=(position*(21+(float)m*10)+tippoint*(19-(float)m*10))/40;
                                                                oldmid2=mid;
@@ -514,11 +514,11 @@ void Weapon::DoStuff(int i) {
 
                                                                start=oldmid;
                                                                end=mid;
-                                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.rotation[k]);
+                                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.yaw[k]);
                                                                if(whichhit!=-1) {
                                                                        hitsomething=1;
                                                                        mid=colpoint;
-                                                                       terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.rotation[k],0)*-1;
+                                                                       terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.yaw[k],0)*-1;
                                                                        ReflectVector(&velocity,&terrainnormal);
 
                                                                        bounceness=terrainnormal*findLength(&velocity)*(abs(normaldotproduct(velocity,terrainnormal)));
@@ -546,11 +546,11 @@ void Weapon::DoStuff(int i) {
 
                                                                start=oldmid;
                                                                end=mid;
-                                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.rotation[k]);
+                                                               whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.yaw[k]);
                                                                if(whichhit!=-1) {
                                                                        hitsomething=1;
                                                                        mid=colpoint;
-                                                                       terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.rotation[k],0)*-1;
+                                                                       terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.yaw[k],0)*-1;
                                                                        ReflectVector(&tipvelocity,&terrainnormal);
 
                                                                        bounceness=terrainnormal*findLength(&tipvelocity)*(abs(normaldotproduct(tipvelocity,terrainnormal)));
@@ -576,14 +576,14 @@ void Weapon::DoStuff(int i) {
                                                {
                                                        start=position;
                                                        end=tippoint;
-                                                       whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.rotation[k]);
+                                                       whichhit=objects.model[k].LineCheck(&start,&end,&colpoint,&objects.position[k],&objects.yaw[k]);
                                                        if(whichhit!=-1) {
                                                                hitsomething=1;
                                                                closestdistance=-1;
                                                                closestswordpoint=colpoint;//(position+tippoint)/2;
-                                                               point[0]=DoRotation(objects.model[k].vertex[objects.model[k].Triangles[whichhit].vertex[0]],0,objects.rotation[k],0)+objects.position[k];
-                                                               point[1]=DoRotation(objects.model[k].vertex[objects.model[k].Triangles[whichhit].vertex[1]],0,objects.rotation[k],0)+objects.position[k];
-                                                               point[2]=DoRotation(objects.model[k].vertex[objects.model[k].Triangles[whichhit].vertex[2]],0,objects.rotation[k],0)+objects.position[k];
+                                                               point[0]=DoRotation(objects.model[k].vertex[objects.model[k].Triangles[whichhit].vertex[0]],0,objects.yaw[k],0)+objects.position[k];
+                                                               point[1]=DoRotation(objects.model[k].vertex[objects.model[k].Triangles[whichhit].vertex[1]],0,objects.yaw[k],0)+objects.position[k];
+                                                               point[2]=DoRotation(objects.model[k].vertex[objects.model[k].Triangles[whichhit].vertex[2]],0,objects.yaw[k],0)+objects.position[k];
                                                                if(DistancePointLine(&closestswordpoint, &point[0], &point[1], &distance,&colpoint )) {
                                                                        if(distance<closestdistance||closestdistance==-1){
                                                                                closestpoint=colpoint;
@@ -654,15 +654,15 @@ void Weapon::DoStuff(int i) {
                                                        XYZ terrainlight;
                                                        terrainlight=terrain.getLighting(position.x,position.z);
                                                        if(environment==snowyenvironment){
-                                                               if(findDistancefast(&position,&viewer)<viewdistance*viewdistance/4)
+                                                               if(distsq(&position,&viewer)<viewdistance*viewdistance/4)
                                                                        Sprite::MakeSprite(cloudsprite, position,velocity, terrainlight.x,terrainlight.y,terrainlight.z, .5, .7);
                                                        }
                                                        else if(environment==grassyenvironment){
-                                                               if(findDistancefast(&position,&viewer)<viewdistance*viewdistance/4)
+                                                               if(distsq(&position,&viewer)<viewdistance*viewdistance/4)
                                                                        Sprite::MakeSprite(cloudsprite, position,velocity, terrainlight.x*90/255,terrainlight.y*70/255,terrainlight.z*8/255, .5, .5);
                                                        }
                                                        else if(environment==desertenvironment){
-                                                               if(findDistancefast(&position,&viewer)<viewdistance*viewdistance/4)
+                                                               if(distsq(&position,&viewer)<viewdistance*viewdistance/4)
                                                                        Sprite::MakeSprite(cloudsprite, position,velocity, terrainlight.x*190/255,terrainlight.y*170/255,terrainlight.z*108/255, .5, .7);
                                                        }
                                                }
@@ -705,15 +705,15 @@ void Weapon::DoStuff(int i) {
                                                        XYZ terrainlight;
                                                        terrainlight=terrain.getLighting(tippoint.x,tippoint.z);
                                                        if(environment==snowyenvironment){
-                                                               if(findDistancefast(&tippoint,&viewer)<viewdistance*viewdistance/4)
+                                                               if(distsq(&tippoint,&viewer)<viewdistance*viewdistance/4)
                                                                        Sprite::MakeSprite(cloudsprite, tippoint,tipvelocity, terrainlight.x,terrainlight.y,terrainlight.z, .5, .7);
                                                        }
                                                        else if(environment==grassyenvironment){
-                                                               if(findDistancefast(&tippoint,&viewer)<viewdistance*viewdistance/4)
+                                                               if(distsq(&tippoint,&viewer)<viewdistance*viewdistance/4)
                                                                        Sprite::MakeSprite(cloudsprite, tippoint,tipvelocity, terrainlight.x*90/255,terrainlight.y*70/255,terrainlight.z*8/255, .5, .5);
                                                        }
                                                        else if(environment==desertenvironment){
-                                                               if(findDistancefast(&tippoint,&viewer)<viewdistance*viewdistance/4)
+                                                               if(distsq(&tippoint,&viewer)<viewdistance*viewdistance/4)
                                                                        Sprite::MakeSprite(cloudsprite, tippoint,tipvelocity, terrainlight.x*190/255,terrainlight.y*170/255,terrainlight.z*108/255, .5, .7);
                                                        }
                                                }
@@ -874,7 +874,7 @@ void Weapon::DoStuff(int i) {
                        flamedelay=.020;
                        flamedelay-=multiplier;
                        normalrot=0;
-                       if(Random()%50==0&&findDistancefast(&position,&viewer)>80) {
+                       if(Random()%50==0&&distsq(&position,&viewer)>80) {
                                XYZ shinepoint;
                                shinepoint=position+(tippoint-position)*(((float)abs(Random()%100))/100);
                                Sprite::MakeSprite(weaponshinesprite, shinepoint,normalrot, 1,1,1, (.1+(float)abs(Random()%100)/200-.25)*1/3*fast_sqrt(findDistance(&shinepoint,&viewer)), 1);
@@ -898,7 +898,7 @@ void Weapon::Draw() {
        static GLfloat M[16];
        
        if((frustum.SphereInFrustum(position.x,position.y,position.z,1)&&
-               findDistancefast(&viewer,&position)<viewdistance*viewdistance))
+               distsq(&viewer,&position)<viewdistance*viewdistance))
        {
                bool draw=false;
                if(owner==-1)
@@ -910,24 +910,24 @@ void Weapon::Draw() {
                                drawhowmany=1;
                } else {
                        if(player[owner].occluded<25)
-                               if((frustum.SphereInFrustum(player[owner].coords.x,player[owner].coords.y+player[owner].scale*3,player[owner].coords.z,player[owner].scale*8)&&findDistancefast(&viewer,&player[owner].coords)<viewdistance*viewdistance)||player[owner].skeleton.free==3)
+                               if((frustum.SphereInFrustum(player[owner].coords.x,player[owner].coords.y+player[owner].scale*3,player[owner].coords.z,player[owner].scale*8)&&distsq(&viewer,&player[owner].coords)<viewdistance*viewdistance)||player[owner].skeleton.free==3)
                                        draw=true;
                        if      (
-                               (player[owner].targetanimation==knifeslashstartanim||
-                                player[owner].targetanimation==swordsneakattackanim||
-                                (player[owner].currentanimation==staffhitanim  &&                              player[owner].currentframe>1)||
-                                (player[owner].currentanimation==staffhitreversedanim  &&              player[owner].currentframe>1)||
-                                (player[owner].currentanimation==staffspinhitanim      &&                      player[owner].currentframe>1)||
-                                (player[owner].currentanimation==staffspinhitreversedanim      &&      player[owner].currentframe>1)||
-                                (player[owner].currentanimation==staffgroundsmashanim  &&              player[owner].currentframe>1)||
-                                (player[owner].targetanimation==swordslashanim &&                              player[owner].targetframe<7)||
-                                player[owner].targetanimation==crouchstabanim||
-                                player[owner].targetanimation==swordslashreversalanim||
-                                player[owner].targetanimation==swordslashreversedanim||
-                                player[owner].targetanimation==knifefollowanim||
-                                player[owner].targetanimation==swordgroundstabanim||
-                                player[owner].targetanimation==knifethrowanim)&&
-                                player[owner].targetanimation==lastdrawnanim&&
+                               (player[owner].animTarget==knifeslashstartanim||
+                                player[owner].animTarget==swordsneakattackanim||
+                                (player[owner].animCurrent==staffhitanim       &&                              player[owner].frameCurrent>1)||
+                                (player[owner].animCurrent==staffhitreversedanim       &&              player[owner].frameCurrent>1)||
+                                (player[owner].animCurrent==staffspinhitanim   &&                      player[owner].frameCurrent>1)||
+                                (player[owner].animCurrent==staffspinhitreversedanim   &&      player[owner].frameCurrent>1)||
+                                (player[owner].animCurrent==staffgroundsmashanim       &&              player[owner].frameCurrent>1)||
+                                (player[owner].animTarget==swordslashanim      &&                              player[owner].frameTarget<7)||
+                                player[owner].animTarget==crouchstabanim||
+                                player[owner].animTarget==swordslashreversalanim||
+                                player[owner].animTarget==swordslashreversedanim||
+                                player[owner].animTarget==knifefollowanim||
+                                player[owner].animTarget==swordgroundstabanim||
+                                player[owner].animTarget==knifethrowanim)&&
+                                player[owner].animTarget==lastdrawnanim&&
                                 !player[owner].skeleton.free
                                )
                        {
@@ -935,7 +935,7 @@ void Weapon::Draw() {
                        } else {
                                drawhowmany=1;
                        }
-                       if(player[owner].targetanimation==swordgroundstabanim)
+                       if(player[owner].animTarget==swordgroundstabanim)
                        {
                                lastdrawnrotation1=rotation1;
                                lastdrawnrotation2=rotation2;
@@ -974,11 +974,11 @@ void Weapon::Draw() {
 
                                        if(owner!=-1)
                                        {
-                                               if(player[owner].targetanimation==staffhitanim||player[owner].currentanimation==staffhitanim||player[owner].targetanimation==staffhitreversedanim||player[owner].currentanimation==staffhitreversedanim)
+                                               if(player[owner].animTarget==staffhitanim||player[owner].animCurrent==staffhitanim||player[owner].animTarget==staffhitreversedanim||player[owner].animCurrent==staffhitreversedanim)
                                                {
                                                        glTranslatef(0,0,-.3);
                                                }
-                                               if(player[owner].targetanimation==staffgroundsmashanim||player[owner].currentanimation==staffgroundsmashanim||player[owner].targetanimation==staffspinhitreversedanim||player[owner].currentanimation==staffspinhitreversedanim||player[owner].targetanimation==staffspinhitanim||player[owner].currentanimation==staffspinhitanim)
+                                               if(player[owner].animTarget==staffgroundsmashanim||player[owner].animCurrent==staffgroundsmashanim||player[owner].animTarget==staffspinhitreversedanim||player[owner].animCurrent==staffspinhitreversedanim||player[owner].animTarget==staffspinhitanim||player[owner].animCurrent==staffspinhitanim)
                                                {
                                                        glTranslatef(0,0,-.1);
                                                }
@@ -1026,7 +1026,7 @@ void Weapon::Draw() {
                        lastdrawnbigtilt2=bigtilt2;
                        lastdrawnsmallrotation=smallrotation;
                        lastdrawnsmallrotation2=smallrotation2;
-                       if(owner!=-1)lastdrawnanim=player[owner].currentanimation;
+                       if(owner!=-1)lastdrawnanim=player[owner].animCurrent;
                }
                if(owner!=-1)
                {
@@ -1073,12 +1073,12 @@ Weapons::Weapons()
 
 Weapons::~Weapons()
 {
-       if (Weapon::stafftextureptr) glDeleteTextures( 1, &Weapon::stafftextureptr );
-       if (Weapon::knifetextureptr) glDeleteTextures( 1, &Weapon::knifetextureptr );
-       if (Weapon::lightbloodknifetextureptr) glDeleteTextures( 1, &Weapon::lightbloodknifetextureptr );
-       if (Weapon::bloodknifetextureptr) glDeleteTextures( 1, &Weapon::bloodknifetextureptr );
-       if (Weapon::swordtextureptr) glDeleteTextures( 1, &Weapon::swordtextureptr );
-       if (Weapon::lightbloodswordtextureptr) glDeleteTextures( 1, &Weapon::lightbloodswordtextureptr );
-       if (Weapon::bloodswordtextureptr) glDeleteTextures( 1, &Weapon::bloodswordtextureptr );
+       Weapon::stafftextureptr.destroy();
+       Weapon::knifetextureptr.destroy();
+       Weapon::lightbloodknifetextureptr.destroy();
+       Weapon::bloodknifetextureptr.destroy();
+       Weapon::swordtextureptr.destroy();
+       Weapon::lightbloodswordtextureptr.destroy();
+       Weapon::bloodswordtextureptr.destroy();
 }