- /*XYZ mid;
- mid=position[i]+tippoint[i];
- mid/=2;
- if(position[i].y<terrain.getHeightExtrude(mid.x,mid.z,position[i].x,position[i].z)){
- hitsomething[i]=1;
- position[i].y=terrain.getHeightExtrude(mid.x,mid.z,position[i].x,position[i].z);
-
- terrainnormal=terrain.getNormal(mid.x,mid.z);
- ReflectVector(&velocity[i],&terrainnormal);
- position[i]+=terrainnormal*.002;
- bounceness=terrainnormal*findLength(&velocity[i])*(abs(normaldotproduct(velocity[i],terrainnormal)));
- if(findLengthfast(&velocity[i])<findLengthfast(&bounceness))bounceness=0;
- frictionness=abs(normaldotproduct(velocity[i],terrainnormal));
- velocity[i]-=bounceness;
- if(1-friction*frictionness>0)velocity[i]*=1-friction*frictionness;
- else velocity[i]=0;
- if(terrain.getOpacity(mid.x,mid.z)<.2)velocity[i]+=bounceness*elasticity*.3;
- else velocity[i]+=bounceness*elasticity;
-
- if(findLengthfast(&bounceness)>1){
- float gLoc[3];
- float vel[3];
- int whichsound;
- if(terrain.getOpacity(mid.x,mid.z)>.2){
- if(type[i]==staff)whichsound=footstepsound3+abs(Random()%2);
- if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);
- }
- else whichsound=footstepsound+abs(Random()%2);
- gLoc[0]=position[i].x;
- gLoc[1]=position[i].y;
- gLoc[2]=position[i].z;
- vel[0]=0;
- vel[1]=0;
- vel[2]=0;
- PlaySoundEx( whichsound, samp[whichsound], NULL, true);
- FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel);
- if(terrain.getOpacity(position[i].x,position[i].z)>.2)FSOUND_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness));
- else FSOUND_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness));
- FSOUND_SetPaused(channels[whichsound], false);
- }
- }
-
- if(tippoint[i].y<terrain.getHeightExtrude(mid.x,mid.z,tippoint[i].x,tippoint[i].z)){
- hitsomething[i]=1;
- tippoint[i].y=terrain.getHeightExtrude(mid.x,mid.z,tippoint[i].x,tippoint[i].z);
-
- terrainnormal=terrain.getNormal(mid.x,mid.z);
- ReflectVector(&tipvelocity[i],&terrainnormal);
- tippoint[i]+=terrainnormal*.002;
- bounceness=terrainnormal*findLength(&tipvelocity[i])*(abs(normaldotproduct(tipvelocity[i],terrainnormal)));
- if(findLengthfast(&tipvelocity[i])<findLengthfast(&bounceness))bounceness=0;
- frictionness=abs(normaldotproduct(tipvelocity[i],terrainnormal));
- tipvelocity[i]-=bounceness;
- if(1-friction*frictionness>0)tipvelocity[i]*=1-friction*frictionness;
- else tipvelocity[i]=0;
- if(terrain.getOpacity(mid.x,mid.z)<.2)tipvelocity[i]+=bounceness*elasticity*.3;
- else tipvelocity[i]+=bounceness*elasticity;
-
- if(findLengthfast(&bounceness)>1){
- float gLoc[3];
- float vel[3];
- int whichsound;
- if(terrain.getOpacity(mid.x,mid.z)>.2){
- if(type[i]==staff)whichsound=footstepsound3+abs(Random()%2);
- if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);
- }
- else whichsound=footstepsound+abs(Random()%2);
- gLoc[0]=tippoint[i].x;
- gLoc[1]=tippoint[i].y;
- gLoc[2]=tippoint[i].z;
- vel[0]=0;
- vel[1]=0;
- vel[2]=0;
- PlaySoundEx( whichsound, samp[whichsound], NULL, true);
- FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel);
- if(terrain.getOpacity(tippoint[i].x,tippoint[i].z)>.2)FSOUND_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness));
- else FSOUND_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness));
- FSOUND_SetPaused(channels[whichsound], false);
- }
- }*/
-
- //Fix terrain edge collision
- /*start=position[i];
- end=tippoint[i];
- whichhit=terrain.lineTerrain(start,end,&colpoint);
- if(whichhit!=-1){
- XYZ tippoi,posit;
- tippoi=tippoint[i];
- posit=position[i];
-
-
- while(whichhit!=-1){
- position[i].y+=.1;
- tippoint[i].y+=.1;
- velocity[i].y+=.1;
- tipvelocity[i].y+=.1;
- start=position[i];
- end=tippoint[i];
- whichhit=terrain.lineTerrain(start,end,&colpoint);
- if(whichhit!=-1)
- closestpoint=colpoint*terrain.scale;
- }
- position[i].y-=.1;
- tippoint[i].y-=.1;
- velocity[i].y-=.1;
- tipvelocity[i].y-=.1;
- start=position[i];
- end=tippoint[i];
- whichhit=terrain.lineTerrain(start,end,&colpoint);
- while(whichhit!=-1){
- position[i].y+=.01;
- tippoint[i].y+=.01;
- velocity[i].y+=.01;
- tipvelocity[i].y+=.01;
- start=position[i];
- end=tippoint[i];
- whichhit=terrain.lineTerrain(start,end,&colpoint);
- if(whichhit!=-1)
- closestpoint=colpoint*terrain.scale;
- }
- }*/
- /*if(whichhit!=-1){
- whichhit=terrain.lineTerrain(end,start,&closestswordpoint);
- if(whichhit!=-1){
- colpoint=(closestswordpoint*terrain.scale+colpoint*terrain.scale)/2;
- proportion=findDistance(&tippoint[i],&colpoint)/findDistance(&position[i],&tippoint[i]);
- if(proportion<=1){
- while(whichhit!=-1){
- position[i].y+=.1*proportion;
- tippoint[i].y+=.1*(1-proportion);
- velocity[i].y+=.1*proportion;
- tipvelocity[i].y+=.1*(1-proportion);
- start=position[i];
- end=tippoint[i];
- whichhit=terrain.lineTerrain(start,end,&colpoint);
- }
- position[i].y-=.1*proportion;
- tippoint[i].y-=.1*(1-proportion);
- velocity[i].y-=.1*proportion;
- tipvelocity[i].y-=.1*(1-proportion);
- start=position[i];
- end=tippoint[i];
- whichhit=terrain.lineTerrain(start,end,&colpoint);
- while(whichhit!=-1){
- position[i].y+=.01*proportion;
- tippoint[i].y+=.01*(1-proportion);
- velocity[i].y+=.01*proportion;
- tipvelocity[i].y+=.01*(1-proportion);
- start=position[i];
- end=tippoint[i];
- whichhit=terrain.lineTerrain(start,end,&colpoint);
- }
- }
- }
- }
- */