czekam na jakiś komentarz.
zrobiłem małe poprawki.
problem jest jeden że desant paru osób najprawdopodobniej wywali w jedno miejsce, ale to jest kwestia modyfikacji ostatniej linijki (tej z _unit setpos[x,y]), nie chciało mi się w to wnikać.
- Kod: Zaznacz cały
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; poprawa desantu, beta 0.9999999 ;;;;
;; this addeventhandler ["getout",{_this exec "woda.sqs"}]
;;; _rmax - maksymalny promień sprawdzania,
;;; jeśli brzeg jest dalej, wypad do wody
;;; _rmin - minimalny promień
;;; _d przerwa pomiedzy sprawdzanymi okregami
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; MODYFIKOWAC ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_rmax = 30
_rmin = 5
_d = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; NIE MODYFIKOWAC ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_vcl = _this select 0
_unit = _this select 2
_a = getpos _vcl select 0
_b = getpos _vcl select 1
? !surfaceisWater [_a,_b] : exit
_n = _rmin
;(_x-_a)*(_x-_a) + (_y-_b)*(_y-_b) = _r*_r
#loop
_y = _b + _n
_delta = 4*_a*_a - 4*((_y-_b)*(_y-_b) + _a*_a - _n*_n)
_x1 = (2*_a - sqrt(_delta))/2
_x2 = (2*_a + sqrt(_delta))/2
_n=_n+_d
? !surfaceisWater [_x1,_y] : _x=_x1; goto "getout";
? !surfaceisWater [_x2,_y] : _x=_x2; goto "getout";
?_n==_rmax : _n=_rmin; goto "loop2";
goto "loop"
#loop2
_y = _b - _n
_delta = 4*_a*_a - 4*((_y-_b)*(_y-_b) + _a*_a - _n*_n)
_x1 = (2*_a - sqrt(_delta))/2
_x2 = (2*_a + sqrt(_delta))/2
_n=_n+_d
? !surfaceisWater [_x1,_y] : _x=_x1; goto "getout";
? !surfaceisWater [_x2,_y] : _x=_x2; goto "getout";
?_n==_rmax : exit
goto "loop2"
#getout
_unit setpos [_x,_y,0]
exit