diff options
| author | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2021-06-17 14:20:54 +0700 |
|---|---|---|
| committer | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2021-06-17 14:22:53 +0700 |
| commit | 602a0c5951050e7cce645534cb4f136cf9f4fee4 (patch) | |
| tree | e70e63b0b0058830e58c244ad917bc892c10418f /Source/Person.cpp | |
| parent | 094e12df1ebb81d304803be4b274546384ec117c (diff) | |
| download | blackshades-602a0c5951050e7cce645534cb4f136cf9f4fee4.tar.gz | |
Rename source and build directory1.1.1
Diffstat (limited to 'Source/Person.cpp')
| -rw-r--r-- | Source/Person.cpp | 1045 |
1 files changed, 0 insertions, 1045 deletions
diff --git a/Source/Person.cpp b/Source/Person.cpp deleted file mode 100644 index 43aa873..0000000 --- a/Source/Person.cpp +++ /dev/null @@ -1,1045 +0,0 @@ -/**> HEADER FILES <**/ -#include "Person.h" - -extern double multiplier; -extern unsigned int gSourceID[100]; -extern unsigned int gSampleSet[100]; -extern Animation animation[30]; -extern int thirdperson; -extern int visions; -extern Camera camera; -extern float rad2deg; -extern Model gunmodels[10]; -extern Model skeletonmodels[10]; -extern Sprites sprites; -extern float soundscalefactor; -extern int slomo; - -extern int forwardskey; -extern int backwardskey; -extern int leftkey; -extern int rightkey; -extern int aimkey; -extern int psychicaimkey; -extern int psychickey; - -HitStruct Person::BulletCollideWithPlayer(int who, XYZ start, XYZ end){ - float damage=20; - XYZ tempbulletloc[2]; - XYZ collisionpoint; - XYZ sparkpos; - GLfloat M[16]; - int collide; - float howfar; - XYZ average; - XYZ facing; - int howmany; - float distancemax; - HitStruct hitstruct; - hitstruct.collision=0; - //Make bounding sphere - average=0; - howmany=0; - for(int j=0;j<skeleton.num_joints;j++){ - average.x=average.x+skeleton.joints[j].position.x; - average.y=average.y+skeleton.joints[j].position.y; - average.z=average.z+skeleton.joints[j].position.z; - howmany++; - } - average=average/howmany; - distancemax=0; - for(int j=0;j<skeleton.num_joints;j++){ - if(findDistancefast(average,skeleton.joints[j].position)>distancemax){ - distancemax=findDistancefast(average,skeleton.joints[j].position); - } - } - distancemax=fast_sqrt(distancemax); - //Collide with player - if(skeleton.free<1){ - start=start-playercoords; - end=end-playercoords; - if(playerrotation)start=DoRotation(start,0,-playerrotation,0); - if(playerrotation)end=DoRotation(end,0,-playerrotation,0); - } - tempbulletloc[0]=start; - tempbulletloc[1]=end; - if(sphere_line_intersection(tempbulletloc[0].x,tempbulletloc[0].y,tempbulletloc[0].z, - tempbulletloc[1].x,tempbulletloc[1].y,tempbulletloc[1].z, - average.x, average.y, average.z, distancemax)){ - for(int j=0;j<skeleton.num_joints;j++){ - if(skeleton.joints[j].hasparent&&skeleton.joints[j].visible){ - tempbulletloc[0]=start; - tempbulletloc[1]=end; - glPushMatrix(); - glLoadIdentity(); - glScalef(1,1/skeleton.joints[j].length,1); - glRotatef(skeleton.joints[j].rotate2-90,0,0,1); - glRotatef(skeleton.joints[j].rotate1-90,0,1,0); - glTranslatef( (-(skeleton.joints[j].position.x+skeleton.joints[j].parent->position.x)/2), - (-(skeleton.joints[j].position.y+skeleton.joints[j].parent->position.y)/2), - (-(skeleton.joints[j].position.z+skeleton.joints[j].parent->position.z)/2)); - glTranslatef(tempbulletloc[0].x,tempbulletloc[0].y,tempbulletloc[0].z); - glGetFloatv(GL_MODELVIEW_MATRIX,M); - tempbulletloc[0].x=M[12]; - tempbulletloc[0].y=M[13]; - tempbulletloc[0].z=M[14]; - glPopMatrix(); - glPushMatrix(); - glLoadIdentity(); - glScalef(1,1/skeleton.joints[j].length,1); - glRotatef(skeleton.joints[j].rotate2-90,0,0,1); - glRotatef(skeleton.joints[j].rotate1-90,0,1,0); - glTranslatef( (-(skeleton.joints[j].position.x+skeleton.joints[j].parent->position.x)/2), - (-(skeleton.joints[j].position.y+skeleton.joints[j].parent->position.y)/2), - (-(skeleton.joints[j].position.z+skeleton.joints[j].parent->position.z)/2)); - glTranslatef(tempbulletloc[1].x,tempbulletloc[1].y,tempbulletloc[1].z); - glGetFloatv(GL_MODELVIEW_MATRIX,M); - tempbulletloc[1].x=M[12]; - tempbulletloc[1].y=M[13]; - tempbulletloc[1].z=M[14]; - glPopMatrix(); - collide=skeletonmodels[skeleton.joints[j].modelnum].LineCheck(tempbulletloc[0],tempbulletloc[1],&collisionpoint); - if(collide!=-1) - { - glPushMatrix(); - glLoadIdentity(); - glTranslatef( (skeleton.joints[j].position.x+skeleton.joints[j].parent->position.x)/2, - (skeleton.joints[j].position.y+skeleton.joints[j].parent->position.y)/2, - (skeleton.joints[j].position.z+skeleton.joints[j].parent->position.z)/2); - glRotatef(-skeleton.joints[j].rotate1+90,0,1,0); - glRotatef(-skeleton.joints[j].rotate2+90,0,0,1); - glScalef(1,skeleton.joints[j].length,1); - glTranslatef(collisionpoint.x,collisionpoint.y,collisionpoint.z); - glGetFloatv(GL_MODELVIEW_MATRIX,M); - collisionpoint.x=M[12]; - collisionpoint.y=M[13]; - collisionpoint.z=M[14]; - glPopMatrix(); - hitstruct.collision=1; - hitstruct.hitlocation=collisionpoint; - hitstruct.joint1=&skeleton.joints[j]; - hitstruct.joint2=skeleton.joints[j].parent; - } - } - } - for(int j=0;j<skeleton.num_muscles;j++){ - if(skeleton.muscles[j].visible){ - tempbulletloc[0]=start; - tempbulletloc[1]=end; - glPushMatrix(); - glLoadIdentity(); - glScalef(1,1/skeleton.muscles[j].length,1); - glRotatef(skeleton.muscles[j].rotate3,0,1,0); - glRotatef(skeleton.muscles[j].rotate2-90,0,0,1); - glRotatef(skeleton.muscles[j].rotate1-90,0,1,0); - glTranslatef( (-(skeleton.muscles[j].parent1->position.x+skeleton.muscles[j].parent2->position.x)/2), - (-(skeleton.muscles[j].parent1->position.y+skeleton.muscles[j].parent2->position.y)/2), - (-(skeleton.muscles[j].parent1->position.z+skeleton.muscles[j].parent2->position.z)/2)); - - glTranslatef(tempbulletloc[0].x,tempbulletloc[0].y,tempbulletloc[0].z); - glGetFloatv(GL_MODELVIEW_MATRIX,M); - tempbulletloc[0].x=M[12]; - tempbulletloc[0].y=M[13]; - tempbulletloc[0].z=M[14]; - glPopMatrix(); - glPushMatrix(); - glLoadIdentity(); - glScalef(1,1/skeleton.muscles[j].length,1); - glRotatef(skeleton.muscles[j].rotate3,0,1,0); - glRotatef(skeleton.muscles[j].rotate2-90,0,0,1); - glRotatef(skeleton.muscles[j].rotate1-90,0,1,0); - - glTranslatef( (-(skeleton.muscles[j].parent1->position.x+skeleton.muscles[j].parent2->position.x)/2), - (-(skeleton.muscles[j].parent1->position.y+skeleton.muscles[j].parent2->position.y)/2), - (-(skeleton.muscles[j].parent1->position.z+skeleton.muscles[j].parent2->position.z)/2)); - glTranslatef(tempbulletloc[1].x,tempbulletloc[1].y,tempbulletloc[1].z); - glGetFloatv(GL_MODELVIEW_MATRIX,M); - tempbulletloc[1].x=M[12]; - tempbulletloc[1].y=M[13]; - tempbulletloc[1].z=M[14]; - glPopMatrix(); - collide=skeletonmodels[skeleton.muscles[j].parent1->modelnum].LineCheck(tempbulletloc[0],tempbulletloc[1],&collisionpoint); - if(collide!=-1) - { - glPushMatrix(); - glLoadIdentity(); - glTranslatef( (skeleton.muscles[j].parent1->position.x+skeleton.muscles[j].parent2->position.x)/2, - (skeleton.muscles[j].parent1->position.y+skeleton.muscles[j].parent2->position.y)/2, - (skeleton.muscles[j].parent1->position.z+skeleton.muscles[j].parent2->position.z)/2); - glRotatef(-skeleton.muscles[j].rotate1+90,0,1,0); - glRotatef(-skeleton.muscles[j].rotate2+90,0,0,1); - glRotatef(-skeleton.muscles[j].rotate3,0,1,0); - glScalef(1,findDistance(skeleton.muscles[j].parent1->position,skeleton.muscles[j].parent2->position),1); - glTranslatef(collisionpoint.x,collisionpoint.y,collisionpoint.z); - glGetFloatv(GL_MODELVIEW_MATRIX,M); - collisionpoint.x=M[12]; - collisionpoint.y=M[13]; - collisionpoint.z=M[14]; - glPopMatrix(); - hitstruct.collision=1; - hitstruct.hitlocation=collisionpoint; - hitstruct.joint1=skeleton.muscles[j].parent1; - hitstruct.joint2=skeleton.muscles[j].parent2; - } - } - } - } - if(skeleton.free<1){ - if(playerrotation)hitstruct.hitlocation=DoRotation(hitstruct.hitlocation,0,playerrotation,0); - hitstruct.hitlocation=hitstruct.hitlocation+playercoords; - } - return hitstruct; -} - -extern float camerashake; -extern int cycle; -void Person::DoAnimations(int who){ - - if(target>1&&!skeleton.free){ - //Footstep sounds - if(who==0&&slomo==0&&(targetanimation==joganim||targetanimation==walkanim)&&(targetframe==0||targetframe==8)&&visions==0&&(onground||abs(velocity.y)<1)){ - int whichsound; - float gLoc[3]; - gLoc[0]=playercoords.x/soundscalefactor; - gLoc[1]=playercoords.y/soundscalefactor; - gLoc[2]=playercoords.z/soundscalefactor; - whichsound=footstepsound+abs(Random())%5; - alSourcefv(gSourceID[whichsound], AL_POSITION, gLoc); - alSourcePlay(gSourceID[whichsound]); - } - if(targetanimation==zombieeatanim&&(targetframe==3)){ - int whichsound; - float gLoc[3]; - XYZ soundpoint=(DoRotation(skeleton.joints[skeleton.jointlabels[head]].position,0,playerrotation,0)+playercoords); - gLoc[0]=soundpoint.x/soundscalefactor; - gLoc[1]=soundpoint.y/soundscalefactor; - gLoc[2]=soundpoint.z/soundscalefactor; - alSourcefv(gSourceID[bodyhitsound], AL_POSITION, gLoc); - alSourcePlay(gSourceID[bodyhitsound]); - bleeding=1; - bleeddelay=1; - bjoint1=&skeleton.joints[skeleton.jointlabels[head]]; - bjoint2=&skeleton.joints[skeleton.jointlabels[neck]]; - } - targetframe=currentframe; - currentanimation=targetanimation; - if(!backwardsanim){targetframe++; - if(targetframe>animation[currentanimation].numframes-1)targetframe=0;} - if(backwardsanim){targetframe--; - if(targetframe<0)targetframe=animation[currentanimation].numframes-1;} - target=0; - if((currentanimation==getupfrontanim||currentanimation==getupbackanim)&&targetframe==0){ - targetanimation=idleanim; - } - if(targetanimation==diveanim&¤tanimation==diveanim&&targetframe==0){ - targetanimation=getupfrontanim; - float gLoc[3]; - XYZ soundpoint=(DoRotation(skeleton.joints[skeleton.jointlabels[head]].position,0,playerrotation,0)+playercoords); - gLoc[0]=soundpoint.x/soundscalefactor; - gLoc[1]=soundpoint.y/soundscalefactor; - gLoc[2]=soundpoint.z/soundscalefactor; - alSourcefv(gSourceID[bodywhacksound], AL_POSITION, gLoc); - alSourcePlay(gSourceID[bodywhacksound]); - } - if(currentanimation==throwanim&&targetframe==0){ - targetanimation=idleanim; - } - if(currentanimation==thrownanim&&targetframe==0){ - skeleton.offset=0; - skeleton.free=1; - longdead=1; - for(int j=0;j<skeleton.num_joints;j++){ - skeleton.joints[j].position+=skeleton.joints[j].offset; - skeleton.joints[j].position=DoRotation(skeleton.joints[j].position,0,playerrotation,0); - skeleton.joints[j].position+=playercoords; - skeleton.joints[j].realoldposition=skeleton.joints[j].position; - skeleton.joints[j].velocity=DoRotation(skeleton.joints[j].velocity,0,playerrotation,0); - } - } - } - - if(!skeleton.free){ - if(currentanimation!=lyinganim){ - if(animation[targetanimation].speed[currentframe]>animation[currentanimation].speed[currentframe]) - target+=multiplier*animation[targetanimation].speed[currentframe]*speed; - if(animation[targetanimation].speed[currentframe]<=animation[currentanimation].speed[currentframe]) - target+=multiplier*animation[currentanimation].speed[currentframe]*speed; - } - if(currentanimation==lyinganim){ - target+=multiplier*animation[targetanimation].speed[targetframe]*speed; - } - if(((currentanimation==crouchanim)&&(targetanimation!=crouchanim))||((currentanimation!=crouchanim)&&(targetanimation==crouchanim)))target+=multiplier*animation[crouchanim].speed[0]*2; - if(currentanimation==idleanim&&targetanimation==idleanim)target-=multiplier*animation[idleanim].speed[0]/2; - - if(target>1)currentframe=targetframe; - - for(int i=0;i<skeleton.num_joints;i++){ - if(currentanimation!=lyinganim){ - skeleton.joints[i].velocity=((animation[currentanimation].position[i][currentframe]*(1-target)+animation[targetanimation].position[i][targetframe]*(target))-(skeleton.joints[i].position))/multiplier; - skeleton.joints[i].position=animation[currentanimation].position[i][currentframe]*(1-target)+animation[targetanimation].position[i][targetframe]*(target); - if(skeleton.joints[i].hasparent&&skeleton.joints[i].visible) - { - skeleton.joints[i].rotate1=animation[currentanimation].rotate1[i][currentframe]*(1-target)+animation[targetanimation].rotate1[i][targetframe]*(target); - skeleton.joints[i].rotate2=animation[currentanimation].rotate2[i][currentframe]*(1-target)+animation[targetanimation].rotate2[i][targetframe]*(target); - skeleton.joints[i].rotate3=animation[currentanimation].rotate3[i][currentframe]*(1-target)+animation[targetanimation].rotate3[i][targetframe]*(target); - } - if(skeleton.muscles[i].visible) - { - skeleton.muscles[i].rotate1=animation[currentanimation].mrotate1[i][currentframe]*(1-target)+animation[targetanimation].mrotate1[i][targetframe]*(target); - skeleton.muscles[i].rotate2=animation[currentanimation].mrotate2[i][currentframe]*(1-target)+animation[targetanimation].mrotate2[i][targetframe]*(target); - skeleton.muscles[i].rotate3=animation[currentanimation].mrotate3[i][currentframe]*(1-target)+animation[targetanimation].mrotate3[i][targetframe]*(target); - } - } - if(currentanimation==lyinganim){ - skeleton.joints[i].velocity=((tempanimation.position[i][0]*(1-target)+animation[targetanimation].position[i][targetframe]*(target))-(skeleton.joints[i].position))/multiplier; - skeleton.joints[i].position=tempanimation.position[i][0]*(1-target)+animation[targetanimation].position[i][targetframe]*(target); - } - } - } - - //Look up+down - if(!skeleton.free&&(whichgun!=nogun||who==0)&&health==100&¤tanimation!=lyinganim&¤tanimation!=getupfrontanim&¤tanimation!=getupbackanim&¤tanimation!=diveanim&&targetanimation!=diveanim&&targetanimation!=throwanim&&targetanimation!=thrownanim){ - XYZ facing; - XYZ facingdown; - XYZ facinghalf; - XYZ facingright; - int oldanimation=currentanimation; - if(who==0){ - playerrotation2=camera.rotation2; - //Facing - facing=0; - facing.z=1; - - facinghalf=DoRotation(facing,playerrotation2/2,0,0); - facinghalf=DoRotation(facinghalf,0,-7,0); - facing=DoRotation(facing,playerrotation2,0,0); - facingright=DoRotation(facing,0,-90,0); - facingdown=DoRotation(facing,90,0,0); - } - if(who!=0){ - //Facing - facing=0; - facing.z=1; - - facinghalf=DoRotation(facing,playerrotation2/2,0,0); - facinghalf=DoRotation(facinghalf,0,-7,0); - facing=DoRotation(facing,playerrotation2,0,0); - facingright=DoRotation(facing,0,-90,0); - facingdown=DoRotation(facing,90,0,0); - } - XYZ rotatearound; - XYZ oldpos; - if(whichgun==sniperrifle){ - for(int i=0;i<skeleton.num_joints;i++){ - if(skeleton.joints[i].label!=righthand&&skeleton.joints[i].label!=rightelbow&&skeleton.joints[i].label!=rightwrist&&skeleton.joints[i].label!=lefthand&&skeleton.joints[i].label!=leftelbow&&skeleton.joints[i].label!=leftwrist){ - }else{ - skeleton.joints[i].position=animation[rifleholdanim].position[i][0]; - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position); - } - } - } - if(whichgun==shotgun){ - for(int i=0;i<skeleton.num_joints;i++){ - if(skeleton.joints[i].label!=righthand&&skeleton.joints[i].label!=rightelbow&&skeleton.joints[i].label!=rightwrist&&skeleton.joints[i].label!=lefthand&&skeleton.joints[i].label!=leftelbow&&skeleton.joints[i].label!=leftwrist){ - }else{ - skeleton.joints[i].position=animation[rifleholdanim].position[i][0]; - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position); - } - } - } - if(whichgun==assaultrifle){ - for(int i=0;i<skeleton.num_joints;i++){ - if(skeleton.joints[i].label!=righthand&&skeleton.joints[i].label!=rightelbow&&skeleton.joints[i].label!=rightwrist&&skeleton.joints[i].label!=lefthand&&skeleton.joints[i].label!=leftelbow&&skeleton.joints[i].label!=leftwrist){ - }else{ - skeleton.joints[i].position=animation[rifleholdanim].position[i][0]; - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position); - } - } - } - if((aiming||aimamount>0||whichgun==grenade)&&whichgun!=nogun){ - if(aiming&&targetanimation!=joganim){ - if(aimamount<1)aimamount+=multiplier*4; - if(aimamount>1)aimamount=1; - } - if(!aiming||targetanimation==joganim){ - if(aimamount>0)aimamount-=multiplier*4; - if(aimamount<0)aimamount=0; - } - if(grenphase==1){ - if(grenamount<1)grenamount+=multiplier*4; - if(grenamount>1)grenamount=1; - } - if(grenphase==0){ - if(grenamount>0)grenamount-=multiplier*4; - if(grenamount<0)grenamount=0; - } - rotatearound=skeleton.joints[skeleton.jointlabels[neck]].position; - for(int i=0;i<skeleton.num_joints;i++){ - if(skeleton.joints[i].label!=righthand&&skeleton.joints[i].label!=rightelbow&&skeleton.joints[i].label!=rightwrist&&skeleton.joints[i].label!=lefthand&&skeleton.joints[i].label!=leftelbow&&skeleton.joints[i].label!=leftwrist){ - }else{ - if(whichgun==sniperrifle){ - oldpos=skeleton.joints[i].position; - skeleton.joints[i].position=animation[rifleaimanim].position[i][0]; - if(currentanimation==crouchanim||targetanimation==crouchanim){ - skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position); - } - skeleton.joints[i].position+=facingright*0.1; - skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,(playerrotation2/2-10)*aimamount,0,0); - skeleton.joints[i].position=skeleton.joints[i].position*(aimamount)+oldpos*(1-aimamount); - } - if(whichgun==shotgun){ - oldpos=skeleton.joints[i].position; - skeleton.joints[i].position=animation[assaultrifleaimanim].position[i][0]; - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position); - skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,(playerrotation2/2)*aimamount,0,0); - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position+=facingdown*.2; - else skeleton.joints[i].position-=facingdown*.02; - if(skeleton.joints[i].label==righthand)skeleton.joints[i].position=skeleton.joints[skeleton.jointlabels[lefthand]].position-facinghalf*2; - skeleton.joints[i].position=skeleton.joints[i].position*(aimamount)+oldpos*(1-aimamount); - } - if(whichgun==assaultrifle){ - oldpos=skeleton.joints[i].position; - skeleton.joints[i].position=animation[assaultrifleaimanim].position[i][0]; - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position); - skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,(playerrotation2/2)*aimamount,0,0); - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position+=facingdown*.2; - else skeleton.joints[i].position-=facingdown*.02; - if(skeleton.joints[i].label==righthand)skeleton.joints[i].position=skeleton.joints[skeleton.jointlabels[lefthand]].position-facinghalf*2; - skeleton.joints[i].position=skeleton.joints[i].position*(aimamount)+oldpos*(1-aimamount); - } - if(whichgun==handgun1){ - oldpos=skeleton.joints[i].position; - skeleton.joints[i].position=animation[pistolaimanim].position[i][0]; - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position); - skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,(playerrotation2/2)*aimamount,0,0); - if(currentanimation==crouchanim||targetanimation==crouchanim){skeleton.joints[i].position+=facingright*.15;skeleton.joints[i].position+=facingdown*.3;} - else skeleton.joints[i].position-=facingdown*.1; - skeleton.joints[i].position=skeleton.joints[i].position*(aimamount)+oldpos*(1-aimamount); - } - if(whichgun==handgun2){ - oldpos=skeleton.joints[i].position; - skeleton.joints[i].position=animation[pistolaimanim].position[i][0]; - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position); - skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,(playerrotation2/2)*aimamount,0,0); - if(currentanimation==crouchanim||targetanimation==crouchanim){skeleton.joints[i].position+=facingright*.15;skeleton.joints[i].position+=facingdown*.3;} - else skeleton.joints[i].position-=facingdown*.1; - skeleton.joints[i].position=skeleton.joints[i].position*(aimamount)+oldpos*(1-aimamount); - } - if(whichgun==grenade){ - aimamount=1; - oldpos=skeleton.joints[i].position; - skeleton.joints[i].position=animation[grenadeaimanim].position[i][0]; - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position); - skeleton.joints[i].position=skeleton.joints[i].position*(aimamount)+oldpos*(1-aimamount); - } - if(whichgun==grenade&&grenamount>0){ - oldpos=skeleton.joints[i].position; - skeleton.joints[i].position=animation[grenadechargeanim].position[i][0]; - if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position); - skeleton.joints[i].position=skeleton.joints[i].position*(grenamount)+oldpos*(1-grenamount); - } - if(thirdperson||who!=0)skeleton.joints[i].position+=facingdown*.4; - if(currentanimation!=crouchanim)skeleton.joints[i].position-=facinghalf*recoil*.35; - if(currentanimation==crouchanim)skeleton.joints[i].position-=facinghalf*recoil*.1; - } - } - } - //Whack - if(attackframe>-1&&whichgun!=grenade){ - for(int i=0;i<skeleton.num_joints;i++){ - if(!skeleton.joints[i].lower){ - if(attackframe==animation[riflehitanim].numframes)skeleton.joints[i].position=skeleton.joints[i].position*(attacktarget)+animation[riflehitanim].position[i][attackframe-1]*(1-attacktarget); - if(attackframe>0&&attackframe<animation[riflehitanim].numframes)skeleton.joints[i].position=animation[riflehitanim].position[i][attackframe-1]*(1-attacktarget)+animation[riflehitanim].position[i][attackframe]*(attacktarget); - if(attackframe==0)skeleton.joints[i].position=skeleton.joints[i].position*(1-attacktarget)+animation[riflehitanim].position[i][attackframe]*(attacktarget); - } - } - if(attackframe==0)attacktarget+=multiplier*animation[riflehitanim].speed[attackframe]*2; - if(attackframe>0)attacktarget+=multiplier*animation[riflehitanim].speed[attackframe-1]*2; - if(attacktarget>1){ - attacktarget=0; - attackframe++; - if(attackframe>animation[riflehitanim].numframes)attackframe=-1; - } - } - //Throw grenade - if(attackframe>-1&&whichgun==grenade&&ammo>0){ - for(int i=0;i<skeleton.num_joints;i++){ - if(!skeleton.joints[i].lower){ - if(attackframe==animation[grenadethrowanim].numframes)skeleton.joints[i].position=skeleton.joints[i].position*(attacktarget)+animation[grenadethrowanim].position[i][attackframe-1]*(1-attacktarget); - if(attackframe>0&&attackframe<animation[grenadethrowanim].numframes)skeleton.joints[i].position=animation[grenadethrowanim].position[i][attackframe-1]*(1-attacktarget)+animation[grenadethrowanim].position[i][attackframe]*(attacktarget); - if(attackframe==0)skeleton.joints[i].position=skeleton.joints[i].position*(1-attacktarget)+animation[grenadethrowanim].position[i][attackframe]*(attacktarget); - } - } - if(attackframe==0)attacktarget+=multiplier*animation[grenadethrowanim].speed[attackframe]*2; - if(attackframe>0)attacktarget+=multiplier*animation[grenadethrowanim].speed[attackframe-1]*2; - if(attacktarget>1){ - attacktarget=0; - attackframe++; - if(attackframe>animation[grenadethrowanim].numframes){ - attackframe=-1; - } - if(attackframe==animation[grenadethrowanim].numframes-1&&ammo>0){ - ammo=-1; - sprites.MakeSprite(grenadesprite, 1, 1, 1, 1, DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position,0,playerrotation,0)+playercoords, DoRotation(facing,0,playerrotation,0)*30+velocity, 1); - sprites.MakeSprite(spoonsprite, 1, 1, 1, 1, DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position,0,playerrotation,0)+playercoords, DoRotation(facing,0,playerrotation,0)*10+velocity, 1); - sprites.MakeSprite(pinsprite, 1, 1, 1, 1, DoRotation(skeleton.joints[skeleton.jointlabels[lefthand]].position,0,playerrotation,0)+playercoords, facing*.1+velocity, 1); - XYZ soundsource=DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position,0,playerrotation,0)+playercoords; - float gLoc[3]; - gLoc[0]=soundsource.x/soundscalefactor; - gLoc[1]=soundsource.y/soundscalefactor; - gLoc[2]=soundsource.z/soundscalefactor; - alSourcefv(gSourceID[grenadethrowsound], AL_POSITION, gLoc); - alSourcePlay(gSourceID[grenadethrowsound]); - } - } - } - - rotatearound=skeleton.joints[skeleton.jointlabels[abdomen]].position; - if(who==0) - for(int i=0;i<skeleton.num_joints;i++){ - if(skeleton.joints[i].lower==0) - skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,playerrotation2/2,0,0); - } - if(who==0) - for(int i=0;i<skeleton.num_joints;i++){ - if(skeleton.joints[i].lower==1&&skeleton.joints[i].label!=groin) - skeleton.joints[i].position=DoRotation(skeleton.joints[i].position,0,playerlowrotation-playerrotation,0); - } - //head facing - if(who==0){ - rotatearound=skeleton.joints[skeleton.jointlabels[neck]].position; - skeleton.joints[skeleton.jointlabels[head]].position=rotatearound+DoRotation(skeleton.joints[skeleton.jointlabels[head]].position-rotatearound,playerrotation2/2,0,0); - } - - skeleton.DoConstraints(); - - //Reload - if(whichgun!=nogun&&whichgun!=knife){ - if(reloading>0){ - aiming=0; - reloading-=multiplier; - } - if(ammo<0&&reloads[whichgun]>0&&reloading<=0){ - if(whichgun!=grenade){ - float gLoc[3]; - ALint tempint; - gLoc[0]=playercoords.x/soundscalefactor; - gLoc[1]=playercoords.y/soundscalefactor; - gLoc[2]=playercoords.z/soundscalefactor; -#ifdef DEBIAN_NEEDS_TO_UPDATE_THEIR_OPENAL - alGetSourceiv(gSourceID[reloadsound], AL_SOURCE_STATE, &tempint); -#else - alGetSourcei(gSourceID[reloadsound], AL_SOURCE_STATE, &tempint); -#endif - - if (tempint != AL_PLAYING){ - alSourcefv(gSourceID[reloadsound], AL_POSITION, gLoc); - alSourcePlay(gSourceID[reloadsound]); - } - } - reloading=3; - aiming=0; - if(whichgun==sniperrifle)ammo=5; - if(whichgun==assaultrifle)ammo=25; - if(whichgun==handgun1)ammo=12; - if(whichgun==handgun2)ammo=16; - if(whichgun==grenade){ammo=1; reloading=1;} - if(whichgun==shotgun)ammo=6; - reloads[whichgun]--; - } - if(reloads[whichgun]==0&&whichgun==grenade&&ammo<=0){ - whichgun=nogun; - } - if(reloading<0){ - reloading=0; - aiming=1; - } - } - } -} - -void Person::DoAnimationslite(int who){ - - int oldanimation=currentanimation; - if(target>1&&!skeleton.free){ - //Footstep sounds - if(who==0&&(targetanimation==joganim||targetanimation==walkanim)&&(targetframe==0||targetframe==8)&&visions==0&&(onground||abs(velocity.y)<1)){ - int whichsound; - float gLoc[3]; - gLoc[0]=playercoords.x/soundscalefactor; - gLoc[1]=playercoords.y/soundscalefactor; - gLoc[2]=playercoords.z/soundscalefactor; - whichsound=footstepsound+abs(Random())%5; - alSourcefv(gSourceID[whichsound], AL_POSITION, gLoc); - alSourcePlay(gSourceID[whichsound]); - } - if(targetanimation==zombieeatanim&&(targetframe==3)){ - int whichsound; - float gLoc[3]; - XYZ soundpoint=(DoRotation(skeleton.joints[skeleton.jointlabels[head]].position,0,playerrotation,0)+playercoords); - gLoc[0]=soundpoint.x/soundscalefactor; - gLoc[1]=soundpoint.y/soundscalefactor; - gLoc[2]=soundpoint.z/soundscalefactor; - alSourcefv(gSourceID[bodyhitsound], AL_POSITION, gLoc); - alSourcePlay(gSourceID[bodyhitsound]); - bleeding=1; - bleeddelay=1; - bjoint1=&skeleton.joints[skeleton.jointlabels[head]]; - bjoint2=&skeleton.joints[skeleton.jointlabels[neck]]; - } - targetframe=currentframe; - currentanimation=targetanimation; - if(!backwardsanim){targetframe++; - if(targetframe>animation[currentanimation].numframes-1)targetframe=0;} - if(backwardsanim){targetframe--; - if(targetframe<0)targetframe=animation[currentanimation].numframes-1;} - target=0; - if((currentanimation==getupfrontanim||currentanimation==getupbackanim)&&targetframe==0){ - targetanimation=idleanim; - } - } - - if(!skeleton.free){ - if(currentanimation!=lyinganim){ - if(animation[targetanimation].speed[currentframe]>animation[currentanimation].speed[currentframe]) - target+=multiplier*animation[targetanimation].speed[currentframe]*speed; - if(animation[targetanimation].speed[currentframe]<=animation[currentanimation].speed[currentframe]) - target+=multiplier*animation[currentanimation].speed[currentframe]*speed; - } - if(currentanimation==lyinganim){ - target+=multiplier*animation[targetanimation].speed[targetframe]*speed; - } - if(((currentanimation==crouchanim)&&(targetanimation!=crouchanim))||((currentanimation!=crouchanim)&&(targetanimation==crouchanim)))target+=multiplier*animation[crouchanim].speed[0]*2; - if(currentanimation==idleanim&&targetanimation==idleanim)target-=multiplier*animation[idleanim].speed[0]/2; - - if(target>1)currentframe=targetframe; - } -} - -void Person::DoStuff(int who){ - int moveanim; - - if((targetanimation!=idleanim&&targetanimation!=crouchanim)||visions==1)playerlowrotation=playerrotation; - if(targetanimation!=crouchanim&¤tanimation!=crouchanim){ - if(playerrotation>playerlowrotation+50){playerlowrotation=playerrotation-50; targetanimation=walkanim; targetframe=0; target=0;} - if(playerrotation<playerlowrotation-50){playerlowrotation=playerrotation+50; targetanimation=walkanim; targetframe=0; target=0;} - } - if(targetanimation==crouchanim||currentanimation==crouchanim){ - if(playerrotation>playerlowrotation+70){playerrotation=playerlowrotation+70;} - if(playerrotation<playerlowrotation-70){playerrotation=playerlowrotation-70;} - } - if(who==0)camera.rotation=180-playerrotation; - - if(who!=0&&visions==0){ - if(targetanimation!=walkanim&&targetanimation!=zombiewalkanim)speed=1.0*speedmult; - if(targetanimation==walkanim||targetanimation==zombiewalkanim)speed=1.8*speedmult; - playerlowrotation=playerrotation; - } - - //Do controls - if(who==0&&targetanimation!=diveanim&&targetanimation!=throwanim&&targetanimation!=thrownanim&¤tanimation!=diveanim&¤tanimation!=getupfrontanim){ - backwardsanim=0; - if(visions==1)speed=40; - if(visions==0&&targetanimation==joganim)speed=2.2; - if(visions==0&&targetanimation!=joganim)speed=1.3; - if(visions==0&&targetanimation==walkanim)speed=2.5; - unsigned char theKeyMap[16]; - GetKeys( ( unsigned long * )theKeyMap ); - - if(IsKeyDown( theKeyMap, MAC_SHIFT_KEY )||visions==1){ - moveanim=joganim; - }else{ - moveanim=walkanim; - } - if(IsKeyDown( theKeyMap, MAC_CONTROL_KEY )&¤tanimation==idleanim&&targetanimation==idleanim){ - targetanimation=crouchanim; - target=0; - } - if(!IsKeyDown( theKeyMap, MAC_CONTROL_KEY )&¤tanimation==crouchanim&&targetanimation==crouchanim){ - targetanimation=idleanim; - target=0; - } - if((onground||(who==0&&visions==1))&¤tanimation!=crouchanim){ - if ( IsKeyDown( theKeyMap, forwardskey )&&!( IsKeyDown( theKeyMap, backwardskey ))){ - if(targetanimation!=moveanim)targetframe=0; - targetanimation=moveanim; - } - if ( IsKeyDown( theKeyMap, rightkey )&&!( IsKeyDown( theKeyMap, leftkey ))){ - if(targetanimation!=moveanim)targetframe=0; - targetanimation=moveanim; - playerlowrotation-=90; - if(IsKeyDown( theKeyMap, forwardskey ))playerlowrotation+=45; - if(IsKeyDown( theKeyMap, backwardskey ))playerlowrotation-=235; - } - if ( IsKeyDown( theKeyMap, leftkey )&&!( IsKeyDown( theKeyMap, rightkey ))){ - if(targetanimation!=moveanim)targetframe=0; - targetanimation=moveanim; - playerlowrotation+=90; - if(IsKeyDown( theKeyMap, forwardskey ))playerlowrotation-=45; - if(IsKeyDown( theKeyMap, backwardskey ))playerlowrotation+=235; - } - if ( IsKeyDown( theKeyMap, backwardskey )){ - if(targetanimation!=moveanim)targetframe=0; - targetanimation=moveanim; - backwardsanim=1; - } - } - //air control - if(!onground){ - float oldplayerrotation=playerrotation; - if ( IsKeyDown( theKeyMap, forwardskey )&&!( IsKeyDown( theKeyMap, backwardskey ))){ - facing=0; - facing.z=1; - facing=DoRotation(facing,0,playerrotation,0); - velocity=velocity+facing*multiplier*4; - } - if ( IsKeyDown( theKeyMap, rightkey )&&!( IsKeyDown( theKeyMap, leftkey ))){ - playerrotation-=90; - if(IsKeyDown( theKeyMap, forwardskey ))playerrotation+=45; - if(IsKeyDown( theKeyMap, backwardskey ))playerrotation-=45; - facing=0; - facing.z=1; - facing=DoRotation(facing,0,playerrotation,0); - velocity=velocity+facing*multiplier*4; - } - if ( IsKeyDown( theKeyMap, leftkey )&&!( IsKeyDown( theKeyMap, rightkey ))){ - playerrotation+=90; - if(IsKeyDown( theKeyMap, forwardskey ))playerrotation-=45; - if(IsKeyDown( theKeyMap, backwardskey ))playerrotation+=45; - facing=0; - facing.z=1; - facing=DoRotation(facing,0,playerrotation,0); - velocity=velocity+facing*multiplier*4; - } - if ( IsKeyDown( theKeyMap, backwardskey )&&!IsKeyDown( theKeyMap, forwardskey )&&!IsKeyDown( theKeyMap, leftkey )&&!IsKeyDown( theKeyMap, rightkey )){ - playerrotation+=180; - facing=0; - facing.z=1; - facing=DoRotation(facing,0,playerrotation,0); - velocity=velocity+facing*multiplier*4; - } - playerrotation=oldplayerrotation; - } - if(!IsKeyDown( theKeyMap, forwardskey )&&!IsKeyDown( theKeyMap, leftkey )&&!IsKeyDown( theKeyMap, rightkey )&&!IsKeyDown( theKeyMap, backwardskey )&&(targetanimation==joganim||targetanimation==walkanim)){ - if(!(targetanimation==walkanim&&(targetframe==0||targetframe==2))){ - targetanimation=idleanim; - targetframe=0; - target=0; - } - } - } - - - facing=0; - facing.z=1; - - facing=DoRotation(facing,0,playerlowrotation,0); - if(backwardsanim)facing*=-1; - - if(onground){ - velocity=0; - } - if(((currentanimation==joganim||currentanimation==zombiejoganim||currentanimation==diveanim)&&onground)||(who==0&&visions==1&&((currentanimation==joganim||currentanimation==walkanim||currentanimation==diveanim)||(currentanimation==zombiejoganim||currentanimation==zombiewalkanim)))){ - playercoords+=facing*multiplier*15*speed; - velocity.x=facing.x*15*speed; - velocity.z=facing.z*15*speed; - } - if((currentanimation==walkanim||currentanimation==zombiewalkanim)&&onground&&(who!=0||visions==0)){ - playercoords+=facing*multiplier*4*speed; - velocity.x=facing.x*4*speed; - velocity.z=facing.z*4*speed; - } -} - -void Person::FindRotationGun(XYZ start, XYZ target) -{ - XYZ temppoint1,temppoint2,tempforward; - float distance; - - temppoint1=start; - temppoint2=target; - distance=findDistance(temppoint1,temppoint2); - gunrotate2=asin((temppoint1.y-temppoint2.y)/distance)*rad2deg; - temppoint1.y=0; - temppoint2.y=0; - gunrotate1=acos((temppoint1.z-temppoint2.z)/findDistance(temppoint1,temppoint2))*rad2deg; - if(temppoint1.x>temppoint2.x)gunrotate1=360-gunrotate1; - tempforward=target-start; - tempforward=DoRotation(tempforward,-90,0,0); - tempforward=DoRotation(tempforward,0,gunrotate1-90,0); - tempforward=DoRotation(tempforward,0,0,gunrotate2-90); - tempforward.y=0; - Normalise(&tempforward); - gunrotate3=acos(0-tempforward.z)*rad2deg; - if(0>tempforward.x)gunrotate3=360-gunrotate3; -} - -extern Model skeletonmodels[10]; -extern Costume costume[2]; -int Person::DrawSkeleton(int who){ - GLfloat M[16]; - //Guns - if(whichgun==sniperrifle){ - FindRotationGun(skeleton.joints[skeleton.jointlabels[righthand]].position,skeleton.joints[skeleton.jointlabels[lefthand]].position); - glPushMatrix(); - glTranslatef( skeleton.joints[skeleton.jointlabels[righthand]].position.x, - skeleton.joints[skeleton.jointlabels[righthand]].position.y, - skeleton.joints[skeleton.jointlabels[righthand]].position.z); - glRotatef(-gunrotate1+90,0,1,0); - glRotatef(-gunrotate2+90,0,0,1); - glRotatef(-gunrotate3,0,1,0); - gunmodels[sniperriflemodel].draw(); - glPopMatrix(); - } - - if(whichgun==shotgun){ - FindRotationGun(skeleton.joints[skeleton.jointlabels[righthand]].position,skeleton.joints[skeleton.jointlabels[lefthand]].position); - glPushMatrix(); - glTranslatef( skeleton.joints[skeleton.jointlabels[righthand]].position.x, - skeleton.joints[skeleton.jointlabels[righthand]].position.y, - skeleton.joints[skeleton.jointlabels[righthand]].position.z); - glRotatef(2,1,0,0); - glRotatef(-gunrotate1+90+1,0,1,0); - glRotatef(-gunrotate2+90,0,0,1); - glRotatef(-gunrotate3,0,1,0); - glTranslatef(0,-.4,0); - gunmodels[shotgunmodel].draw(); - glPopMatrix(); - } - - if(whichgun==assaultrifle){ - FindRotationGun(skeleton.joints[skeleton.jointlabels[righthand]].position,skeleton.joints[skeleton.jointlabels[lefthand]].position); - glPushMatrix(); - glTranslatef( skeleton.joints[skeleton.jointlabels[righthand]].position.x, - skeleton.joints[skeleton.jointlabels[righthand]].position.y, - skeleton.joints[skeleton.jointlabels[righthand]].position.z); - glRotatef(-gunrotate1+90,0,1,0); - glRotatef(-gunrotate2+90,0,0,1); - glRotatef(-gunrotate3,0,1,0); - gunmodels[assaultriflemodel].draw(); - glPopMatrix(); - } - - if(whichgun==handgun1){ - if(!thirdperson&&who==0)FindRotationGun(skeleton.joints[skeleton.jointlabels[righthand]].position,(skeleton.joints[skeleton.jointlabels[head]].position*.65+skeleton.joints[skeleton.jointlabels[neck]].position*.35)); - if(thirdperson||who!=0)FindRotationGun(skeleton.joints[skeleton.jointlabels[righthand]].position,(skeleton.joints[skeleton.jointlabels[head]].position*.35+skeleton.joints[skeleton.jointlabels[neck]].position*.65)); - glPushMatrix(); - glTranslatef( skeleton.joints[skeleton.jointlabels[righthand]].position.x, - skeleton.joints[skeleton.jointlabels[righthand]].position.y, - skeleton.joints[skeleton.jointlabels[righthand]].position.z); - glRotatef(-gunrotate1+90-1.5,0,1,0); - glRotatef(-gunrotate2+90,0,0,1); - glRotatef(-gunrotate3,0,1,0); - glTranslatef(0,0,.15); - gunmodels[handgunbasemodel].draw(); - glTranslatef(0,-recoil*.3,0); - gunmodels[handgunslidemodel].draw(); - glPopMatrix(); - } - - if(whichgun==handgun2){ - if(!thirdperson&&who==0)FindRotationGun(skeleton.joints[skeleton.jointlabels[righthand]].position,(skeleton.joints[skeleton.jointlabels[head]].position*.65+skeleton.joints[skeleton.jointlabels[neck]].position*.35)); - if(thirdperson||who!=0)FindRotationGun(skeleton.joints[skeleton.jointlabels[righthand]].position,(skeleton.joints[skeleton.jointlabels[head]].position*.35+skeleton.joints[skeleton.jointlabels[neck]].position*.65)); - glPushMatrix(); - glTranslatef( skeleton.joints[skeleton.jointlabels[righthand]].position.x, - skeleton.joints[skeleton.jointlabels[righthand]].position.y, - skeleton.joints[skeleton.jointlabels[righthand]].position.z); - glRotatef(-gunrotate1+90-1.5,0,1,0); - glRotatef(-gunrotate2+90,0,0,1); - glRotatef(-gunrotate3,0,1,0); - glTranslatef(0,0,.15); - gunmodels[handgun2basemodel].draw(); - glTranslatef(0,-recoil*.3,0); - gunmodels[handgun2slidemodel].draw(); - glPopMatrix(); - } - - if(whichgun==grenade){ - glPushMatrix(); - glTranslatef( skeleton.joints[skeleton.jointlabels[righthand]].position.x, - skeleton.joints[skeleton.jointlabels[righthand]].position.y, - skeleton.joints[skeleton.jointlabels[righthand]].position.z); - glRotatef(-90,1,0,0); - glTranslatef(0,0,.05); - if(reloading<=0){ - gunmodels[grenadebasemodel].draw(); - if(grenphase==0)gunmodels[grenadepinmodel].draw(); - glTranslatef(0,0,.005); - gunmodels[grenadespoonmodel].draw(); - } - glPopMatrix(); - } - - if(whichgun==grenade){ - glPushMatrix(); - glTranslatef( skeleton.joints[skeleton.jointlabels[lefthand]].position.x, - skeleton.joints[skeleton.jointlabels[lefthand]].position.y, - skeleton.joints[skeleton.jointlabels[lefthand]].position.z); - glRotatef(-90,1,0,0); - glTranslatef(0,0,-.15); - if(reloading<=0){ - if(grenphase==1)gunmodels[grenadepinmodel].draw(); - } - glPopMatrix(); - } - if(!litup){ - glDisable(GL_LIGHT1); - } - if(litup){ - GLfloat LightAmbient[]= { 0,0,0, 1.0f}; - GLfloat LightDiffuse[]= { 1,1,1, 1.0f }; - XYZ lightpoint; - lightpoint=skeleton.joints[skeleton.jointlabels[lefthand]].position; - GLfloat LightPosition[]= {lightpoint.x,lightpoint.y,lightpoint.z,0}; - glLightfv(GL_LIGHT1, GL_POSITION, LightPosition); - glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); - glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); - glEnable(GL_LIGHT1); - - litup=0; - } - - //Find forward vectors - if(who==0||skeleton.free!=0||skeleton.offset!=0||whichgun!=nogun||currentanimation==lyinganim||((currentanimation==getupfrontanim||currentanimation==getupbackanim)&&targetanimation==idleanim)){ - if(!(skeleton.free==1&&longdead<=0)){ - if(skeleton.offset&&skeleton.free<1){ - XYZ normal; - skeleton.offset=0; - for(int i=0;i<skeleton.num_joints;i++){ - skeleton.joints[i].oldposition=skeleton.joints[i].position; - skeleton.joints[i].position+=skeleton.joints[i].offset; - if(findLengthfast(skeleton.joints[i].offset)<multiplier*multiplier*25)skeleton.joints[i].offset=0; - else{ - normal=skeleton.joints[i].offset; - Normalise(&normal); - skeleton.offset=1; - skeleton.joints[i].offset-=normal*multiplier*5; - } - } - skeleton.DoConstraints(); - } - CrossProduct(skeleton.joints[skeleton.forwardjoints[1]].position-skeleton.joints[skeleton.forwardjoints[0]].position,skeleton.joints[skeleton.forwardjoints[2]].position-skeleton.joints[skeleton.forwardjoints[0]].position,&skeleton.forward); - Normalise(&skeleton.forward); - - CrossProduct(skeleton.joints[skeleton.lowforwardjoints[1]].position-skeleton.joints[skeleton.lowforwardjoints[0]].position,skeleton.joints[skeleton.lowforwardjoints[2]].position-skeleton.joints[skeleton.lowforwardjoints[0]].position,&skeleton.lowforward); - Normalise(&skeleton.lowforward); - - //Special forwards - skeleton.specialforward[0]=skeleton.forward; - - skeleton.specialforward[1]=skeleton.joints[skeleton.jointlabels[rightshoulder]].position+skeleton.joints[skeleton.jointlabels[rightwrist]].position; - skeleton.specialforward[1]=skeleton.joints[skeleton.jointlabels[rightelbow]].position-skeleton.specialforward[1]/2; - skeleton.specialforward[1]+=skeleton.forward*.2; - Normalise(&skeleton.specialforward[1]); - skeleton.specialforward[2]=skeleton.joints[skeleton.jointlabels[leftshoulder]].position+skeleton.joints[skeleton.jointlabels[leftwrist]].position; - skeleton.specialforward[2]=skeleton.joints[skeleton.jointlabels[leftelbow]].position-skeleton.specialforward[2]/2; - skeleton.specialforward[2]+=skeleton.forward*.2; - Normalise(&skeleton.specialforward[2]); - - if(who==0&&aimamount>0&&health==100&&whichgun!=nogun){ - //Facing - XYZ facing; - XYZ facingdown; - //Facing - facing=0; - facing.z=1; - - facing=DoRotation(facing,camera.rotation2,0,0); - facingdown=DoRotation(facing,90,0,0); - skeleton.specialforward[1]=skeleton.specialforward[1]*(1-aimamount)+facingdown*aimamount; - skeleton.specialforward[2]=skeleton.specialforward[2]*(1-aimamount)+facingdown*aimamount; - } - - skeleton.specialforward[3]=skeleton.joints[skeleton.jointlabels[righthip]].position+skeleton.joints[skeleton.jointlabels[rightankle]].position; - skeleton.specialforward[3]=skeleton.specialforward[3]/2-skeleton.joints[skeleton.jointlabels[rightknee]].position; - skeleton.specialforward[3]+=skeleton.lowforward*.2; - Normalise(&skeleton.specialforward[3]); - skeleton.specialforward[4]=skeleton.joints[skeleton.jointlabels[lefthip]].position+skeleton.joints[skeleton.jointlabels[leftankle]].position; - skeleton.specialforward[4]=skeleton.specialforward[4]/2-skeleton.joints[skeleton.jointlabels[leftknee]].position; - skeleton.specialforward[4]+=skeleton.lowforward*.2; - Normalise(&skeleton.specialforward[4]); - - //Find joint rotations - for(int i=0;i<skeleton.num_joints;i++){ - if(skeleton.joints[i].hasparent&&skeleton.joints[i].visible) - { - skeleton.FindRotationJoint(i); - } - } - for(int i=0;i<skeleton.num_muscles;i++){ - if(skeleton.muscles[i].visible) - { - skeleton.FindRotationMuscle(i); - } - }}} - for(int i=0;i<skeleton.num_joints;i++){ - if(skeleton.joints[i].hasparent&&skeleton.joints[i].visible) - { - glPushMatrix(); - glTranslatef( (skeleton.joints[i].position.x+skeleton.joints[i].parent->position.x)/2, - (skeleton.joints[i].position.y+skeleton.joints[i].parent->position.y)/2, - (skeleton.joints[i].position.z+skeleton.joints[i].parent->position.z)/2); - glRotatef(-skeleton.joints[i].rotate1+90,0,1,0); - glRotatef(-skeleton.joints[i].rotate2+90,0,0,1); - glRotatef(-skeleton.joints[i].rotate3,0,1,0); - if(skeleton.joints[i].modelnum==0&&(who!=0||thirdperson))skeletonmodels[skeleton.joints[i].modelnum].draw(costume[whichcostume].headcolor[0],costume[whichcostume].headcolor[1],costume[whichcostume].headcolor[2]); - if(skeleton.joints[i].modelnum==0&&(who==0&&thirdperson))skeletonmodels[9].draw(); - if(skeleton.joints[i].modelnum==1&&(who!=0||thirdperson))skeletonmodels[skeleton.joints[i].modelnum].draw(costume[whichcostume].chestcolor[0],costume[whichcostume].chestcolor[1],costume[whichcostume].chestcolor[2]); - if(skeleton.joints[i].modelnum==2)skeletonmodels[skeleton.joints[i].modelnum].draw(costume[whichcostume].abdomencolor[0],costume[whichcostume].abdomencolor[1],costume[whichcostume].abdomencolor[2]); - if(skeleton.joints[i].modelnum==3)skeletonmodels[skeleton.joints[i].modelnum].draw(costume[whichcostume].upperarmcolor[0],costume[whichcostume].upperarmcolor[1],costume[whichcostume].upperarmcolor[2]); - if(skeleton.joints[i].modelnum==4)skeletonmodels[skeleton.joints[i].modelnum].draw(costume[whichcostume].lowerarmcolor[0],costume[whichcostume].lowerarmcolor[1],costume[whichcostume].lowerarmcolor[2]); - if(skeleton.joints[i].modelnum==5)skeletonmodels[skeleton.joints[i].modelnum].draw(costume[whichcostume].handcolor[0],costume[whichcostume].handcolor[1],costume[whichcostume].handcolor[2]); - if(skeleton.joints[i].modelnum==6)skeletonmodels[skeleton.joints[i].modelnum].draw(costume[whichcostume].upperlegcolor[0],costume[whichcostume].upperlegcolor[1],costume[whichcostume].upperlegcolor[2]); - if(skeleton.joints[i].modelnum==7)skeletonmodels[skeleton.joints[i].modelnum].draw(costume[whichcostume].lowerlegcolor[0],costume[whichcostume].lowerlegcolor[1],costume[whichcostume].lowerlegcolor[2]); - if(skeleton.joints[i].modelnum==8)skeletonmodels[skeleton.joints[i].modelnum].draw(costume[whichcostume].footcolor[0],costume[whichcostume].footcolor[1],costume[whichcostume].footcolor[2]); - glPopMatrix(); - } - } - - for(int i=0;i<skeleton.num_muscles;i++){ - if(skeleton.muscles[i].visible) - { - glPushMatrix(); - glTranslatef( (skeleton.muscles[i].parent1->position.x+skeleton.muscles[i].parent2->position.x)/2, - (skeleton.muscles[i].parent1->position.y+skeleton.muscles[i].parent2->position.y)/2, - (skeleton.muscles[i].parent1->position.z+skeleton.muscles[i].parent2->position.z)/2); - glRotatef(-skeleton.muscles[i].rotate1+90,0,1,0); - glRotatef(-skeleton.muscles[i].rotate2+90,0,0,1); - glRotatef(-skeleton.muscles[i].rotate3,0,1,0); - if(skeleton.muscles[i].parent1->modelnum==0&&(who!=0||thirdperson))skeletonmodels[skeleton.muscles[i].parent1->modelnum].draw(costume[whichcostume].headcolor[0],costume[whichcostume].headcolor[1],costume[whichcostume].headcolor[2]); - if(skeleton.muscles[i].parent1->modelnum==0&&(who==0&&thirdperson))skeletonmodels[9].draw(); - if(skeleton.muscles[i].parent1->modelnum==1&&(who!=0||thirdperson))skeletonmodels[skeleton.muscles[i].parent1->modelnum].draw(costume[whichcostume].chestcolor[0],costume[whichcostume].chestcolor[1],costume[whichcostume].chestcolor[2]); - if(skeleton.muscles[i].parent1->modelnum==2)skeletonmodels[skeleton.muscles[i].parent1->modelnum].draw(costume[whichcostume].abdomencolor[0],costume[whichcostume].abdomencolor[1],costume[whichcostume].abdomencolor[2]); - if(skeleton.muscles[i].parent1->modelnum==3)skeletonmodels[skeleton.muscles[i].parent1->modelnum].draw(costume[whichcostume].upperarmcolor[0],costume[whichcostume].upperarmcolor[1],costume[whichcostume].upperarmcolor[2]); - if(skeleton.muscles[i].parent1->modelnum==4)skeletonmodels[skeleton.muscles[i].parent1->modelnum].draw(costume[whichcostume].lowerarmcolor[0],costume[whichcostume].lowerarmcolor[1],costume[whichcostume].lowerarmcolor[2]); - if(skeleton.muscles[i].parent1->modelnum==5)skeletonmodels[skeleton.muscles[i].parent1->modelnum].draw(costume[whichcostume].handcolor[0],costume[whichcostume].handcolor[1],costume[whichcostume].handcolor[2]); - if(skeleton.muscles[i].parent1->modelnum==6)skeletonmodels[skeleton.muscles[i].parent1->modelnum].draw(costume[whichcostume].upperlegcolor[0],costume[whichcostume].upperlegcolor[1],costume[whichcostume].upperlegcolor[2]); - if(skeleton.muscles[i].parent1->modelnum==7)skeletonmodels[skeleton.muscles[i].parent1->modelnum].draw(costume[whichcostume].lowerlegcolor[0],costume[whichcostume].lowerlegcolor[1],costume[whichcostume].lowerlegcolor[2]); - if(skeleton.muscles[i].parent1->modelnum==8)skeletonmodels[skeleton.muscles[i].parent1->modelnum].draw(costume[whichcostume].footcolor[0],costume[whichcostume].footcolor[1],costume[whichcostume].footcolor[2]); - - glPopMatrix(); - } - } - if(whichgun==knife){ - glPushMatrix(); - glTranslatef( skeleton.joints[skeleton.jointlabels[righthand]].position.x, - skeleton.joints[skeleton.jointlabels[righthand]].position.y, - skeleton.joints[skeleton.jointlabels[righthand]].position.z); - glRotatef(-skeleton.joints[skeleton.jointlabels[righthand]].rotate1+90-1.5,0,1,0); - glRotatef(-skeleton.joints[skeleton.jointlabels[righthand]].rotate2+90,0,0,1); - glRotatef(-skeleton.joints[skeleton.jointlabels[righthand]].rotate3,0,1,0); - glTranslatef(0,-.2,0); - gunmodels[knifemodel].draw(); - glPopMatrix(); - } - if(skeleton.offset&&skeleton.free<1){ - for(int i=0;i<skeleton.num_joints;i++){ - skeleton.joints[i].position=skeleton.joints[i].oldposition; - } - } - - glDisable(GL_LIGHT1); - - return 0; -} - |
