#ifndef __MOVEHPP__
#define __MOVEHPP__

#include <stack>
#include <queue>


#include "movezone.hpp"
#include "movecell.hpp"

struct PATHELEMENT
{
	PATHZONEELEMENT cell;
	CCellPath *cellpath;

	PATHELEMENT (const PATHZONEELEMENT& ncell,CCellPath *npath) {cell = ncell;cellpath = npath;}
//	~PATHELEMENT (void)
//	{ delete cellpath; cellpath = NULL; }
};


void DoPathTick (void);

bool CalcPath (std::stack<PATHELEMENT> *dest,CPoint start,CPoint end,int depth,bool followshort);
void InitMoveData (void);

struct PATHQUEUEELEMENT
{
	int sx,sy;
	int dx,dy;
	CPerson *who;
	bool cell;

	PATHQUEUEELEMENT (void)
	{
		sx = sy = dx = dy = -1;
		cell = false;
		who = NULL;
	}
	PATHQUEUEELEMENT (int p1,int p2,int p3,int p4,CPerson *p5,bool p6)
	{
		sx = p1;
		sy = p2;
		dx = p3;
		dy = p4;
		who = p5;
		cell = p6;
	}
	~PATHQUEUEELEMENT (void)
	{
		sx = sy = dx = dy = -1;
		who = NULL;
	}
	void operator= (PATHQUEUEELEMENT& rhs)
	{
		sx = rhs.sx;
		sy = rhs.sy;
		dx = rhs.dx;
		dy = rhs.dy;
		who = rhs.who;
		cell = rhs.cell;
	}
};

extern std::queue<PATHQUEUEELEMENT> g_PathQueue;


#endif

