00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _AI_CAR_H_
00018 #define _AI_CAR_H_
00019
00020 #include "ainode.h"
00021
00022
00023
00024
00025
00026 #define MAX_RESET_CNT 100
00027 #define MAX_STUCK_CNT 3 // Max time allowed to be stuck (in seconds)
00028
00029 typedef enum
00030 {
00031 CAI_S_RACE = 0,
00032 CAI_S_CORRECT,
00033 CAI_S_BLOCK,
00034 CAI_S_PICKUP,
00035 CAI_S_OVERTAKE,
00036 CAI_S_REVESC,
00037 CAI_S_CARAVOID,
00038 CAI_S_OBSTAVOID,
00039 CAI_S_FLEE,
00040 CAI_S_BACKTRACK,
00041 } CAI_STATE;
00042
00043
00044 typedef enum
00045 {
00046 CAI_T_FORWARD = 0,
00047 CAI_T_BACKWARD,
00048 CAI_T_REVERSE_F,
00049 CAI_T_REVERSE_B
00050 } CAI_TMODE;
00051
00052
00053 typedef enum
00054 {
00055 CAI_SK_DEFAULT,
00056 MAX_SKILL_TYPES
00057 } CAI_SK_TYPES;
00058
00059
00060
00061
00062
00063
00064
00065 typedef struct _CAI_SKILLS
00066 {
00067 long RaceBias;
00068 long PriBias;
00069 long PickupBias;
00070 long BlockBias;
00071 long OvertakeBias;
00072 } CAI_SKILLS;
00073
00074
00075
00076 typedef struct _CAR_AI
00077 {
00078 long IsInZone;
00079 long IsOnTrack;
00080
00081 long ZoneID;
00082 long CurZone;
00083 long CurZoneBBox;
00084 long LastValidZone;
00085 struct _AINODE *CurNode;
00086 struct _AINODE *LastNode;
00087 REAL NodeDist;
00088
00089 long PriChoice;
00090 long RouteChoice;
00091
00092
00093 CAI_STATE AIState;
00094 CAI_TMODE TrackMode;
00095 CAI_SKILLS Skills;
00096
00097 REAL ResetCnt;
00098 REAL StuckCnt;
00099
00100 long WrongWay;
00101 long FinishDistNode;
00102 REAL FinishDist;
00103 REAL FinishDistPanel;
00104 } CAR_AI;
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 extern void CAI_InitCarAI(struct PlayerStruct *Player, long Skill);
00116 extern void CAI_CarHelper(struct PlayerStruct *Player);
00117 extern void CAI_ResetCar(struct PlayerStruct *Player);
00118 extern bool CAI_IsCarStuck(struct PlayerStruct *Player);
00119 extern bool CAI_IsCarInZone(struct PlayerStruct *Player);
00120 extern bool CAI_IsCarOnTrack(struct PlayerStruct *Player);
00121 extern void CAI_TriggerAiHome(struct PlayerStruct *Player, long flag, long n, VEC *vec);
00122
00123 #endif