}
void permissiveConeFov(int sourceX, int sourceY, permissiveMaskT mask,
int startAngle, int finishAngle)
{
coneFovState state = new coneFovState();
state.source = new Point2I(sourceX, sourceY);
state.mask = mask;
state.board = mask.board;
// state.isBlocked = isBlocked;
// state.visit = visit;
// state.context = context;
//visit origin once
state.board.visit(sourceX, sourceY);
final int quadrantCount = 4;
final Point2I quadrants[] = { new Point2I(1, 1), new Point2I(-1, 1),
new Point2I(-1, -1), new Point2I(1, -1) };
Point2I extents[] = { new Point2I(mask.east, mask.north),
new Point2I(mask.west, mask.north),
new Point2I(mask.west, mask.south),
new Point2I(mask.east, mask.south) };
int[] angles=new int[12];
angles[0]=0; angles[1]=90; angles[2]=180; angles[3]=270;
for(int i=4; i<12; i++) angles[i]=720;//to keep them at the end
int i=0;