- static int sign = 1;
- float X, Y, Z, tpsi, ttheta, thetal;
-
- fish->xt = 60000.0;
- fish->yt = 0.0;
- fish->zt = 0.0;
-
- X = fish->xt - fish->x;
- Y = fish->yt - fish->y;
- Z = fish->zt - fish->z;
-
- thetal = fish->theta;
-
- ttheta = RAD * atan(Z / (sqrt(X * X + Y * Y)));
-
- if (ttheta > fish->theta + 0.25) {
- fish->theta += 0.5;
- } else if (ttheta < fish->theta - 0.25) {
- fish->theta -= 0.5;
- }
- if (fish->theta > 90.0) {
- fish->theta = 90.0;
- }
- if (fish->theta < -90.0) {
- fish->theta = -90.0;
- }
- fish->dtheta = fish->theta - thetal;
-
- tpsi = RAD * atan2(Y, X);
-
- fish->attack = 0;
-
- if (fabs(tpsi - fish->psi) < 10.0) {
- fish->attack = 1;
- } else if (fabs(tpsi - fish->psi) < 45.0) {
- if (fish->psi > tpsi) {
- fish->psi -= 0.5;
- if (fish->psi < -180.0) {
- fish->psi += 360.0;
- }
- } else if (fish->psi < tpsi) {
- fish->psi += 0.5;
- if (fish->psi > 180.0) {
- fish->psi -= 360.0;
- }
- }
- } else {
- if (NRAND(100) > 98) {
- sign = 1 - sign;
- }
- fish->psi += sign;
- if (fish->psi > 180.0) {
- fish->psi -= 360.0;
- }
- if (fish->psi < -180.0) {
- fish->psi += 360.0;
- }
- }
-
- if (fish->attack) {
- if (fish->v < 1.1) {
- fish->spurt = 1;
- }
- if (fish->spurt) {
- fish->v += 0.2;
- }
- if (fish->v > 5.0) {
- fish->spurt = 0;
- }
- if ((fish->v > 1.0) && (!fish->spurt)) {
- fish->v -= 0.2;
- }
- } else {
- if (!(NRAND(400)) && (!fish->spurt)) {
- fish->spurt = 1;
- }
- if (fish->spurt) {
- fish->v += 0.05;
- }
- if (fish->v > 3.0) {
- fish->spurt = 0;
- }
- if ((fish->v > 1.0) && (!fish->spurt)) {
- fish->v -= 0.05;
- }
- }
-
- fish->x += SHARKSPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD);
- fish->y += SHARKSPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD);
- fish->z += SHARKSPEED * fish->v * sin(fish->theta / RAD);
+ static int sign = 1;
+ float X, Y, Z, tpsi, ttheta, thetal;
+
+ fish->xt = 60000.0;
+ fish->yt = 0.0;
+ fish->zt = 0.0;
+
+ X = fish->xt - fish->x;
+ Y = fish->yt - fish->y;
+ Z = fish->zt - fish->z;
+
+ thetal = fish->theta;
+
+ ttheta = RAD * atan(Z / (sqrt(X * X + Y * Y)));
+
+ if (ttheta > fish->theta + 0.25) {
+ fish->theta += 0.5;
+ } else if (ttheta < fish->theta - 0.25) {
+ fish->theta -= 0.5;
+ }
+ if (fish->theta > 90.0) {
+ fish->theta = 90.0;
+ }
+ if (fish->theta < -90.0) {
+ fish->theta = -90.0;
+ }
+ fish->dtheta = fish->theta - thetal;
+
+ tpsi = RAD * atan2(Y, X);
+
+ fish->attack = 0;
+
+ if (fabs(tpsi - fish->psi) < 10.0) {
+ fish->attack = 1;
+ } else if (fabs(tpsi - fish->psi) < 45.0) {
+ if (fish->psi > tpsi) {
+ fish->psi -= 0.5;
+ if (fish->psi < -180.0) {
+ fish->psi += 360.0;
+ }
+ } else if (fish->psi < tpsi) {
+ fish->psi += 0.5;
+ if (fish->psi > 180.0) {
+ fish->psi -= 360.0;
+ }
+ }
+ } else {
+ if (NRAND(100) > 98) {
+ sign = 1 - sign;
+ }
+ fish->psi += sign;
+ if (fish->psi > 180.0) {
+ fish->psi -= 360.0;
+ }
+ if (fish->psi < -180.0) {
+ fish->psi += 360.0;
+ }
+ }
+
+ if (fish->attack) {
+ if (fish->v < 1.1) {
+ fish->spurt = 1;
+ }
+ if (fish->spurt) {
+ fish->v += 0.2;
+ }
+ if (fish->v > 5.0) {
+ fish->spurt = 0;
+ }
+ if ((fish->v > 1.0) && (!fish->spurt)) {
+ fish->v -= 0.2;
+ }
+ } else {
+ if (!(NRAND(400)) && (!fish->spurt)) {
+ fish->spurt = 1;
+ }
+ if (fish->spurt) {
+ fish->v += 0.05;
+ }
+ if (fish->v > 3.0) {
+ fish->spurt = 0;
+ }
+ if ((fish->v > 1.0) && (!fish->spurt)) {
+ fish->v -= 0.05;
+ }
+ }
+
+ fish->x += sharkspeed * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD);
+ fish->y += sharkspeed * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD);
+ fish->z += sharkspeed * fish->v * sin(fish->theta / RAD);