OSDN Git Service

update travis setting
[jnethack/source.git] / src / track.c
1 /* NetHack 3.6  track.c $NHDT-Date: 1432512769 2015/05/25 00:12:49 $  $NHDT-Branch: master $:$NHDT-Revision: 1.9 $ */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */
4 /* NetHack may be freely redistributed.  See license for details. */
5 /* track.c - version 1.0.2 */
6
7 #include "hack.h"
8
9 #define UTSZ 50
10
11 STATIC_VAR NEARDATA int utcnt, utpnt;
12 STATIC_VAR NEARDATA coord utrack[UTSZ];
13
14 void
15 initrack()
16 {
17     utcnt = utpnt = 0;
18 }
19
20 /* add to track */
21 void
22 settrack()
23 {
24     if (utcnt < UTSZ)
25         utcnt++;
26     if (utpnt == UTSZ)
27         utpnt = 0;
28     utrack[utpnt].x = u.ux;
29     utrack[utpnt].y = u.uy;
30     utpnt++;
31 }
32
33 coord *
34 gettrack(x, y)
35 register int x, y;
36 {
37     register int cnt, ndist;
38     register coord *tc;
39     cnt = utcnt;
40     for (tc = &utrack[utpnt]; cnt--;) {
41         if (tc == utrack)
42             tc = &utrack[UTSZ - 1];
43         else
44             tc--;
45         ndist = distmin(x, y, tc->x, tc->y);
46
47         /* if far away, skip track entries til we're closer */
48         if (ndist > 2) {
49             ndist -= 2; /* be careful due to extra decrement at top of loop */
50             cnt -= ndist;
51             if (cnt <= 0)
52                 return (coord *) 0; /* too far away, no matches possible */
53             if (tc < &utrack[ndist])
54                 tc += (UTSZ - ndist);
55             else
56                 tc -= ndist;
57         } else if (ndist <= 1)
58             return (ndist ? tc : 0);
59     }
60     return (coord *) 0;
61 }
62
63 /*track.c*/