Jump to content
Korean Random
IzeBerg

Движение Entity по карте

Recommended Posts

Мне удалось (спустя немало костылей) сделать так, чтобы можно было создать Vehicle (наследник BigWorld.Entity, по-сути является объектом-танком) в указанной точке на карте.

Теперь возникли вопросы:

Как его корректно "устанавливать" на землю (настроить наклон вперед-назад/вправо-влево)? - Сейчас я могу ставить на землю/дома/другие объекты (x/y/z координаты), но нормально подстроить наклоны не могу.

Как ему корректно менять координаты (телепортировать/двигать)? - В методах я не нашел ничего, вызывать поля base/cell можно только для "подключенных" энтити (это мне сообщает BigWorld), т.е. тех, которые получены от сервера. Как вариант - пробовал пересоздать модель, но она пересоздается очень долго (грузят заново ресурсы и т.д.)

 

Если мне тут дадут ответ хотя-бы на первый вопрос - со вторым мне уже будет проще (на костылях смогу, может быть).

Share this post


Link to post

Short link
Share on other sites

лично не пробовал задавать эти параметры, но в принципе это yaw, roll и pitch в свойствах класса танка.

Share this post


Link to post

Short link
Share on other sites

лично не пробовал задавать эти параметры, но в принципе это yaw, roll и pitch в свойствах класса танка.

Их задавать можно до создания, как оределять их (roll/pitch)? Они Read-Only, т.е. после создания уже не изменить.

Share this post


Link to post

Short link
Share on other sites

entity.model.motors[0].signal - это матрица которую можно редактировать. например, так:

 

from gui.ClientHangarSpace import _createMatrix

import math

entity.model.motors[0].signal = _createMatrix(1, (-math.pi/2, -math.pi/4, -math.pi/4), (50, 30 + index * 10, 50))

 

первый аргумент _createMatrix масштаб элемента, второй это tuple углов в радианах, третий tuple координат в пространстве.

 

забавные вещи получаются:

post-28388-0-47238800-1435511246_thumb.jpg

post-28388-0-13696900-1435511249_thumb.jpg

Edited by Helkar

Share this post


Link to post

Short link
Share on other sites

entity.model.motors[0].signal - это матрица которую можно редактировать. например, так:

 

from gui.ClientHangarSpace import _createMatrix

import math

entity.model.motors[0].signal = _createMatrix(1, (-math.pi/2, -math.pi/4, -math.pi/4), (50, 30 + index * 10, 50))

 

первый аргумент _createMatrix масштаб элемента, второй это tuple углов в радианах, третий tuple координат в пространстве.

 

забавные вещи получаются:

Двигается, спасибо. Нас сколько я понял - двигая signal двигается только моделька, т.е. поля у Entity position/yaw/pitch/roll не трогаются. Печаль.

 

Остался первый вопрос (как определить наклоны, что правильно относительно земли расположить?).

Edited by IzeBerg

Share this post


Link to post

Short link
Share on other sites

вопрос не тривиальный.

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

post-28388-0-54854800-1435526408_thumb.png

...или получатся какие то столкновения с окружающими объектами?

может в движке уже есть что то готовое, но сам "на коленке" такое не напишешь

Edited by Helkar

Share this post


Link to post

Short link
Share on other sites

вопрос не тривиальный.

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

attachicon.gifrelief.png

...или получатся какие то столкновения с окружающими объектами?

может в движке уже есть что то готовое, но сам "на коленке" такое не напишешь

Паинт доставил, но сначала хотя-бы просто научится узнавать угол наклона земли в конкретной очке. А потом уже есть в клиенте куча способов "сталкивать" друг с другом Entity (а камень, как ни странно, еще какое Entity), думаю один из них подойдет.

 

P.s. Если как на картинке ставить - то он просто сквозь камни ляжет (если не учитывать камни и подобные объекты).

Edited by IzeBerg

Share this post


Link to post

Short link
Share on other sites
Если как на картинке ставить - то он просто сквозь камни ляжет

я понимаю что можно поставить и сквозь камни, но это ведь не желаемое поведение?

 

 

 

сначала хотя-бы просто научится узнавать угол наклона земли в конкретной очке

 

идея в том чтоб задать 2 точки: первую глубоко под землей, другую высоко над землей и вызвать данную функцию:

BigWorld.wg_collideSegment(BigWorld.player().spaceID, стартовая позиция, финальная позиция, 128)

она возвращает tuple: первый аргумент точка на земле, второй аргумент нормаль поверхности земли в точке.

Edited by Helkar

Share this post


Link to post

Short link
Share on other sites

идея в том чтоб задать 2 точки: первую глубоко под землей, другую высоко над землей и вызвать данную функцию:

BigWorld.wg_collideSegment(BigWorld.player().spaceID, стартовая позиция, финальная позиция, 128)

она возвращает tuple: первый аргумент точка на земле, второй аргумент нормаль поверхности земли в точке.

Я это умею и использую. Но данным способом находится только высота земли в заданных координатах. Там наклон земли не передается, на сколько я понял.

 

Была мысль на соседних точках сделать такое и как-то провести два вектора, но как это сделать я пока не могу понять.

 

 

 

я понимаю что можно поставить и сквозь камни, но это ведь не желаемое поведение?  

Ну хоть какое-то. Если с этим разобраться, то можно уже и пробовать сталкивать с камешками и другими объектами.

Edited by IzeBerg

Share this post


Link to post

Short link
Share on other sites

 

 

Но данным способом находится только высота земли в заданных координатах. Там наклон земли не передается, на сколько я понял.
 

 

 

второй аргумент - нормаль поверхности земли в точке.
 

https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C

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.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...