/*
   Copyright (C) 1997-2001 Id Software, Inc.

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License
   as published by the Free Software Foundation; either version 2
   of the License, or (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

   See the GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
   --------------------------------------------------------------
   The ACE Bot is a product of Steve Yeager, and is available from
   the ACE Bot homepage, at http://www.axionfx.com/ace.

   This program is a modification of the ACE Bot, and is therefore
   in NO WAY supported by Steve Yeager.
 */


//=============================================================
//
//					NODES SHARED (game/cgame)
//
//=============================================================

#define MAX_NODES       2048        //jalToDo: needs dynamic alloc (big terrain maps)
#define NODE_DENSITY        128         // Density setting for nodes
#define INVALID         -1
#define	NODES_MAX_PLINKS    16
#define	NAV_FILE_VERSION    10
#define NAV_FILE_EXTENSION  "nav"
#define NAV_FILE_FOLDER     "navigation"

#define MASK_NODESOLID      ( CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_MONSTERCLIP )
#define MASK_AISOLID        ( CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_BODY|CONTENTS_MONSTERCLIP )

#define	AI_STEPSIZE	STEPSIZE    // 18
#define AI_JUMPABLE_HEIGHT  48 //34
#define AI_JUMPABLE_DISTANCE	360

// node flags
#define	NODEFLAGS_WATER         0x00000001
#define	NODEFLAGS_LADDER        0x00000002
#define NODEFLAGS_SERVERLINK        0x00000004  //plats, doors, teles. Only server can link 2 nodes with this flag
#define	NODEFLAGS_FLOAT         0x00000008  //don't drop node to floor ( air & water )
//#define	NODEFLAGS_ITEM			0x00000010	//jal remove me
#define	NODEFLAGS_BOTROAM       0x00000020
#define NODEFLAGS_JUMPPAD       0x00000040  // jalfixme: add NODEFLAGS_REACHATTOUCH
#define NODEFLAGS_JUMPPAD_LAND      0x00000080
#define	NODEFLAGS_PLATFORM      0x00000100
#define	NODEFLAGS_TELEPORTER_IN     0x00000200  // jalfixme: add NODEFLAGS_REACHATTOUCH
#define NODEFLAGS_TELEPORTER_OUT    0x00000400
#define NODEFLAGS_REACHATTOUCH      0x00000800
#define NODEFLAGS_CAREFUL   0x00002000
#define NODEFLAGS_WALLJUMP  0x00004000

#define NODE_ALL            0x00001000

// links types (movetypes required to run node links)
#define	LINK_MOVE	0x00000001
#define	LINK_STAIRS	0x00000002
#define LINK_FALL	0x00000004
#define	LINK_CLIMB	0x00000008
#define	LINK_TELEPORT	    0x00000010
#define	LINK_PLATFORM	    0x00000020
#define LINK_JUMPPAD	    0x00000040
#define LINK_WATER	0x00000080
#define	LINK_WATERJUMP	    0x00000100
#define	LINK_LADDER	0x00000200
#define LINK_JUMP	0x00000400
#define LINK_CROUCH	0x00000800
#define LINK_ROCKETJUMP  0x00002000
#define LINK_DOOR        0x00004000

#define LINK_INVALID	    0x00001000


typedef struct nav_plink_s
{
	int numLinks;
	int nodes[NODES_MAX_PLINKS];
	int dist[NODES_MAX_PLINKS];
	int moveType[NODES_MAX_PLINKS];

} nav_plink_t;


typedef struct nav_node_s
{
	vec3_t origin;
	int flags;
	int area;

} nav_node_t;
