//
//Początek GMCLAN'owego syfa
//
struct vec2
{
float x;
float y;
};
//Operatory wektor<->float
vec2 operator* (vec2& v1,float& v2)
{
vec2 temp;
temp.x=v1.x*v2;
temp.y=v1.y*v2;
return(temp);
};
vec2 operator/ (vec2& v1,float& v2)
{
vec2 temp;
temp.x=v1.x/v2;
temp.y=v1.y/v2;
return(temp);
};
vec2 operator+ (vec2& v1,float& v2)
{
vec2 temp;
temp.x=v1.x+v2;
temp.y=v1.y+v2;
return(temp);
};
vec2 operator- (vec2& v1,float& v2)
{
vec2 temp;
temp.x=v1.x-v2;
temp.y=v1.y-v2;
return(temp);
};
//Operatory wektor<->float
//Operatory wektor<->wektor
vec2 operator* (vec2& v1,vec2& v2)
{
vec2 temp;
temp.x=v1.x*v2.x;
temp.y=v1.y*v2.y;
return(temp);
};
vec2 operator/ (vec2& v1,vec2& v2)
{
vec2 temp;
temp.x=v1.x/v2.x;
temp.y=v1.y/v2.y;
return(temp);
};
vec2 operator+ (vec2& v1,vec2& v2)
{
vec2 temp;
temp.x=v1.x+v2.x;
temp.y=v1.y+v2.y;
return(temp);
};
vec2 operator- (vec2& v1,vec2& v2)
{
vec2 temp;
temp.x=v1.x-v2.x;
temp.y=v1.y-v2.y;
return(temp);
};
//Operatory wektor<->wektor
float dot(vec2 v1,vec2 v2)
{
return v1.x*v2.x+v1.y*v2.y;
}
vec2 reflect(vec2 I,vec2 N)
{
return I-2.0f*N*dot(N,I);
}
int point_direction(int x1, int x2, int y1, int y2)
{
return(atan2(y2-y1,x2-x1) * 180 / M_PI);
}
double degtorad( double alfa) { return alfa * M_PI / 180; }
float lengthdir_x(float len,float dir)
{
return(cos(degtorad(dir))*len);
}
float lengthdir_y(float len,float dir)
{
return(sin(degtorad(dir))*len);
}
void Odbij()
{
vec2 srodek;
srodek.x=12;
srodek.y=12;
vec2 kierunek,nowy;
kierunek.x=lengthdir_x(ball->direction,1);
kierunek.y=lengthdir_y(ball->direction,1);
nowy=reflect(srodek,kierunek);
ball->direction=point_direction(0,0,nowy.x,nowy.y);
}
//
//Koniec GMCLAN'owego syfa
//
Ten sam error!