|
Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь |
|
Опции темы | Поиск в этой теме | Опции просмотра |
22.04.2011, 17:32 | #1 |
Ученый
Регистрация: 08.05.2010
Адрес: Новокузнецк
Сообщений: 141
Сказал(а) спасибо: 32
Поблагодарили 21 раз(а) в 9 сообщениях
|
Вопрос по LOS
Пытался тут прикрутить конфьюз мувмент генератор к ммапам.
В принципе все сделал и сделал достаточно таки более менее в работоспособном варианте до определенного момента. координаты xyz Берутся великим и ужасным рандомом. i_nextMove = urand(1,MAX_CONF_WAYPOINTS); где MAX_CONF_WAYPOINTS - 24 И все выглядит хорошо, там стоит скажем тележка, сгенерировалась координата за ней, овца или ослепленыш ее граматно оббежит. Но рандом суров и имеет свойство получать координату точки внутри объекта порой. Особенно это заметно в зданиях как таковых. Без мувмап все выглядело совсем страшно, в любом вмо только использовал - словил провал. С мувмапами при некорректных координатах существо пытается просчитать путь, начинает панически дергаца и бегать и таки порой попадает в неудобное положение, происходит микротелепорт да много каких еще конфузов. Вот возник вопрос, поскольку сам лобстер еще тот. const float x = i_waypoints[i_nextMove][0]; const float y = i_waypoints[i_nextMove][1]; const float z = i_waypoints[i_nextMove][2]; Как к вот получаемому по сути значению xyz выше прикрутить проверку на лос? Ну по сути по функции х = полученному рандомному след позицию, если оная в зоне видимости игрока?
__________________
MZero - z1686 SDZero - z0354 - 17.05.2011 |
22.04.2011, 19:25 | #2 |
MaNGOS Dev
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
|
т.е. вы хотите сначала проверить на видимость/LoS и затем генерировать путь?
WorldObject::IsWithinLOS используйте или чтото подобное: Код:
bool IsWithinLOS(uint32 mapId, float x, float y, float z, float ox, float oy, float oz) { return VMAP::VMapFactory::createOrGetVMapManager()->isInLineOfSight(mapId, x, y, z+2.0f, ox, oy, oz+2.0f); } Последний раз редактировалось SilverIce; 22.04.2011 в 20:32. |
22.04.2011, 21:33 | #3 |
Ученый
Регистрация: 08.05.2010
Адрес: Новокузнецк
Сообщений: 141
Сказал(а) спасибо: 32
Поблагодарили 21 раз(а) в 9 сообщениях
|
До того как прочитал, уже использовал такой вот моментик для корректировки:
Спасибо syooo Код:
unit.UpdateAllowedPositionZ(i_waypoints[idx][0],i_waypoints[idx][1],z); i_waypoints[idx][2] = z; + if(!unit.IsWithinLOS(i_waypoints[idx][0],i_waypoints[idx][1],i_waypoints[idx][2])) + { + i_waypoints[idx][0] = idx > 0 ? i_waypoints[idx-1][0] : x; + i_waypoints[idx][1] = idx > 0 ? i_waypoints[idx-1][1] : y; + i_waypoints[idx][2] = idx > 0 ? i_waypoints[idx-1][2] : z; + } } unit.StopMoving(); unit.addUnitState(UNIT_STAT_CONFUSED|UNIT_STAT_CONFUSED_MOVE); Точку следующего перемещения в конфьюзе генерирует рандом хуз по рандому берет от 1 до 24 в каждый ну и использует полученные данные. Порой сгенерированная точка может оказаться в весьма причудливых местах. Внутри объекта, в стене скажем прям или еще внутри какой части сооружения. Или под лестницей в том же зулгурубе. В результате сконфуженный сильно мечется пытаясь пройти по построенным мтайлам до точки которая в них не укладывается, со сбросами и откатами назад XD
__________________
MZero - z1686 SDZero - z0354 - 17.05.2011 Последний раз редактировалось BloodWarrior; 22.04.2011 в 21:47. |
22.04.2011, 22:46 | #4 |
MaNGOS Dev
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
|
как еще один никудышний вариант: посмотрите код блинка - из точки А в Б испускается луч и возвращается точка С пересечения с объектами или конечная(Б). Из А в С путь и стойте.
Скорее всего должен быть другой способ построения таких путей(ведь конечная точка по сути неизвестна): mmap возвращает возможные варианты перемещений внутри одного полигона, некий объект-агент выбирает один из них, и т.д. до "победного конца" |
23.04.2011, 06:03 | #5 |
Ученый
Регистрация: 08.05.2010
Адрес: Новокузнецк
Сообщений: 141
Сказал(а) спасибо: 32
Поблагодарили 21 раз(а) в 9 сообщениях
|
Ну та прибавочка что написана выше в принципе координаты нормализует, и больше косячные такие жуткие не выдавала, когда сконфьюженный получал бы позицию внутри го там или вмо большого.
А мувмап дальше делает свою работу на ура, путь до позиции плавный, по земельке. со всякими изгибами и неровностями. SilverIce в конфьюз мув гене конечная точка какраз и известна. Ну вернее следующая точка, для построения пути до нее и использую пф. Но великий рандом без чека на лос с этим х от 1 до 24 у от 1 до 24 и з от 1 до 24 при каждой генерации выдает после стопа новую по сути точку на которую необходимо переместиться, без учета лос да и вообще без учета всего. Поэтому и наблюдал такое дело когда точка оказывалась в тонкой стене скажем или колонне а овца вокруг нее билась в истерике потому что не пройти, а раз не пройти там включался по автомату момент с игнором пфа потом снова активация в результате рывки и микротелепорты. Приведенный код более менее стабилизирует ситуевину, хотя провалы таки под поверхности вмо ли или вообще под террейн через дерево скажем которое слишком близко к сданию таки еще имеются, но они редки и в основном все путем.
__________________
MZero - z1686 SDZero - z0354 - 17.05.2011 Последний раз редактировалось BloodWarrior; 23.04.2011 в 12:15. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вопрос по титулам | Limpnau | Новичкам | 1 | 03.12.2010 21:21 |
Вопрос по git | impylse | Новичкам | 2 | 23.09.2010 07:58 |
Вопрос по DBCfmt.h | sokmax | Корзина | 13 | 26.08.2010 21:16 |
Вопрос по SQL. | Omg | Новичкам | 24 | 21.07.2010 23:29 |
вопрос | sparky | Новичкам | 4 | 19.03.2010 16:28 |