00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _GRID_H_
00018 #define _GRID_H_
00019
00020
00021
00022
00023
00024 #define MAX_GRIDS 4 // Number of grids used by the system (must be factor of 2)
00025 #define MAX_SHIFTS 2 // Number of times the grid is "shifted" (offset) on each axis
00026
00027 #define OBJ_GRID_WIDTH 32 // X and Y width of each grid
00028 #define OBJ_GRID_SIZE (OBJ_GRID_WIDTH * OBJ_GRID_WIDTH) // Number of grid units making up entire grid
00029 #define OBJ_UNIT_SIZE (65536 / OBJ_GRID_WIDTH) // Size in world units of one side of a grid square
00030 #define OBJ_SHIFT_OFFSET (OBJ_UNIT_SIZE / MAX_SHIFTS) // Amount added to grid centre for each shift
00031
00032 #define NODE_GRID_WIDTH 32 // X and Y width of each grid
00033 #define NODE_GRID_SIZE (NODE_GRID_WIDTH * NODE_GRID_WIDTH) // Number of grid units making up entire grid
00034 #define NODE_UNIT_SIZE (65536 / NODE_GRID_WIDTH) // Size in world units of one side of a grid square
00035 #define NODE_SHIFT_OFFSET (NODE_UNIT_SIZE / MAX_SHIFTS) // Amount added to grid centre for each shift
00036
00037
00038
00039
00040
00041
00042 typedef struct _OBJGRIDUNIT
00043 {
00044 struct object_def *ObjHead;
00045 } OBJGRIDUNIT;
00046
00047
00048 typedef struct _NODEGRIDUNIT
00049 {
00050 struct _AINODE *NodeHead;
00051 } NODEGRIDUNIT;
00052
00053
00054
00055
00056
00057
00058 extern OBJGRIDUNIT *ObjGrid[MAX_GRIDS];
00059 extern NODEGRIDUNIT *NodeGrid[MAX_GRIDS];
00060
00061
00062
00063
00064
00065 extern long GRD_AllocGrids(void);
00066 extern void GRD_FreeGrids(void);
00067 extern void GRD_UpdateObjGrid(void);
00068 extern void GRD_RemoveObject(struct object_def *Obj);
00069 extern void GRD_ResetObjPairs(void);
00070 extern long GRD_ObjectPair(struct object_def *Obj1, struct object_def *Obj2);
00071 extern void GRD_GridNodes(struct _AINODE *Src, long Num);
00072
00073 #endif