Добавлен nazarpunk,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Zinc
Тип:
Наработка
Версия Warcraft:
1.26+
Rectange
Что это?
По давней традиции в играх используются прямоугольники ориентированные по осям. Это упрощает математику и не заставляет хорошо учиться в школе. Но что если вы не такой как все вам нужен прямоугольник со свободным углом вращения?
Как пользоваться?
Это структура. Поэтому достаточно её создать. Так же, можно воспользоваться особенностью структур и сразу вызывать её методы без смс и регистрации.
Rectangle r = Rectangle.new(centerX, centerY, width, height, radians).translatePolar(200, radians);
В чём соль?
Затевалась вся эта затея ради функции distanceSquaredXY которая возвращает квадрат расстояния от заданной точки до ближайшей точки прямоугольника. Что позволяет проверить наличие юнита в прямоугольнике с учётом коллизии.
Rectangle r = Rectangle.new(centerX, centerY, width, height, radians);
GroupClear(g);
GroupEnumUnitsInRange(g, r.cx, r.cy, r.diagonal * .5 + 200, null);
ForGroup(g, function(){
target = GetEnumUnit();
if (!UnitAlive(target)) return;
if (IsUnitOwnedByPlayer(target, GetOwningPlayer(caster))) return;
targetX = GetUnitX(target);
targetY = GetUnitY(target);
distance = r.distanceXY(targetX, targetY);
if (distance < 0 && !IsUnitInRangeXY(target, targetX, targetY + SquareRoot(-distance), 0)) return;
SetUnitExploded(target, true);
KillUnit(target);
});
Методы
method setData(real cx, real cy, real width, real height, real radians) -> Rectangle
method setCenter(real cx, real cy, real radians) -> Rectangle
method setSize(real width, real height, real radians) -> Rectangle
method setRadians(real radians) -> Rectangle
method translateOffset(real dx, real dy) -> Rectangle
method translatePolar(real distance, real radians) -> Rectangle
method rotate(real ox, real oy, real radians) -> Rectangle
rotate поворачивает прямоугольник на заданный угол вокруг заданной точки.
method distanceXY(real x, real y) -> real
distanceXY возвращает квадрат расстояния между точкой [x, y] и ближайшей точкой на стороне прямоугольника. Для точки лежащей вне прямоугольника возвращает отрицательное значение расстояния.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован nazarpunk
Отредактирован ScorpioT1000
Отредактирован konvan5
Отредактирован nazarpunk