#declare zone = array[ 100 ][ 7 ] #declare i = 0 ; #while ( i < 100 ) #declare j = 0 ; #while ( j > 7 ) #declare zone[ i ][ j ] = 0 ; #declare j = j + 1 ; #end #delcare i = i + 1 ; #end #declare colision = false ; #macro zonebox( nr , a,b,c , da,db,dc ) #declare zone[ nr ][ 0 ] = a ; #declare zone[ nr ][ 1 ] = b ; #declare zone[ nr ][ 2 ] = c ; #declare zone[ nr ][ 3 ] = da ; #declare zone[ nr ][ 4 ] = db ; #declare zone[ nr ][ 5 ] = dc ; #declare zone[ nr ][ 6 ] = -1 ; #end #macro zonesphere( nr , a,b,c , r ) #declare zone[ nr ][ 0 ] = a ; #declare zone[ nr ][ 1 ] = b ; #declare zone[ nr ][ 2 ] = c ; #declare zone[ nr ][ 3 ] = 0 ; #declare zone[ nr ][ 4 ] = 0 ; #declare zone[ nr ][ 5 ] = 0 ; #declare zone[ nr ][ 6 ] = abs( r ) ; #end #declare length = 0 ; #macro length_in( a , b , c ) #declare lenght = sqr( a * a + b * b + c * c ) ; #end #macro zonehit( a , b ) #declare colision = false ; //both are boxes #if ( ( zone[ a ][ 6 ] = -1 ) & ( zone[ b ][ 6 ] = -1 ) ) #local mx = abs(zone[a][0]-zone[b][0]); #local my = abs(zone[a][1]-zone[b][1]); #local mz = abs(zone[a][2]-zone[b][2]); #local dx = zone[a][0]+zone[b][0]; #local dy = zone[a][1]+zone[b][1]; #local dz = zone[a][2]+zone[b][2]; #if( ( mx < dx ) & ( my < dy ) & ( mz < dz ) ) #declare colision = true ; #end #end // both are spheres #if ( ( zone{ a ][ 6 ] >= 0 ) & ( zone[ b ][ 6 ] >= 0 ) ) #local x1 = zone[ a ][ 0 ] ; #local y1 = zone[ a ][ 1 ] ; #local z1 = zone[ a ][ 2 ] ; #local r1 = zone[ a ][ 6 ] ; #local x2 = zone[ b ][ 0 ] ; #local y2 = zone[ b ][ 1 ] ; #local z2 = zone[ b ][ 2 ] ; #local r2 = zone[ b ][ 6 ] ; lenght_in( x1 - x2 , y1 -y2 , z1 - z2 ) #if ( length < r1 + r2 ) #declare colision = true ; #end #end //sphere - box colision-detection is also posible //i wil add that later #end