Есть простейшая способность с отталкиванием, так вот, хочу, чтобы когда юнит встречается с препятсвием(постройка/другой юнит/рельефные особенности), юнит прекращался свое движение. Пробую через IsTerrainPathable, ничего не выходит
Принятый ответ
pro100master:
Надо погрешность учитывать, примерно 0.5 ед.
Надо погрешность учитывать, примерно 0.5 ед.
boolean IsTerrainPathableTrue(real x, real y){
boolean b = true
SetUnitPosition (PathableUnit,x,y)
if (RAbsBJ (GetUnitX(PathableUnit) - x)>0.5)or(RAbsBJ (GetUnitY(PathableUnit) - y)>0.5){
b = false
}
return b
}
PathableLib
//Для работы библиотеки нужно:
//1. Указать ид в переменной PathableUnitId
//2. Инициализировать библиотеку PathableIni()
library PathableLib
globals
private integer PathableUnitId = 'h000' //ид даммика
private unit PathableUnit
private real PathableX
private real PathableY
endglobals
boolean IsTerrainPathableTrue(real x,real y){
SetUnitPosition (PathableUnit,x,y)
PathableX = GetUnitX(PathableUnit) - x
PathableY = GetUnitY(PathableUnit) - y
if PathableX <= 0 {PathableX = -PathableX} //RAbsBJ
if PathableY <= 0 {PathableY = -PathableY} //RAbsBJ
return PathableX < 0.5 or PathableY < 0.5
}
define IsTerrainPathableFalse(x,y) = not(IsTerrainPathableTrue(x,y))
nothing PathableIni(){
PathableUnit = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),PathableUnitId,0,0,0)
ShowUnit (PathableUnit, false)
}
endlibrary
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
А, вспомнил, я не встречал багов, потому что использовал IsTerrainPathable() для остановки реактивного рывка, который разрушал все разрушаемые объекты на своем пути. По-этому, он просто не мог столкнутся с ними.
работает как часы со времён 2013
SetUnitPos(u, x, y)
if GetUnitPosX(u) != x or GetUnitPosY(u) != y{
непрошел из за блокатор пути и его сместил куда то.
} else {
прошел
}