Просчет времени для func_tracktrain

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
855
Реакции
532
Помог
13 раз(а)
В общем , задача такова
нужно просчитать время прохода тректрейна по path_track'ам

код следующий
PHP:
    while (!is_nullent(iTarget))
    {
        flSpeed = get_entvar(iTarget, var_speed);
        pLastPathTrack = iTarget;
        get_entvar(iTarget, var_origin, flOrigin);

        flDist = get_distance_f(flTrainOrigin, flOrigin);

        if (flDist < flNearestDist && flDist < 40.0)
        {
            pLastPos = iTarget;
            flNearestDist = flDist;
        }

        if (id) zp_debug_show_bbox(iTarget, 0.45, 14, id, 0, 200, 0);

        if (!xs_vec_equal(flOrigin, flOrigin2) && flOrigin2[0])
        {
            if (id) zp_debug_draw_line(flOrigin, flOrigin2, 0.95, 20, id, 100, 255, 150);
       
            if (pPrevPathTrack)
            {
                flTime = get_distance_f(flOrigin, flOrigin2) / flSpeed;
                flMoveTime += flTime;

                server_print("Path %d: dist: %.2f / %.2f | %.2f", iPathNum++, get_distance_f(flOrigin, flOrigin2),flSpeed, flTime);
            }
        }
        get_entvar(iTarget, var_target, szPathTrack, charsmax(szPathTrack));
        get_entvar(iTarget, var_origin, flOrigin2);

        pPrevPathTrack = iTarget;
        iTarget = SearchPathTrack(szPathTrack);
    }

    server_print("MoveTime: %.2f", flMoveTime);


1645289936274.png

проблема в расчете по формуле, общее время прохода должно быть ~37 секунд
flTime = get_distance_f(flOrigin, flOrigin2) / flSpeed;


время явно вычисляется не верно
flSpeed получаю из var_speed - скорость tracktrain'а, которая берется по текущему path_track'у

хелп
 
Последнее редактирование:

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
А попробуй так:
Код:
flTime = get_distance_f(flOrigin, flOrigin2) * 0.0254 / flSpeed;
 
Сообщения
855
Реакции
532
Помог
13 раз(а)
hajimura, шо за число такое ?
значение еще меньше стало
 
Сообщения
212
Реакции
334
Помог
3 раз(а)
Дистанция для первого пути точно 1 юнит? flOrigin2 инициализируется до начала цикла?
 
Сообщения
225
Реакции
90
Помог
1 раз(а)
BalbuR, скорости не соответствуют участкам пути.
Упыдэ. Скорость уже изменённая в момент расчёта, поэтому и поiхало всё. Уберточный виндовый каркулятор ~35.6 секунд насчитал.
 
Последнее редактирование:
Сообщения
855
Реакции
532
Помог
13 раз(а)
Xelson, да, первый pathtrack прямо под ориджином tracktrain'a

irrumabo_me_nomen, а? но ведь.. это.. линукс.. :crazy:

короче сдается мне что var_speed надо перемножать на что-то, по сурсам мало понятно как это работает
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
BalbuR, не вариант просто ловить старт движения и при остановке получать пройденное время?

Код:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

new Float: g_fTimeMove;
new HamHook: g_iFwdThinkTrackTrain;

public plugin_init()
{
    RegisterHam(Ham_Use, "func_tracktrain", "fwHam_UseTrackTrain_Post", .Post = true);
    DisableHamForward(g_iFwdThinkTrackTrain = RegisterHam(Ham_Think, "func_tracktrain", "fwHam_ThinkTrackTrain_Post", .Post = true));
}

public fwHam_UseTrackTrain_Post(ent, idcaller, idactivator, use_type, Float:value)
{
    EnableHamForward(g_iFwdThinkTrackTrain);
    g_fTimeMove = get_gametime();
    // client_print(0, print_chat, "Start Move");
}

public fwHam_ThinkTrackTrain_Post(eEnt)
{
    new Float: fVelocity[3];
    pev(eEnt, pev_velocity, fVelocity);

    if(vector_length(fVelocity) > 0)
        return;

    DisableHamForward(g_iFwdThinkTrackTrain);
    client_print(0, print_chat, "MoveTime: %.1f", get_gametime() - g_fTimeMove);
}

Ибо у самого "func_tracktrain" своя задается "startspeed" скорость, если он неуправляемый, "speed" - если управляемый, плюс каждый "path_track" свою скорость задавать может.
Инфа из VHE на скринах.
Если нужно получать точную верную скорость, то нужно получать параметры энтити через функцию get_keyvalue, параметр "startspeed"/"speed",
 

Download all Attachments

  • 503.7 KB Просмотры: 26
  • 413.5 KB Просмотры: 26
Последнее редактирование:
Сообщения
855
Реакции
532
Помог
13 раз(а)
спасибо за ответы
в общем проблема была в логике:
сначала надо было получить скорость tracktrain'а и по ней считать первый отрезок и после уже последующие считать по pathtrack'ам
Есть конечно погрешность из-за постепенного ускорения между path_track'ами, но небольшая

можно закрывать
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу