Честно сказать, не смог понять алгоритма, посему набросал простой пример, как проверять пересечение контролов стандартными средствами.
function TForm1.OpponentVSHero: TAttacMode;
var
RcOpponent, RcHero : TRectF;
Pt : TPointF;
begin
Result := TAttacMode.None;
// Получим абсолютные размеры оппонента
RcOpponent := Opponent.AbsoluteRect;
// Получим абсолютные размеры героя
RcHero := Hero.AbsoluteRect;
// Получим центр героя
Pt.X := Hero.Width / 2;
Pt.Y := Hero.Height / 2;
// Переведем его в абсолютные координаты
PT := Hero.LocalToAbsolute(PT);
// Проверим, не пересекаются ли габариты героя и оппонента
if RcOpponent.IntersectsWith(RcHero) then begin
Result := TAttacMode.Next;
end;
// Проверим, попадает ли центр героя в область оппонента
if RcOpponent.Contains(Pt) then Result := TAttacMode.Attacked;
end;
Hero.zip