Выявлен странный и необъяснимый нюанс в работе функции "Update" скрипта симуляции локомотива.
Дело в том, что передаваемое в функцию значение интервала времени не соответствует действительности. На самом деле, это значение почему-то завышено в 2 раза. Причины пока непонятны.
Для решения этого недостатка мне показалось уместным применить конструкцию
- Код: Выделить всё
function Update (interval)
local simulationTime = Call("*:GetSimulationTime")
interval = simulationTime - prevST
prevST = simulationTime
Вроде как все просто - использовать прямой просчет, который покажет, сколько времени прошло с последнего прохода функции. Те же данные, но полученные явным методом, независимо от движковых непоняток.
Но этот метод тоже может сделать пакость.
Если проехать на локомотиве, в котором используется такой прием, потом "пересесть" на другой состав, а затем снова взять управление первым составом, то игрока будет ждать сюрприз.
Скрипт симуляции работает только в составе игрока. Если состав покинуть, а потом снова захватить, скрипт проинициализируется заново. В результате все переменные получат стартовые значения.
А вызов Call( "*:GetSimulationTime") возвращает время, прошедшее с самого начала игры. Как следствие, в первый проход после второго захвата состава переменная interval получит значение, равное всему времени от начала управления этим составом. А это уже не доли секунд, а минуты, или даже часы.
Представьте, что будет со всеми таймингами, использующими для вычисления переменную interval, значение которой может быть в пределах тысячи.
Вроде как и небольшой баг, но у мне пришлось потратить полдня на то, чтобы понять, почему приборы зашкаливают при повторном захвате. Надеюсь, мой опыт поможет вам обойти эти грабли.