[Camera] Правильная установка координат

Сообщения
35
Реакции
7
Здравствуйте. Как найти точку, которая бы независимо от поворота камеры всегда находилась немного правее от игрока? Сейчас камера устанавливается "правильно" только при определенном повороте камеры. С векторами сталкиваюсь впервые.

Код:
public OnCamThink(iCameraEnt)
{
    new iIndex = get_entvar(iCameraEnt, var_owner);

    if(!is_user_alive(iIndex) || !is_entity(iCameraEnt))
        return;
        
    new Float:flPlayerOrigin[XYZ], Float:flCamOrigin[XYZ], Float:flVecPlayerAngles[XYZ], Float:flVecCamAngles[XYZ];
    
    get_entvar(iIndex, var_origin, flPlayerOrigin);
    get_entvar(iIndex, var_view_ofs, flVecPlayerAngles);
    
    flPlayerOrigin[X] += flVecPlayerAngles[X] + 25.0;
    flPlayerOrigin[Z] += flVecPlayerAngles[Z];
    
    get_entvar(iIndex, var_v_angle, flVecPlayerAngles);
    
    angle_vector(flVecPlayerAngles, ANGLEVECTOR_FORWARD, flVecCamAngles);
    
    xs_vec_sub_scaled(flPlayerOrigin, flVecCamAngles, 45.0, flCamOrigin);
    
    engfunc(EngFunc_TraceLine, flPlayerOrigin, flCamOrigin, IGNORE_MONSTERS, iIndex, 0);
    
    new Float:flFraction;
    get_tr2(0, TR_flFraction, flFraction);
    
    xs_vec_sub_scaled(flPlayerOrigin, flVecCamAngles, flFraction * 45.0, flCamOrigin);
    
    set_entvar(iCameraEnt, var_origin, flCamOrigin);
    set_entvar(iCameraEnt, var_angles, flVecPlayerAngles);
    
    set_entvar(iCameraEnt, var_nextthink, get_gametime() + 0.01);
    
    return;
}
 
Сообщения
1,499
Реакции
1,499
Помог
2 раз(а)
В одном понял,в другом не понял...
Ты там игрока сдвинул и теперь к примеру пули летят не по прицелу?

Если это так,можешь спросить Нордика - он вроде ранее говорил,что не знал как это зделать
Может уже нашёл решение
Да и я в тупике ?

Вот можешь ознакомится здесь
и здесь
 
Последнее редактирование:
Сообщения
580
Реакции
338
Предупреждения
1
Помог
9 раз(а)
Nordic Warrior, Что тут такого? Взяли твой код как шаблон, а ты сразу бездумно копируют. Может быть он хочет разобраться
 
Сообщения
3,387
Реакции
1,485
Помог
125 раз(а)
steelzzz, я вижу минимум изменений и не понимание работы с ним

Ну и разве не ты недавно про свой молотов говорил?
 
Сообщения
580
Реакции
338
Предупреждения
1
Помог
9 раз(а)
Nordic Warrior, Молотов это уже другое. Он был у нескольких людей и в разработке, так сказать в привате. Твой же плагин в общем доступе
 
Сообщения
35
Реакции
7
Nordic Warrior, код был взят как пример установки координат и углов камеры. Я не собираюсь использовать его и уж тем более выкладывать куда-то. А что по поводу "непонимания работы" - я пытаюсь разобраться с тем, чем раньше не сталкивался или теперь это преступление? Тем более, это тема по вопросам создания модификаций.
 
Сообщения
3,387
Реакции
1,485
Помог
125 раз(а)
radical1, ну я же не знаю. Вдруг ты хотел потом продавать этот плагин под видом приватного.
Были тут уже такие персонажи...

А вообще, я не против, чтобы мой код использовали, иначе бы я не выкладывал ничего.
но! не для продажи.

По теме: посмотри в сорсах модуля engine установку камеры, там есть натив set_view. И один и режимов как раз справа.

Что касается моего плагина, у меня пока не было достаточно времени на него, так что пока у меня нет новых наработок. Как сделаю - обновлю свой ресурс.
 
Сообщения
35
Реакции
7
Nordic Warrior, вчера как раз была такая мысль. В любом случае спасибо, я могу заверить, что ваш код был использован только для примера.
 
Сообщения
35
Реакции
7
Заглянул в исходники amxmod, сначала не понял - а потом вроде как понял.?
Оставлю решение, надеюсь кому-то может помочь.
P.S. Это не идеал кода, а скорее всего набросок.
Код:
public OnCamThink(iCameraEnt)
{
    new iIndex = get_entvar(iCameraEnt, var_owner);

    if(!is_user_alive(iIndex) || !is_entity(iCameraEnt))
        return;
    new Float:flPlayerOrigin[XYZ], Float:flCamOrigin[XYZ], Float:flVecPlayerAngles[XYZ], Float:flVecCamAngles[XYZ];
   
    get_entvar(iIndex, var_origin, flPlayerOrigin);
    get_entvar(iIndex, var_view_ofs, flVecPlayerAngles);
   
    flPlayerOrigin[Z] += flVecPlayerAngles[Z] + 10.0;
   
    get_entvar(iIndex, var_v_angle, flVecPlayerAngles);
   
    //
    new Float: fEnd[3], Float: fEndCamera[3];
   
    angle_vector(flVecPlayerAngles, ANGLEVECTOR_FORWARD, fEnd);
   
    xs_vec_sub_scaled(flPlayerOrigin, fEnd, 40.0, fEndCamera);
    //
   
    angle_vector(flVecPlayerAngles, ANGLEVECTOR_RIGHT, flVecCamAngles);
   
    xs_vec_sub_scaled(flPlayerOrigin, flVecCamAngles, -20.0, flCamOrigin);
   
    engfunc(EngFunc_TraceLine, flPlayerOrigin, flCamOrigin, IGNORE_MONSTERS, iIndex, 0);
   
    new Float:flFraction;
    get_tr2(0, TR_flFraction, flFraction);
   
    xs_vec_sub_scaled(fEndCamera, flVecCamAngles, flFraction * -25.0, flCamOrigin);
   
    set_entvar(iCameraEnt, var_origin, flCamOrigin);
    set_entvar(iCameraEnt, var_angles, flVecPlayerAngles);
    set_entvar(iIndex, var_angles, flVecPlayerAngles);
   
    set_entvar(iCameraEnt, var_nextthink, get_gametime() + 0.01);
   
    return;
}
 
Сообщения
1,499
Реакции
1,499
Помог
2 раз(а)
В наброске сразу вижу проблему - точнее взял его на проверку и есть нюанс со стеной.
При касании игроком стены,камера остаётся на месте,а игрок всёравно продолжает двигатся некоторое время от стены,оставив камеру за собой

Ну вдруг не знал об этом,то скажу тебе
 

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

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