#include #include #include "engine/displacement.hpp" namespace devilution { /** * CrawlTable specifies X- and Y-coordinate deltas from a missile target coordinate. * * n=4 * * y * ^ * | 1 * | 3#4 * | 2 * +-----> x * * n=16 * * y * ^ * | 314 * | B7 8C * | F # G * | D9 AE * | 526 * +-------> x */ bool DoCrawl(unsigned radius, tl::function_ref function); bool DoCrawl(unsigned minRadius, unsigned maxRadius, tl::function_ref function); template auto Crawl(unsigned radius, F function) -> std::invoke_result_t { std::invoke_result_t result; DoCrawl(radius, [&result, &function](Displacement displacement) -> bool { result = function(displacement); return !result; }); return result; } template auto Crawl(unsigned minRadius, unsigned maxRadius, F function) -> std::invoke_result_t { std::invoke_result_t result; DoCrawl(minRadius, maxRadius, [&result, &function](Displacement displacement) -> bool { result = function(displacement); return !result; }); return result; } } // namespace devilution