X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FSkeleton.cpp;h=5b28f738f4ac8cfcea8429e8fb0d8d5366e27271;hb=0b7253f3d99e4382008aff8b8e221e88ff40d3e9;hp=1facda9b1fcbc36cb6aaec5d35fe51743a2e4b00;hpb=38615999d550e75a973ce4d5520c9ef117d65cea;p=lugaru.git diff --git a/Source/Skeleton.cpp b/Source/Skeleton.cpp index 1facda9..5b28f73 100644 --- a/Source/Skeleton.cpp +++ b/Source/Skeleton.cpp @@ -29,11 +29,8 @@ extern float multiplier; extern float gravity; extern Skeleton testskeleton; extern Terrain terrain; -extern OPENAL_SAMPLE *samp[100]; -extern int channels[100]; extern Objects objects; extern int environment; -extern float terraindetail; extern float camerashake; extern bool freeze; extern int detail; @@ -41,8 +38,6 @@ extern XYZ envsound[30]; extern float envsoundvol[30]; extern int numenvsounds; extern float envsoundlife[30]; -extern int bonus; -extern float bonustime; extern int tutoriallevel; extern int whichjointstartarray[26]; @@ -50,13 +45,14 @@ extern int whichjointendarray[26]; extern Game * pgame; extern bool visibleloading; -extern "C" void PlaySoundEx(int channel, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused); void dealloc2(void* param){ free(param); param=0; } +enum {boneconnect, constraint, muscle}; + void Muscle::DoConstraint(bool spinny) { static XYZ vel; @@ -197,8 +193,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); @@ -252,136 +248,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; ix; - gLoc[1]=joints[i].position.y*(*scale)+coords->y; - gLoc[2]=joints[i].position.z*(*scale)+coords->z; - vel[0]=joints[i].velocity.x; - vel[1]=joints[i].velocity.y; - vel[2]=joints[i].velocity.z; if(tutoriallevel!=1||id==0){ - PlaySoundEx( landsound1, samp[landsound1], NULL, true); - OPENAL_3D_SetAttributes(channels[landsound1], gLoc, vel); - OPENAL_SetVolume(channels[landsound1], 128); - OPENAL_SetPaused(channels[landsound1], false); + emit_sound_at(landsound1, joints[i].position*(*scale)+*coords, 128.); } breaking=1; } @@ -437,19 +292,8 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) if(joints[i].label==head&&!joints[i].locked&&joints[i].delay<=0){ joints[i].locked=1; joints[i].delay=1; - static float gLoc[3]; - static float vel[3]; - gLoc[0]=joints[i].position.x*(*scale)+coords->x; - gLoc[1]=joints[i].position.y*(*scale)+coords->y; - gLoc[2]=joints[i].position.z*(*scale)+coords->z; - vel[0]=joints[i].velocity.x; - vel[1]=joints[i].velocity.y; - vel[2]=joints[i].velocity.z; if(tutoriallevel!=1||id==0){ - PlaySoundEx( landsound2, samp[landsound2], NULL, true); - OPENAL_3D_SetAttributes(channels[landsound2], gLoc, vel); - OPENAL_SetVolume(channels[landsound2], 128); - OPENAL_SetPaused(channels[landsound2], false); + emit_sound_at(landsound2, joints[i].position*(*scale)+*coords, 128.); } } @@ -471,18 +315,7 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) breaking=0; camerashake+=.6; - static float gLoc[3]; - static float vel[3]; - gLoc[0]=joints[i].position.x*(*scale)+coords->x; - gLoc[1]=joints[i].position.y*(*scale)+coords->y; - gLoc[2]=joints[i].position.z*(*scale)+coords->z; - vel[0]=joints[i].velocity.x; - vel[1]=joints[i].velocity.y; - vel[2]=joints[i].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); + emit_sound_at(breaksound2, joints[i].position*(*scale)+*coords); envsound[numenvsounds]=*coords; envsoundvol[numenvsounds]=64; @@ -539,19 +372,8 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) if(joints[i].label==groin&&!joints[i].locked&&joints[i].delay<=0){ joints[i].locked=1; joints[i].delay=1; - static float gLoc[3]; - static float vel[3]; - gLoc[0]=joints[i].position.x*(*scale)+coords->x; - gLoc[1]=joints[i].position.y*(*scale)+coords->y; - gLoc[2]=joints[i].position.z*(*scale)+coords->z; - vel[0]=joints[i].velocity.x; - vel[1]=joints[i].velocity.y; - vel[2]=joints[i].velocity.z; if(tutoriallevel!=1||id==0){ - PlaySoundEx( landsound1, samp[landsound1], NULL, true); - OPENAL_3D_SetAttributes(channels[landsound1], gLoc, vel); - OPENAL_SetVolume(channels[landsound1], 128); - OPENAL_SetPaused(channels[landsound1], false); + emit_sound_at(landsound1, joints[i].position*(*scale)+*coords, 128.); } breaking=1; } @@ -559,19 +381,8 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) if(joints[i].label==head&&!joints[i].locked&&joints[i].delay<=0){ joints[i].locked=1; joints[i].delay=1; - static float gLoc[3]; - static float vel[3]; - gLoc[0]=joints[i].position.x*(*scale)+coords->x; - gLoc[1]=joints[i].position.y*(*scale)+coords->y; - gLoc[2]=joints[i].position.z*(*scale)+coords->z; - vel[0]=joints[i].velocity.x; - vel[1]=joints[i].velocity.y; - vel[2]=joints[i].velocity.z; if(tutoriallevel!=1||id==0){ - PlaySoundEx( landsound2, samp[landsound2], NULL, true); - OPENAL_3D_SetAttributes(channels[landsound2], gLoc, vel); - OPENAL_SetVolume(channels[landsound2], 128); - OPENAL_SetPaused(channels[landsound2], false); + emit_sound_at(landsound2, joints[i].position*(*scale)+*coords, 128.); } } @@ -589,18 +400,7 @@ float Skeleton::DoConstraints(XYZ *coords,float *scale) breaking=0; camerashake+=.6; - static float gLoc[3]; - static float vel[3]; - gLoc[0]=joints[i].position.x*(*scale)+coords->x; - gLoc[1]=joints[i].position.y*(*scale)+coords->y; - gLoc[2]=joints[i].position.z*(*scale)+coords->z; - vel[0]=joints[i].velocity.x; - vel[1]=joints[i].velocity.y; - vel[2]=joints[i].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); + emit_sound_at(breaksound2, joints[i].position*(*scale)+*coords); envsound[numenvsounds]=*coords; envsoundvol[numenvsounds]=64; @@ -913,6 +713,7 @@ void Skeleton::SetJoint(float x, float y, float z, int which, int whichjoint) void Skeleton::AddMuscle(int attach1,int attach2,float minlength,float maxlength,int type) { + const int max_muscles = 100; // FIXME: Probably can be dropped if(num_muscles=0&&attach2=0&&attach1!=attach2){ muscles[num_muscles].parent1=&joints[attach1]; muscles[num_muscles].parent2=&joints[attach2]; @@ -1008,17 +809,24 @@ void Skeleton::FindRotationMuscle(int which, int animation) if(!isnormal(muscles[which].rotate3))muscles[which].rotate3=0; } -void Animation::Load(char *filename, int aheight, int aattack) +void Animation::Load(const char *filename, int aheight, int aattack) { static FILE *tfile; static int i,j; static XYZ startoffset,endoffset; static int howmany; + static const char *anim_prefix = ":Data:Animations:"; + + LOGFUNC; + int len = strlen(anim_prefix) + strlen(filename); + char *buf = new char[len + 1]; + snprintf(buf, len + 1, "%s%s", anim_prefix, filename); // Changing the filename into something the OS can understand - char *fixedFN = ConvertFileName(filename); + char *fixedFN = ConvertFileName(buf); + delete[] buf; LOG(std::string("Loading animation...") + fixedFN);