private void PermissiveFov(int sourceX, int sourceY, permissiveMaskT mask) { fovStateT state = new fovStateT(); state.m_Source = new Point2I(sourceX, sourceY); state.m_Mask = mask; state.m_Board = mask.m_Board; // state.isBlocked = isBlocked; // state.visit = visit; // state.context = context; int quadrantCount = 4; Point2I[] quadrants = { new Point2I(1, 1), new Point2I(-1, 1), new Point2I(-1, -1), new Point2I(1, -1) }; Point2I[] extents = { new Point2I(mask.m_East, mask.m_North), new Point2I(mask.m_West, mask.m_North), new Point2I(mask.m_West, mask.m_South), new Point2I(mask.m_East, mask.m_South) }; int quadrantIndex = 0; for (; quadrantIndex < quadrantCount; ++quadrantIndex) { state.m_Quadrant = quadrants[quadrantIndex]; state.m_Extent = extents[quadrantIndex]; state.m_QuadrantIndex = quadrantIndex; CalculateFovQuadrant(state); } }
public void VisitFieldOfView(int x, int y, int distance) { permissiveMaskT mask = new permissiveMaskT(); mask.m_East = mask.m_North = mask.m_South = mask.m_West = distance; mask.m_Mask = null; mask.m_FovType = FovType.CIRCLE; mask.m_DistPlusOneSq = (distance + 1) * (distance + 1); mask.m_Board = m_Board; PermissiveFov(x, y, mask); }
private int DoesPermissiveVisit(permissiveMaskT mask, int x, int y) { if (mask.m_FovType == FovType.SQUARE) { return(1); } else if (mask.m_FovType == FovType.CIRCLE) { if (x * x + y * y < mask.m_DistPlusOneSq) { return(1); } else { return(0); } } return(1); }