Kto grał w H-L pewnie pamięta, że któregoś tam wielkiego mecha rozwalało się wychodząc na taki silos, a z niego nawigowało się dwoma wajchami czymś niby radarem - jedna odpowiadala za oś pionowa, druga za pozioma, a w punkcie przeciecia spuszczała się bomba
Postanowiłem podobny mechanizm zaimplementować w jednej z misji, ale jest pewien problem, otóż o ile w większości położeń działa to dobrze:
to gdy jeden z pojazdów - wyznaczników ma dir = 0 lub 3(czyli lezy na osi y = ax+b);
to wybuchy są dziwnie przesunięte, albo w lewo, albo prawo, na osi X:
Tak wyglada zwrot koordynantów:
Code: Select all
export function TryGetXY;
var a1, a2, b1, b2, x, y;
begin
Case (GetDir(przek1)) of
0:begin
a1 = -1;
b1 = GetY(przek1) - (a1 * GetX(przek1));
end;
1:begin
a1 = 0;
b1 = GetY(przek1);
end;
2:begin
a1 = 1;
b1 = GetY(przek1) - (a1 * GetX(przek1));
end;
3:begin
a1 = -1;
b1 = GetY(przek1) - (a1 * GetX(przek1));
end;
4:begin
a1 = 0;
b1 = GetY(przek1);
end;
5:begin
a1 = 1;
b1 = GetY(przek1) - (a1 * GetX(przek1));
end;
end;
Case (GetDir(przek2)) of
0:begin
a2 = -1;
b2 = GetY(przek2) - (a2 * GetX(przek2));
end;
1:begin
a2 = 0;
b2 = GetY(przek2);
end;
2:begin
a2 = 1;
b2 = GetY(przek2) - (a2 * GetX(przek2));
end;
3:begin
a2 = -1;
b2 = GetY(przek2) - (a2* GetX(przek2));
end;
4:begin
a2 = 0;
b2 = GetY(przek2);
end;
5:begin
a2 = 1;
b2 = GetY(przek2) - (a2*GetX(przek2));
end;
end;
if not (a1 = a2) then //and IsInUnit(przek1) and IsInUnit(przek2) then
begin
x = (b2 - b1)/(a1 - a2);
//if (GetDir(przek1) = 0 or GetDir(przek2) = 0) and
y = (a1 * x) + b1;
if x > 1 and y > 1 then
Result := [x, y] else
Result := [0, 0];
end else
Result := [0, 0];
end;