Quote (СПЕКТР-1)
в декабре можно проезжать сквозь вагоны
А эта загадка посложнее будет.
Result := True;
for j := 0 to Trums[TrumIndex].Vagons - 1 do with Trums[TrumIndex].VagPos[j] do begin
for i := 0 to TrumCount - 1 do if (i <> TrumIndex) and Trums[i].Valid and Trums[i].Visible then begin
for k := 0 to Trums[i].Vagons - 1 do begin
Result := Result
and (abs(Z - Trums[i].VagPos[k].Z) > 4)
or (DistLL2(X1, Y1, X2, Y2,
Trums[i].VagPos[k].X1, Trums[i].VagPos[k].Y1, Trums[i].VagPos[k].X2, Trums[i].VagPos[k].Y2) * 4 >
Sqr(Trums[i].Model.Width + Trums[TrumIndex].Model.Width));
end;
end;
end;
Quote (Danish)
Еще цвет тормоза не работает.
В кабине в вызываемой модели? Это я сегодня исправил уже.
Добавлено (05.01.2010, 00:22)
---------------------------------------------
Мда, пригрузил я чего-то.
Значит, Result - это переменная, в которую заносится информация о том, что вагон игрока ни с кем не столкнулся.
for j := 0 to Trums[TrumIndex].Vagons - 1 do with Trums[TrumIndex].VagPos[j] do begin
for i := 0 to TrumCount - 1 do if (i <> TrumIndex) and Trums[i].Valid and Trums[i].Visible then begin
for k := 0 to Trums[i].Vagons - 1 do begin
Тут ничего интересного - просто перебор по всем вагонам поезда игрока и по всем вагонам всех других поездов.
Result := Result
and (abs(Z - Trums[i].VagPos[k].Z) > 4)
or (DistLL2(X1, Y1, X2, Y2,
Trums[i].VagPos[k].X1, Trums[i].VagPos[k].Y1, Trums[i].VagPos[k].X2, Trums[i].VagPos[k].Y2) * 4 >
Sqr(Trums[i].Model.Width + Trums[TrumIndex].Model.Width));
Прикол тут.
abs(Z - Trums[i].VagPos[k].Z) > 4
Это условие того, что трамваи едут не разной высоте. Типа один на мосту, другой - под.
DistLL2(X1, Y1, X2, Y2,
Trums[i].VagPos[k].X1, Trums[i].VagPos[k].Y1, Trums[i].VagPos[k].X2, Trums[i].VagPos[k].Y2) * 4 >
Sqr(Trums[i].Model.Width + Trums[TrumIndex].Model.Width)
А вот тут уже расчёт расстояния между вагонами как отрезками, оно не должно превышать полусуммы ширин вагонов. Вместо деления суммы на два я умножил расстояние на 2. Так как оно в квадрате, то не на 2, а на 4. Хотя логичнее правую часть умножать на 0.25.