Создание обьекта вплотную к игроку

Сообщения
90
Реакции
126
Помог
3 раз(а)
Необходимо создать обьект вплотную к игроку, сделал так:
Код:
#define ENTITY_PLACE_DISTANCE ((M_SQRT2 * PLAYER_WIDTH) / 2 + ENTITY_WIDTH / 2)

const Float:M_SQRT2 = 1.41421356237309504880
const Float:PLAYER_WIDTH = 32.0
const Float:ENTITY_WIDTH = 32.0
и в функции создания обьекта:
Код:
    new Float:player_origin[3], Float:entity_origin[3], Float:angle[3]
    pev(player, pev_origin, player_origin)
    pev(player, pev_angles, angle)
    xs_vec_copy(player_origin, entity_origin)
    entity_origin[0] += floatcos(angle[1], degrees) * ENTITY_PLACE_DISTANCE
    entity_origin[1] += floatsin(angle[1], degrees) * ENTITY_PLACE_DISTANCE
    entity_origin[2] = player_origin[2]
    new base = cs_create_entity("func_breakable")
    ...
    new Float:mins[3], Float:maxs[3]
    mins[0] = -ENTITY_WIDTH
    mins[1] = -ENTITY_WIDTH
    mins[2] = 0.0
    maxs[0] = ENTITY_WIDTH
    maxs[1] = ENTITY_WIDTH
    maxs[2] = ENTITY_WIDTH
    fm_entity_set_size(base, mins, maxs)
    fm_entity_set_origin(base, entity_origin)
    set_pev(base, pev_angles, angle)
    set_pev(base, pev_solid, SOLID_BBOX)
    set_pev(base, pev_movetype, MOVETYPE_TOSS)
Но он все равно застрявал в игроке при повороте игрка на определенный угол, я в конец макроса ENTITY_PLACE_DISTANCE добавил +1, потом +2, но проблема решилась только при +7, я где-то ошибся в расчетах или в чем причина?
4 Янв 2018
Тут при установке хуллов ошибка, но в плагине у меня нормально:
Код:
    mins[0] = -(SENTRY_WIDTH / 2)
    mins[1] = -(SENTRY_WIDTH / 2)
    mins[2] = 0.0
    maxs[0] = SENTRY_WIDTH / 2
    maxs[1] = SENTRY_WIDTH / 2
    maxs[2] = SENTRY_WIDTH / 2
 

Garey

ninjaCow
Сообщения
441
Реакции
1,095
Помог
11 раз(а)
попробуй вместо этого кода:
C:
pev(player, pev_origin, player_origin)
pev(player, pev_angles, angle)
xs_vec_copy(player_origin, entity_origin)
entity_origin[0] += floatcos(angle[1], degrees) * ENTITY_PLACE_DISTANCE
entity_origin[1] += floatsin(angle[1], degrees) * ENTITY_PLACE_DISTANCE
entity_origin[2] = player_origin[2]
>>
C:
#define VectorMA(%0,%1,%2,%3) ( %3[ x ] = %0[ x ] + %1 * %2[ x ], %3[ y ] = %0[ y ] + %1 * %2[ y ], %3[ z ] = %0[ z ] + %1 * %2[ z ] )
const Float:LENGTH = 150.0; // Тут сколько надо дистанцию

new Float:origin    [ 3 ];
new Float:dirForward[ 3 ];
new Float:viewAngles[ 3 ];

pev( player, pev_origin, origin );
pev( player, pev_v_angle, viewAngles );

engfunc( EngFunc_MakeVectors, viewAngles );
global_get( glb_v_forward, dirForward );

VectorMA( origin, LENGTH, dirForward, origin );
// теперь в origin точка от LENGTH-юнит перед игроком
 
Сообщения
90
Реакции
126
Помог
3 раз(а)
Garey, идентичный результат
5 Янв 2018
Меня больше беспокоит расчет самого растояния между игроком и точкой создания обьекта ((M_SQRT2 * PLAYER_WIDTH) / 2 + ENTITY_WIDTH / 2)
По моему все правильно, углы хулов игрока я учел в формуле(а углы обьекта учитывать не нужно т.к. я выставляю ему такой же angles как и у игрока), но вот как раз в углах обьект и застряет, при повороте игрока на 0 градусов относительно нормали плоскости хулла игрока все норм, а вот при повороте на 45 градусов застряет(если не добавлять 7 юнитов), может это особенности движка какие, непонимаю
 

Garey

ninjaCow
Сообщения
441
Реакции
1,095
Помог
11 раз(а)
попробуйте так:
Код:
#define ENTITY_PLACE_DISTANCE ((M_SQRT2 * PLAYER_WIDTH) + (M_SQRT2 *ENTITY_WIDTH)) / 2)
unnamed.png
6 Янв 2018
углы не ставятся у энитити как и у игрока там тупо 2 "коробки"
 
Сообщения
90
Реакции
126
Помог
3 раз(а)
Garey, Так работает идеально
Выходит когда я верчу энтитю, то ее хул не вертится с ней?
 

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

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