Jump to content
Korean Random
Sign in to follow this  
poget

Определение расстояния в Python

Recommended Posts

Приветствую!

Помогите, пожалуйста, разобраться в вопросе.

Я пытаюсь определить дальность от игрока до точки наведения центрального маркера.

Точку наведения получаю через

player().inputHandler.getDesiredShotPoint()

В принципе это работает, но появляется проблема при просмотре реплея. Если активирована свободная камера - то все ок, но если активирована сохраненная камера, то точка не привязывается к центральному маркеру, а "гуляет" при движении мышкой.

Может кто знает каким методом получить нужную точку?

Share this post


Link to post

Short link
Share on other sites

Раскапывай иерархию классов и наследование. Есть два метода подхвата этой точки - через модуль aim (луч из центра камеры) и из реплея (сохраненная камера) (replayctrl если не ошибаюсь). Тебе нужно не на автовыбор системы полагаться, а на нужный модуль напрямую. Копай что выполняется по твоему запросу.

Share this post


Link to post

Short link
Share on other sites

Раскапывай иерархию классов и наследование. Есть два метода подхвата этой точки - через модуль aim (луч из центра камеры) и из реплея (сохраненная камера) (replayctrl если не ошибаюсь). Тебе нужно не на автовыбор системы полагаться, а на нужный модуль напрямую. Копай что выполняется по твоему запросу.

 

Да вот копал-перекапывал. Судя по всему в модули aim и replayctrl данные попадают из уровней ниже. Копая дерево классов уровнями ниже постоянно утыкаюсь в исходный модуль BigWorld, который ковырять тяжело. Вот и пытался отловить нужные координаты уровнями выше. Пока безрезультатно. Слишком много пересекающихся методов с подобными координатами. Ладно буду дальше ковырять, понятно что по другому никак. Просто думал, что может уже кто-то сталкивался с этим.

Share this post


Link to post

Short link
Share on other sites

Я тебе хочу сказать, что при записи реплея записывается точка прицеливания. Ее нужно получать через replayctrl. Точку наведения камеры при просмотре реплея можно получить через aim. Точные имена методов и классов посмотреть пока не могу. А точка маркера рассчитывается с использованием баллистики и turretYaw & gunPitch. Это в файле gunRotator.pyc кажется. Просто я не совсем понимаю, какую точку прицеливания ты хочешь получить: игровую (в бою) или наведение просмотровой камеры в реплее...

Share this post


Link to post

Short link
Share on other sites

Я тебе хочу сказать, что при записи реплея записывается точка прицеливания. Ее нужно получать через replayctrl. Точку наведения камеры при просмотре реплея можно получить через aim. Точные имена методов и классов посмотреть пока не могу. А точка маркера рассчитывается с использованием баллистики и turretYaw & gunPitch. Это в файле gunRotator.pyc кажется. Просто я не совсем понимаю, какую точку прицеливания ты хочешь получить: игровую (в бою) или наведение просмотровой камеры в реплее...

Точку до маркера орудия я уже знаю как находить. А мне надо именно точку наведения центрального маркера, то есть, грубо говоря, точку в центре экрана. Куда указывает центральный маркер, до той точки мне и нужно посчитать расстояние.

Я нахожу точку методом getDesiredShotPoint() экземпляра AvatarInputHandler. Он работает как надо если реплей в режиме "свободной камеры" - куда поворачиваю камеру туда он и считает расстояние, но если включаю режим "сохраненной камеры", то камера закрепляется и управляется реплеем, но я вращаю мышкой и расстояние постоянно меняется, как будто камера не закреплена (хотя визуально она на месте).

В общем муторно как-то описал. Пожалуй продолжу копать РеплейКонтроллер. Просто довольно большой объем кода и куча обращений к камере. Пока не получается найти где зацепить нужные координаты. Вопрос времени, я думаю.

Share this post


Link to post

Short link
Share on other sites

Уф, разобрался. Куча методов получить координаты точки прицела и у каждого свои особенности/недостатки, один работает только в снайперском, другой в аркадном и т.д.

Но вроде нашел универсальный способ. Получаю точку проекции через cameras.getWorldRayAndPoint(x, y). Работает в бою и в реплеях (в любом режиме камеры). Надо еще потестить значения, но похоже дает верные данные.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...