SLVMAZE.H

#ifndef __SLVMAZE_H__ 
#define __SLVMAZE_H__

#define ANI_STATE_NONE 0
#define ANI_STATE_TURN_TO 1
#define ANI_STATE_TURN_AWAY 2
#define ANI_STATE_FORWARD 3
#define ANI_STATE_REVERSE 4

#define SOL_DIR_LEFT 0
#define SOL_DIR_UP 1
#define SOL_DIR_RIGHT 2
#define SOL_DIR_DOWN 3
#define SOL_DIRS 4

#define SOL_TURN_LEFT 0
#define SOL_TURN_RIGHT 1

typedef struct _MazeGoal
{
int clx, cly;
void *user;
} MazeGoal;

typedef struct _MazeSolution
{
int clx, cly;
int dir;
Cell *maze;
int w, h;
MazeGoal *goals;
int ngoals;
int ani_state;
int ani_count;
int *turn_to;
int *turn_away;
int dir_sign;
} MazeSolution;

void SolveMazeStart(MazeView *vw,
Cell *maze, int w, int h,
IntPt2 *start, int start_dir,
MazeGoal *goals, int ngoals,
int turn_to,
MazeSolution *sol);
void SolveMazeSetGoals(MazeSolution *sol, MazeGoal *goals, int ngoals);
MazeGoal *SolveMazeStep(MazeView *vw, MazeSolution *sol);

#endif