X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FSkeleton.cpp;h=cb8e043e4dc57ff26edc1598bfebfb13e1f73a78;hb=8557e339c9a2d10afdf6465e02eca6b87efc961f;hp=dfc4f786fd91ad9050d9448f4a733587927b135f;hpb=82199298cd5b20ee13a9e502106721525d0974f1;p=lugaru.git diff --git a/Source/Skeleton.cpp b/Source/Skeleton.cpp index dfc4f78..cb8e043 100644 --- a/Source/Skeleton.cpp +++ b/Source/Skeleton.cpp @@ -29,10 +29,8 @@ extern float multiplier; extern float gravity; extern Skeleton testskeleton; extern Terrain terrain; -extern int channels[100]; extern Objects objects; extern int environment; -extern float terraindetail; extern float camerashake; extern bool freeze; extern int detail; @@ -45,7 +43,6 @@ extern int tutoriallevel; extern int whichjointstartarray[26]; extern int whichjointendarray[26]; -extern Game * pgame; extern bool visibleloading; void dealloc2(void* param){ @@ -53,6 +50,8 @@ void dealloc2(void* param){ param=0; } +enum {boneconnect, constraint, muscle}; + void Muscle::DoConstraint(bool spinny) { static XYZ vel; @@ -193,8 +192,8 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) if(free){ freetime+=multiplier; - whichpatchx=coords->x/(terrain.size/subdivision*terrain.scale*terraindetail); - whichpatchz=coords->z/(terrain.size/subdivision*terrain.scale*terraindetail); + whichpatchx=coords->x/(terrain.size/subdivision*terrain.scale); + whichpatchz=coords->z/(terrain.size/subdivision*terrain.scale); terrainlight=*coords; objects.SphereCheckPossible(&terrainlight, 1); @@ -248,136 +247,6 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) temp=joints[jointlabels[leftknee]].position-(joints[jointlabels[lefthip]].position+joints[jointlabels[leftankle]].position)/2; } } - /* - if(terrain.patchobjectnum[whichpatchx][whichpatchz]) - for(m=0;m=0) - if(objects.possible[k]){ - temp=joints[jointlabels[head]].position*(*scale)+*coords; - if(objects.model[k].SphereCheck(&temp, 0.06, &start, &objects.position[k], &objects.rotation[k])!=-1){ - //temp=(joints[jointlabels[head]].position*(*scale)+*coords)-start; - //Normalise(&temp); - //joints[jointlabels[head]].position=((temp*.2+start)-*coords)/(*scale); - joints[jointlabels[head]].position=(temp-*coords)/(*scale); - } - } - } */ - - - //Ears check - /*XYZ startheadpos; - startheadpos=joints[jointlabels[head]].position; - XYZ headpos; - headpos=joints[jointlabels[head]].position+(joints[jointlabels[head]].position-joints[jointlabels[neck]].position); - if(terrain.patchobjectnum[whichpatchx][whichpatchz]) - for(m=0;m=0) - if(objects.possible[k]){ - friction=objects.friction[k]; - start=joints[jointlabels[head]].position*(*scale)+*coords; - end=(headpos)*(*scale)+*coords; - whichhit=objects.model[k].LineCheckPossible(&start,&end,&temp,&objects.position[k],&objects.rotation[k]); - if(whichhit!=-1){ - if(joints[jointlabels[head]].label==groin&&!joints[jointlabels[head]].locked&&joints[jointlabels[head]].delay<=0){ - joints[jointlabels[head]].locked=1; - joints[jointlabels[head]].delay=1; - static float gLoc[3]; - static float vel[3]; - gLoc[0]=headpos.x*(*scale)+coords->x; - gLoc[1]=headpos.y*(*scale)+coords->y; - gLoc[2]=headpos.z*(*scale)+coords->z; - vel[0]=joints[jointlabels[head]].velocity.x; - vel[1]=joints[jointlabels[head]].velocity.y; - vel[2]=joints[jointlabels[head]].velocity.z; - PlaySoundEx( landsound1, samp[landsound1], NULL, true); - OPENAL_3D_SetAttributes(channels[landsound1], gLoc, vel); - OPENAL_SetVolume(channels[landsound1], 128); - OPENAL_SetPaused(channels[landsound1], false); - - breaking=1; - } - - if(joints[jointlabels[head]].label==head&&!joints[jointlabels[head]].locked&&joints[jointlabels[head]].delay<=0){ - joints[jointlabels[head]].locked=1; - joints[jointlabels[head]].delay=1; - static float gLoc[3]; - static float vel[3]; - gLoc[0]=headpos.x*(*scale)+coords->x; - gLoc[1]=headpos.y*(*scale)+coords->y; - gLoc[2]=headpos.z*(*scale)+coords->z; - vel[0]=joints[jointlabels[head]].velocity.x; - vel[1]=joints[jointlabels[head]].velocity.y; - vel[2]=joints[jointlabels[head]].velocity.z; - PlaySoundEx( landsound2, samp[landsound2], NULL, true); - OPENAL_3D_SetAttributes(channels[landsound2], gLoc, vel); - OPENAL_SetVolume(channels[landsound2], 128); - OPENAL_SetPaused(channels[landsound2], false); - } - - terrainnormal=DoRotation(objects.model[k].facenormals[whichhit],0,objects.rotation[k],0)*-1; - if(terrainnormal.y>.8)freefall=0; - bounceness=terrainnormal*findLength(&joints[jointlabels[head]].velocity)*(abs(normaldotproduct(joints[jointlabels[head]].velocity,terrainnormal))); - if(findLengthfast(&joints[jointlabels[head]].velocity)>findLengthfast(&joints[jointlabels[head]].oldvelocity)){ - bounceness=0; - joints[jointlabels[head]].velocity=joints[jointlabels[head]].oldvelocity; - } - if(findLengthfast(&bounceness)>4000&&breaking){ - objects.model[k].MakeDecal(breakdecal,DoRotation(temp-objects.position[k],0,-objects.rotation[k],0),.4,.5,Random()%360); - Sprite::MakeSprite(cloudsprite, headpos*(*scale)+*coords,joints[jointlabels[head]].velocity*.06, 1,1,1, 4, .2); - breaking=0; - camerashake+=.6; - - static float gLoc[3]; - static float vel[3]; - gLoc[0]=headpos.x*(*scale)+coords->x; - gLoc[1]=headpos.y*(*scale)+coords->y; - gLoc[2]=headpos.z*(*scale)+coords->z; - vel[0]=joints[jointlabels[head]].velocity.x; - vel[1]=joints[jointlabels[head]].velocity.y; - vel[2]=joints[jointlabels[head]].velocity.z; - PlaySoundEx( breaksound2, samp[breaksound2], NULL, true); - OPENAL_3D_SetAttributes(channels[breaksound2], gLoc, vel); - OPENAL_SetVolume(channels[breaksound2], 300); - OPENAL_SetPaused(channels[breaksound2], false); - - envsound[numenvsounds]=*coords; - envsoundvol[numenvsounds]=64; - envsoundlife[numenvsounds]=.4; - numenvsounds++; - } - if(objects.type[k]==treetrunktype){ - objects.rotx[k]+=joints[jointlabels[head]].velocity.x*multiplier*.4; - objects.roty[k]+=joints[jointlabels[head]].velocity.z*multiplier*.4; - objects.rotx[k+1]+=joints[jointlabels[head]].velocity.x*multiplier*.4; - objects.roty[k+1]+=joints[jointlabels[head]].velocity.z*multiplier*.4; - } - if(!joints[jointlabels[head]].locked)damage+=findLengthfast(&bounceness)/2500; - ReflectVector(&joints[jointlabels[head]].velocity,&terrainnormal); - frictionness=abs(normaldotproduct(joints[jointlabels[head]].velocity,terrainnormal));//findLength(&bounceness)/findLength(&joints[jointlabels[head]].velocity); - joints[jointlabels[head]].velocity-=bounceness; - if(1-friction*frictionness>0)joints[jointlabels[head]].velocity*=1-friction*frictionness; - else joints[jointlabels[head]].velocity=0; - if(findLengthfast(&bounceness)>2500){ - Normalise(&bounceness); - bounceness=bounceness*50; - } - joints[jointlabels[head]].velocity+=bounceness*elasticity; - - - if(!joints[jointlabels[head]].locked) - if(findLengthfast(&joints[jointlabels[head]].velocity)<1){ - joints[jointlabels[head]].locked=1; - //joints[jointlabels[head]].velocity*=3; - } - if(findLengthfast(&bounceness)>500)Sprite::MakeSprite(cloudsprite, headpos*(*scale)+*coords,joints[jointlabels[head]].velocity*.06, 1,1,1, .5, .2); - joints[jointlabels[head]].position=(temp-*coords)/(*scale)+(startheadpos-headpos)+terrainnormal*.005; - if(longdead>100)broken=1; - } - } - } - */ for(i=0; i8000&&breaking){ - objects.model[k].MakeDecal(breakdecal,DoRotation(temp-objects.position[k],0,-objects.rotation[k],0),.4,.5,Random()%360); + objects.model[k].MakeDecal(breakdecal,DoRotation(temp-objects.position[k],0,-objects.yaw[k],0),.4,.5,Random()%360); Sprite::MakeSprite(cloudsprite, joints[i].position*(*scale)+*coords,joints[i].velocity*.06, 1,1,1, 4, .2); //Sprite::MakeSprite(cloudsprite, joints[i].position*(*scale)+*coords,joints[i].velocity*.06, 1,1,1, 1, .2); breaking=0; @@ -497,7 +366,7 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) friction=objects.friction[k]; start=joints[i].realoldposition; end=joints[i].position*(*scale)+*coords; - whichhit=objects.model[k].LineCheckPossible(&start,&end,&temp,&objects.position[k],&objects.rotation[k]); + whichhit=objects.model[k].LineCheckPossible(&start,&end,&temp,&objects.position[k],&objects.yaw[k]); if(whichhit!=-1){ if(joints[i].label==groin&&!joints[i].locked&&joints[i].delay<=0){ joints[i].locked=1; @@ -516,7 +385,7 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) } } - 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; if(terrainnormal.y>.8)freefall=0; bounceness=terrainnormal*findLength(&joints[i].velocity)*(abs(normaldotproduct(joints[i].velocity,terrainnormal))); if(findLengthfast(&joints[i].velocity)>findLengthfast(&joints[i].oldvelocity)){ @@ -525,7 +394,7 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) } if(tutoriallevel!=1||id==0) if(findLengthfast(&bounceness)>4000&&breaking){ - objects.model[k].MakeDecal(breakdecal,DoRotation(temp-objects.position[k],0,-objects.rotation[k],0),.4,.5,Random()%360); + objects.model[k].MakeDecal(breakdecal,DoRotation(temp-objects.position[k],0,-objects.yaw[k],0),.4,.5,Random()%360); Sprite::MakeSprite(cloudsprite, joints[i].position*(*scale)+*coords,joints[i].velocity*.06, 1,1,1, 4, .2); breaking=0; camerashake+=.6; @@ -600,7 +469,7 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) //Make this less stupid start=joints[jointlabels[whichjointstartarray[i]]].position*(*scale)+*coords; end=joints[jointlabels[whichjointendarray[i]]].position*(*scale)+*coords; - whichhit=objects.model[k].LineCheckSlidePossible(&start,&end,&temp,&objects.position[k],&objects.rotation[k]); + whichhit=objects.model[k].LineCheckSlidePossible(&start,&end,&temp,&objects.position[k],&objects.yaw[k]); if(whichhit!=-1){ joints[jointlabels[whichjointendarray[i]]].position=(end-*coords)/(*scale); for(j=0; j=0&&attach2=0&&attach1!=attach2){ muscles[num_muscles].parent1=&joints[attach1]; muscles[num_muscles].parent2=&joints[attach2]; @@ -964,7 +834,7 @@ void Animation::Load(const char *filename, int aheight, int aattack) height=aheight; attack=aattack; - if(visibleloading)pgame->LoadingScreen(); + if(visibleloading) Game::LoadingScreen(); tfile=fopen( fixedFN, "rb" ); if(tfile){