Half-Life и Adrenaline Gamer форум
http://aghl.ru/forum/

вертикальный Angles для игрока и бота
http://aghl.ru/forum/viewtopic.php?f=20&t=1558
Страница 1 из 1

Автор:  trololost [ 04 янв 2014, 03:28 ]
Заголовок сообщения:  вертикальный Angles для игрока и бота

Привет, на двух форумах уже узнавал, но либо ничего не отвечали, либо ничего толкового.
Суть в том, что есть 2 точки: 1ая - игрок, 2ая - бот. И нужно, чтобы бот посмотрел на игрока, где бы тот не находился.
Так вот, по расчетам все верно - угол взора игрока точно высчитывается и игрок разворачивается и смотрит на бота. Однако, если мы разворачиваем бота, то вертикальный вектор fAngles[0] является неверным(смотрит вверх когда нужно вниз и наоборот).

Код:
      new fNOrigin[3], fpOrigin[3]

         get_user_origin(IdBot,fNOrigin,0)
         get_user_origin(id,fpOrigin,0)
         
         new Float:fX = float(fNOrigin[0]) - float(fpOrigin[0])
         new Float:fZ = float(fNOrigin[1]) - float(fpOrigin[1])
         new Float:fY = float(fNOrigin[2]) - float(fpOrigin[2])
         new Float: fAngles[3]
      fAngles[0]=floatatan(floatdiv(fY,floatsqroot(floatadd(floatadd(floatpower(floatsub(float(fNOrigin[0]),fpOrigin[0]),2.0),floatpower(floatsub(float(fNOrigin[1]),fpOrigin[1]),2.0)),floatpower(floatsub(float(fNOrigin[2]),fpOrigin[2]),2.0)))),degrees)   

         if(fX==0&&fZ>0) fAngles[1]=float(-90)//x==0,y<0
         else if(fX==0&&fZ<0) fAngles[1]=float(90)
         else if(fX>0&&fZ==0) fAngles[1]=float(180)
         else if(fX<0&&fZ==0) fAngles[1]=float(0)
         else if(fX==0&&fZ==0) fAngles[1]=float(0)
         else if(fX<0&&fZ!=0) fAngles[1]=floatatan(floatdiv(fZ,fX),degrees)
         else if(fX>0&&fZ!=0) fAngles[1]=floatadd(float(180),floatatan(floatdiv(fZ,fX),degrees))

         entity_set_vector(IdBot, EV_VEC_angles, fAngles)

Автор:  Lev [ 04 янв 2014, 06:23 ]
Заголовок сообщения:  Re: вертикальный Angles для игрока и бота

Угол видимо верный, если считаешь как и для игрока, а вот устанавливаешь, скорее всего, неверно.
Попробуй такой код для расчетов, вроде бы тоже самое давать должен:
Код:
new Float:vec, Float:angles;
vec = vector_distance(fNOrigin, fpOrigin);
vector_to_angle(vec, angles);
А установку попробуй так:
Код:
   set_pev(id, pev_angles, angles);
   set_pev(id, pev_v_angle, angles);
   set_pev(id, pev_fixangle, true);

Автор:  trololost [ 04 янв 2014, 06:48 ]
Заголовок сообщения:  Re: вертикальный Angles для игрока и бота

Блин, неделю мучился, как только на этот форум написал - нашел ответ )
Код:
   set_pev(IdBot,pev_v_angle,angles)
   angles[0] /= -3.0
   set_pev(IdBot,pev_angles,angles)

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/