void DynamicBubble(triangulateio &in,triangulateio &mid,REAL *Velocity) { int a[100][50]={{0}}; for(int i=0;i<mid.numberoftriangles;i++) { AddPoint(a[mid.trianglelist[3*i]],mid.trianglelist[3*i+1]); AddPoint(a[mid.trianglelist[3*i]],mid.trianglelist[3*i+2]); AddPoint(a[mid.trianglelist[3*i+1]],mid.trianglelist[3*i]); AddPoint(a[mid.trianglelist[3*i+1]],mid.trianglelist[3*i+2]); AddPoint(a[mid.trianglelist[3*i+2]],mid.trianglelist[3*i]); AddPoint(a[mid.trianglelist[3*i+2]],mid.trianglelist[3*i+1]); } for(int i=0;i<mid.numberofpoints;i++) { int flag=-1; REAL fx=0,fy=0; REAL xi,yi,ri; xi=mid.pointlist[2*i]; yi=mid.pointlist[2*i+1]; ri=mid.pointattributelist[i]; for(int j=1;j<=a[i][0];j++) //for(int j=0;j<mid.numberofpoints;j++) { // if(j==i)continue; REAL xj,yj,rj; xj=mid.pointlist[2*a[i][j]]; yj=mid.pointlist[2*a[i][j]+1]; rj=mid.pointattributelist[a[i][j]]; REAL Lij=GetPlateauEqual(ri,rj); if(IsStable(xi,yi,ri,xj,yj,rj)) { flag=a[i][j]; Velocity[2*flag]=0; Velocity[2*flag+1]=0; } fx=fx+GetSpring(xi,xj,Lij); fy=fy+GetSpring(yi,yj,Lij); } if (flag!=-1) { fx=0; fy=0; Velocity[2*i]=0; Velocity[2*i+1]=0; } REAL accX=fx/0.1; REAL accY=fy/0.1; REAL sx=Velocity[2*i]*Pertime+(1/2.0)*accX*pow(Pertime,2.0); REAL sy=Velocity[2*i+1]*Pertime+(1/2.0)*accY*pow(Pertime,2.0); in.pointlist[2*i]=in.pointlist[2*i]+sx; in.pointlist[2*i+1]=in.pointlist[2*i+1]+sy; Velocity[2*i]=Velocity[2*i]+accX*Pertime; Velocity[2*i+1]=Velocity[2*i+1]+accY*Pertime; } }
DWORD CNetwork::GetStableTime() const { if ( ! IsStable() || ! Handshakes.m_tStableTime ) return 0; return (DWORD)time( NULL ) - Handshakes.m_tStableTime; }
/* ================ idExplodingBarrel::Collide ================ */ impactEffect_t idExplodingBarrel::Collide( const trace_t &collision, const idVec3 &velocity ) { if ( !IsStable() && (velocity.LengthFast() * UnstableLevel > 1000.0f) ) { PostEventSec( &EV_Explode, NULL, 0.04f ); } return idMoveable::Collide( collision, velocity ); }