MCPcopy Create free account
hub / github.com/diasurgical/devilution / LineClearF

Function LineClearF

Source/monster.cpp:4748–4828  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4746}
4747
4748BOOL LineClearF(BOOL (*Clear)(int, int), int x1, int y1, int x2, int y2)
4749{
4750 int xorg, yorg;
4751 int dx, dy;
4752 int d;
4753 int xincD, yincD, dincD, dincH;
4754 int tmp;
4755
4756 xorg = x1;
4757 yorg = y1;
4758 dx = x2 - x1;
4759 dy = y2 - y1;
4760 if (abs(dx) > abs(dy)) {
4761 if (dx < 0) {
4762 tmp = x1;
4763 x1 = x2;
4764 x2 = tmp;
4765 tmp = y1;
4766 y1 = y2;
4767 y2 = tmp;
4768 dx = -dx;
4769 dy = -dy;
4770 }
4771 if (dy > 0) {
4772 d = 2 * dy - dx;
4773 dincH = 2 * (dy - dx);
4774 dincD = 2 * dy;
4775 yincD = 1;
4776 } else {
4777 d = 2 * dy + dx;
4778 dincH = 2 * (dx + dy);
4779 dincD = 2 * dy;
4780 yincD = -1;
4781 }
4782 while (x1 != x2 || y1 != y2) {
4783 if ((d <= 0) ^ (yincD < 0)) {
4784 d += dincD;
4785 } else {
4786 d += dincH;
4787 y1 += yincD;
4788 }
4789 x1++;
4790 if ((x1 != xorg || y1 != yorg) && !Clear(x1, y1))
4791 break;
4792 }
4793 } else {
4794 if (dy < 0) {
4795 tmp = y1;
4796 y1 = y2;
4797 y2 = tmp;
4798 tmp = x1;
4799 x1 = x2;
4800 x2 = tmp;
4801 dy = -dy;
4802 dx = -dx;
4803 }
4804 if (dx > 0) {
4805 d = 2 * dx - dy;

Callers 3

GroupUnityFunction · 0.85
MAI_ScavFunction · 0.85
LineClearFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected