move entry/exit debugging to 21.1
[unix-history] / usr / src / games / trek / compkl.c
CommitLineData
b6f0a7e4 1/*
82daddb0
KB
2 * Copyright (c) 1980, 1993
3 * The Regents of the University of California. All rights reserved.
e9fb6bea 4 *
b2e7427f 5 * %sccs.include.redist.c%
b6f0a7e4
DF
6 */
7
f67257fc 8#ifndef lint
82daddb0 9static char sccsid[] = "@(#)compkl.c 8.1 (Berkeley) %G%";
e9fb6bea 10#endif /* not lint */
f67257fc
KM
11
12# include "trek.h"
13
14/*
15** compute klingon distances
16**
17** The klingon list has the distances for all klingons recomputed
18** and sorted. The parameter is a Boolean flag which is set if
19** we have just entered a new quadrant.
20**
21** This routine is used every time the Enterprise or the Klingons
22** move.
23*/
24
25compkldist(f)
26int f; /* set if new quadrant */
27{
28 register int i, dx, dy;
29 double d;
30 double temp;
31
32 if (Etc.nkling == 0)
33 return;
34 for (i = 0; i < Etc.nkling; i++)
35 {
36 /* compute distance to the Klingon */
37 dx = Ship.sectx - Etc.klingon[i].x;
38 dy = Ship.secty - Etc.klingon[i].y;
39 d = dx * dx + dy * dy;
40 d = sqrt(d);
41
42 /* compute average of new and old distances to Klingon */
43 if (!f)
44 {
45 temp = Etc.klingon[i].dist;
46 Etc.klingon[i].avgdist = 0.5 * (temp + d);
47 }
48 else
49 {
50 /* new quadrant: average is current */
51 Etc.klingon[i].avgdist = d;
52 }
53 Etc.klingon[i].dist = d;
54 }
55
56 /* leave them sorted */
57 sortkl();
58}
59
60
61/*
62** sort klingons
63**
64** bubble sort on ascending distance
65*/
66
67sortkl()
68{
69 struct kling t;
70 register int f, i, m;
71
72 m = Etc.nkling - 1;
73 f = 1;
74 while (f)
75 {
76 f = 0;
77 for (i = 0; i < m; i++)
78 if (Etc.klingon[i].dist > Etc.klingon[i+1].dist)
79 {
80 bmove(&Etc.klingon[i], &t, sizeof t);
81 bmove(&Etc.klingon[i+1], &Etc.klingon[i], sizeof t);
82 bmove(&t, &Etc.klingon[i+1], sizeof t);
83 f = 1;
84 }
85 }
f67257fc 86}