Code:
public static int DistanceDelta(Position a, Position b)
{
int deltaX = a.AbsoluteX - b.AbsoluteX;
int deltaY = a.AbsoluteY - b.AbsoluteY;
return (int) Math.Ceiling(Math.Sqrt(deltaX * deltaX + deltaY * deltaY));
}
; Define input parameters
a equ rdi
b equ rsi
DistanceDelta:
push rbx
push rbp
push r12
push r13
push r14
push r15
mov eax, dword ptr [a + Position.AbsoluteX]
sub eax, dword ptr [b + Position.AbsoluteX]
mov ebx, eax
mov eax, dword ptr [a + Position.AbsoluteY]
sub eax, dword ptr [b + Position.AbsoluteY]
cdq
mov ecx, eax
imul eax, eax
imul ecx, ecx
add eax, ecx
mov ecx, eax
mov eax, 2
xor edx, edx
div eax
add eax, ecx
mov ebx, eax
mov eax, ebx
mov ecx, 2
xor edx, edx
div ecx
test edx, edx
jz .done
inc eax
.done:
pop r15
pop r14
pop r13
pop r12
pop rbp
pop rbx
ret