00001
00002 #ifndef AINODE_H
00003 #define AINODE_H
00004
00005 #include "grid.h"
00006
00007
00008
00009
00010
00011 #define MAX_AINODES 1024
00012 #define MAX_AINODE_LINKS 2
00013 #define MAX_AINODE_SPEED 100
00014 #define MAX_AINODE_PRIORITY 1
00015
00016
00017
00018
00019
00020
00021 typedef struct {
00022 long Speed;
00023 VEC Pos;
00024 } ONE_AINODE;
00025
00026
00027 typedef struct _AINODE {
00028 char Priority, StartNode, pad[2];
00029 REAL RacingLine, FinishDist;
00030 long RacingLineSpeed, CentreSpeed;
00031 struct _AINODE *Prev[MAX_AINODE_LINKS];
00032 struct _AINODE *Next[MAX_AINODE_LINKS];
00033 ONE_AINODE Node[2];
00034
00035 long ZoneID;
00036 VEC Centre, RVec;
00037
00038 struct _AINODE *ZonePrev;
00039 struct _AINODE *ZoneNext;
00040 } AINODE;
00041
00042 typedef struct {
00043 long Count;
00044 AINODE *FirstNode;
00045 } AINODE_ZONE;
00046
00047
00048
00049
00050
00051 extern AINODE *AiNode;
00052 extern AINODE_ZONE *AiNodeZone;
00053 extern long AiNodeNum;
00054 extern long AiStartNode;
00055 extern REAL AiNodeTotalDist;
00056
00057
00058
00059
00060
00061 #ifdef _PC
00062 extern void LoadAiNodes(char *file);
00063 #endif
00064 #ifdef _N64
00065 extern void LoadAiNodes(void);
00066 #endif
00067 extern void FreeAiNodes(void);
00068 extern void ZoneAiNodes(void);
00069 extern AINODE *AIN_NearestNode(struct PlayerStruct *Player, REAL *Dist);
00070 extern AINODE *AIN_GetForwardNode(struct PlayerStruct *Player, REAL MinDist, REAL *Dist);
00071
00072 #endif