Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 16 июн 2024, 09:44

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 04 янв 2014, 03:28 
Не в сети
Зарегистрирован:
04 янв 2014, 03:07
Последнее посещение:
05 янв 2014, 18:25
Сообщения: 2
Привет, на двух форумах уже узнавал, но либо ничего не отвечали, либо ничего толкового.
Суть в том, что есть 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)


Вернуться к началу
 Профиль 
  
СообщениеДобавлено: 04 янв 2014, 06:23 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
11 июн 2024, 20:00
Сообщения: 6871
Угол видимо верный, если считаешь как и для игрока, а вот устанавливаешь, скорее всего, неверно.
Попробуй такой код для расчетов, вроде бы тоже самое давать должен:
Код:
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);


Вернуться к началу
 Профиль 
  
СообщениеДобавлено: 04 янв 2014, 06:48 
Не в сети
Зарегистрирован:
04 янв 2014, 03:07
Последнее посещение:
05 янв 2014, 18:25
Сообщения: 2
Блин, неделю мучился, как только на этот форум написал - нашел ответ )
Код:
   set_pev(IdBot,pev_v_angle,angles)
   angles[0] /= -3.0
   set_pev(IdBot,pev_angles,angles)


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB