XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Система реалистичного обзора
Система предоставляет возможность создавать более-менее реалистичные обзоры у юнитов. Например, не круг, а лишь его сегмент. Основные действия - создания, модификация и удаление. Сразу предупреждаю, система ресурсоемкая и много модификаторов на юнитов лучше не накладывать. Зато идеально подойдет для РПГ или кампаний.
Версия 1.06

Требования

Импорт

Скопируйте триггер rView к себе на карту. Создайте юнита с параметрами РАБОТНИКА из карты-примера, укажите его рав-код в системе.
ВАЖНО
  • В системе отсутствует обработчик смертей юнитов! Не забудьте написать свой! Я его не писал по причине того, что возможно кодеру захочется внести свою логику в обработку поля обзора.
  • Позаботьтесь о том, чтобы поле обзора не могло выйти за границы карты. Ограничьте доступ туда, либо увеличьте темную границу карты.

TODO

  • Попробовать реализовать систему через области, а не дамми-юнитов.Прирост производительности незаметен на фоне прироста количества проблем
  • Исправление ошибки с кратковременным открытием поля обзора при увеличении оного. Нереализуемо в текущих версиях
  • Корректная обработка пересечения обзоров.
  • Некоторые опции, упрощающие работу и уменьшающие нагрузку системы, если заранее известно поведение юнита.
  • Обработка препятствий, склонов и др.
  • Изменение параметров на заданную величину за заданное время.
  • Некоторые оптимизации алгоритма.
  • Более четкое построение обзора у самого юнита.
  • Ваши пожелания?

Список изменений

1.06
  • Различные оптимизации
  • Добавлен режим динамической обработки освещения
  • Добавлен режим обработки света фонарей
» Старые версии
1.05
  • Скорость работы увеличена приблизительно в 6-8 раз
  • Множество оптимизацией и избавлений от констант
  • Изменение формата вызова функций
  • Мультиприменимость
  • Обработка уровня уклона, не только уровня клифов
  • Другие небольшие оптимизации, багфиксы и упрощения
  • Немного исправлены комментарии в карте, добавлен 1 дефайн для переменной
1.04b
  • Описание системы приведено в человеческий вид (спасибо VD)
1.04
  • Теперь можно задавать большинство параметров для каждого юнита индивидуально
  • Немного переделана карта примера
  • Исправлено несколько ошибок, связанных с разными вариациями параметров
  • Оптимизирован общий алгоритм
1.03
  • Добавлена функция, позволяющая плавно изменять численные параметры обзора
  • Добавлена опция, позволяющая установить заранее известное поведение юнита
  • Оптимизирован алгоритм обновления позиций, тепреь это почти не вызывает лагов при реальных углах и расстояниях
1.02
  • Прирост производительности по сравнению с 1.01(если отключен полный контроль обзора)
  • Полная обработка уровня клифов
  • Полная обработка разрушаемых объектов
  • Серьёзная оптимизация алгоритма
  • Некоторые изменения параметров дамми-юнита
  • Некоторые изменения параметров демо-юнита(пехотинец)
  • Добавлены несколько переменных, обеспечивающих более полный контроль над системой и новыми возможностями
  • Более полные комментарии в коде
  • Полная обработка препяствий обзора весьма ресурсоемкая при полном, круговом обзоре в 360 градусов, поэтому вся ответственность за производительность на программисте, т.к. все переменные для настройки данной функции доступны и описаны
1.01
  • Точечная обработка уровня клифов
  • Точечная обработка разрушаемых объектов
  • Небольшая оптимизация алгоритма
  • Оформление кода гораздо более соответствует нормам cJass
  • Некоторые изменения параметров дамми-юнита
1.00
  • Релиз

Применение системы, функции и переменные

» Функции
rView.AddView takes

    ### required ###
    unit un, (юнит, к которому применен модификатор видимости)
    player ownp, (игрок, который будет видеть всё, что происходит в поле модификатора)
    int r, (дальность видимости, иначе - радиус)
    real a, (угол обзора, считая от угла поворота юнита [0,360])
    bool h, (юнит неподвижен и имеет фиксированное направление взгляда)
    bool cd, (будет ли проверка на декорации)
    bool cc, (будет ли проверка на уровень клиффов и уровень склонов)
    bool ft, (будет ли проводиться полная проверка поля обзора)
    ### end of required ###
    ### optional ###
    int vsw, real dvr, int drv, real dpr, int ex, int mhd
    ### end of optional ###

returns bool


rView.ChangeParams takes 

    ### required ###
    unit un, (юнит, к которому применен модификатор видимости)
    int r, (дальность видимости, иначе - радиус)
    real a, (угол обзора, считая от угла поворота юнита [0,360])
    bool h, (юнит неподвижен и имеет фиксированное направление взгляда)
    bool cd, (будет ли проверка на декорации)
    bool cc, (будет ли проверка на уровень клиффов и уровень склонов)
    bool ft, (будет ли проводиться полная проверка поля обзора)
    ### end of required ###
    ### optional ###
    int vsw, real dvr, int drv, real dpr, int ex, int mhd
    ### end of optional ###

returns bool



***********НЕОБЯЗАТЕЛЬНЫЕ ПАРАМЕТРЫ***********
(...,vsw,dvr,drv,dpr,ex)
Если значения этих переменных не указаны — возьмутся значения по-умолчанию(см. ниже)

    vsw=view_start_wave
    dvr=dummyVRad
    drv=dummyravcode
    dpr=dummy_phys_radius
    ex=exactness
    mhd=maximal_height_difference

Со значениями переменных можно ознакомиться в блоке ++++++_Основные переменные_++++++
**********************************************



rView.DestroyView takes

    unit un (юнит, у которого удаляется модификатор видимости)

returns bool


rView.SChangeParams takes
 
    unit un, (юнит, к которому применен модификатор видимости)
    int r, (дальность видимости, иначе - радиус)
    real a, (угол обзора, считая от угла поворота юнита [0,360])
    real time (время, за которое надо произвести изменения до указанного состояния)

returns bool


Все функции возвращают true в случае удачи, иначе - false
» Переменные
real RV_TPeriod Период, с каким будет обновляться поле обзора
Допустимые значения: положительные дробные числа

real RV_STPeriod Период обновления при использовании функции плавного изменения параметров
Допустимые значения: положительные дробные числа

bool RV_display_errors Будут ли отображаться уведомления об ошибках
Допустимые значения: true\false

real RV_distInc Коэффициент общего удаления обзора от юнита, менять не рекомендуется
Допустимые значения: дробные числа


bool RV_dynamic_illumination Режим динамической обработки освещения
Допустимые значения: true\false

    bool RV_lantern_illumination Обработка фонарей
    
    int RV_lanternRad Радиус обзора фонаря
    Допустимые значения: натуральные числа N
    
    int RV_lanternRav Рав-код фонаря из РО
    Допустимые значения: значения РО

    
int RV_maximal_height_difference Разница высот, начиная с которой будет блокироваться поле обзора.
Допустимые значения: целые числа

int RV_viewstartwave Окружность, с которой начнется добавление поля обзора
Допустимые значения: натуральные числа N

real RV_DummyVRad Радиус обзора дамми-юнита из РО
Допустимые значения: значения РО

int RV_dummyravcode Рав-код дамми-юнита из РО
Допустимые значения: значения РО

bool RV_CheckDestructibles Будет ли происходить удаление модификатора на области, занятой декором
Допустимые значения: true\false

bool RV_CheckCliffs Будет ли происходить удаление модификатора на клиффах, чей уровень выше уровня клиффа, на котором находится юнит, а также проверка разницы высот.
Допустимые значения: true\false

bool RV_full_treatment Будет ли производиться полный контроль обзора юнита или же будет производитсья лишь точечная обработка
Допустимые значения: true\false

real RV_dummy_phys_radius "Физический" радиус дамми-юнита, использующийся при расчете удаления модификатора рядом с декорациями
Допустимые значения: положительные дробные числа

int RV_exactness Точность определения доступности местности для построения поля обзора.
Допустимые значения: любое целое значение угла в промежутке [1,360]
» Примеры вызовов функций
    rView.AddView(gg_unit_hfoo_0002,GetOwningPlayer(gg_unit_hfoo_0002),2500,180,false,true,true,true,2,4​00.0)
    rView.ChangeParams(gg_unit_hfoo_0002,1400,120)
    rView.DestroyView(gg_unit_hfoo_0002)
    rView.AddView(gg_unit_hfoo_0002,GetOwningPlayer(gg_unit_hfoo_0002),1800,360,false,true,true,true)
    rView.SChangeParams(gg_unit_hfoo_0002, 1000, 60, 7.0)
    rView.DestroyView(gg_unit_hfoo_0002)
ВАЖНО
» Быстрое использование
Вставляем этот код в кастом код карты, файл rViewSystem.j кладём в {Каталог NewGen}/AdicHelper/lib/
//____REALISTIC___VIEW___SYSTEM_____
/*
Опциональные параметры, для работы системы впрочем, достаточно и одной строки.
*/
// Глобальные параметры системы
#setdef RV_TPeriod=0.15
#setdef RV_STPeriod=0.3
#setdef RV_display_errors=true
#setdef RV_distInc=1.4
// Работа с динамическим освещением
#setdef RV_dynamic_illumination=true
    // Фонарь
    #setdef RV_lantern_illumination=true
    #setdef RV_lanternRad=500
    #setdef RV_lanternRav='n000'
// А теперь идут параметры, которые можно задать для юнитов индивидуально
#setdef RV_maximal_height_difference=150
#setdef RV_viewstartwave=1              
#setdef RV_dummyravcode='hpea'          
#setdef RV_CheckDestructibles=true      
#setdef RV_CheckCliffs=true             
#setdef RV_full_treatment=true          
#setdef RV_dummy_phys_radius=140.00     
#setdef RV_exactness=13   
#setdef RV_DummyRadius=350.00             
//Система
#include "rViewSystem.j"       
Плюсы
  • Максимально краткая запись системы
  • Как следствие - удобная навигация в коде карты, более красивый и практичный код
Минусов не замечено, т.к. системе в любом случае требуется cJass.

Дополнительно

В карте-примере каждые несколько секунд будет происходить изменение параметров и в итоге - удаление модификатора. За это отвечает триггер Ini.
Принимаются ваши пожелания по совершенствованию системы.

Добавлено на сайт (v1.06). Скачать
+300 опыта
Прикрепленные файлы
Тип файла: 7z rViewSystem.7z (6.2 Кбайт, 175 просмотров )
Тип файла: w3x rview_sys1.06_demo.w3x (58.2 Кбайт, 389 просмотров )

Отредактировано Артте, 10.11.2009 в 19:28.
Старый 20.09.2009, 21:35
DoMuHaToP

offline
Опыт: 11,204
Активность:
Когда сегмент очень маленький и направлен назад, юнит время от времени выбегает за свой собственный обзор. о_О
Старый 20.09.2009, 21:47
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Ну то, что юнит немного видит вокруг себя-это в РО настроено
Артте добавил:
ты это имел ввиду?
Старый 20.09.2009, 21:48
DoMuHaToP

offline
Опыт: 11,204
Активность:
В принципе полезная вещь, можно будет делать нормальные stealth-карты с охранниками, к которым можно подкрасться и тихонько прирезать со спины.

DoMuHaToP добавил:
Цитата:
Сообщение от Артте
Ну то, что юнит немного видит вокруг себя-это в РО настроено

Артте добавил:
ты это имел ввиду?


Он мигает (исчезает часто, на склоне он у меня вообще на пару секунд исчез) - выходит из своего собственного радиуса обзора и тут же в него снова попадает.
Старый 20.09.2009, 21:51
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Записал в первое пожелание)
Я у себя до склонов не добегал..хм..там просто надо ближе к юниту обзор значит начинать строить.. учтем..\
Артте добавил:
Либо как временное решение - в РО добавить радиуса собственного
Старый 20.09.2009, 21:53
DoMuHaToP

offline
Опыт: 11,204
Активность:
Артте, зри. =)

1. Мы бежим с очень маленьким обзором (сначала был нормальный, потом конус, потом маленький конус, затем снова нормальный, а потом этот, крохотный).



2. Бац! Он вылетел за свой обзор!?

Старый 20.09.2009, 22:01
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Ахах, нет) зри триггер Ini, этот крохотный-полный РО, в конце модификатор полностью удаляется
Старый 20.09.2009, 22:02
DoMuHaToP

offline
Опыт: 11,204
Активность:
Тьфу, я думал, полный - это обычный круглый, думал - глюк. =)
Старый 20.09.2009, 22:05
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
нет, всё вроде бы работает значит))
DoMuHaToP:
В принципе полезная вещь, можно будет делать нормальные stealth-карты с охранниками, к которым можно подкрасться и тихонько прирезать со спины.
Кстати об этом - если сама система обеспечивает технически зрение охраннику конусом, а у него выставить ноль - всё будет хорошо работать. Но напомню, система ресурсоемкая при больших полях обзора =)
А следовательно, логично делать все релистичным, поля обзора в 600-1000 хватит, ибо в реале мы хоть и видим дальше, но мелочей там не замечаем.
Старый 20.09.2009, 22:08
agentex

offline
Опыт: 34,834
Активность:
сделано через модификаторы или даммики?
есть мнение что на даммиках лучше
Старый 20.09.2009, 22:10
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
даммики. Модификатором называю, чтобы людей не погружать в недра системы.
Артте добавил:
и не путать как следствие
Старый 20.09.2009, 22:13
Prototype_T
Пока не сдох
offline
Опыт: 4,774
Активность:
Полезная модификация: если раньше можно было делать экшены на движке, то теперь можно делать стелс-экшен. да и карты всякие про ассасинов.
Старый 20.09.2009, 22:15
agentex

offline
Опыт: 34,834
Активность:
а че на cjasse делал? щас он у немногих есть + он больше для понта, вжасс имхо было бы достаточно
я вот например не могу посмареть наработку..
Старый 20.09.2009, 22:15
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
на cjass как-то код привычней смотрится, + без всяких call, set.. вобщем чисто такие небольшие удобства. Ну для понта - не соглашусь, скорее удобство.
Старый 20.09.2009, 22:17
agentex

offline
Опыт: 34,834
Активность:
удобство удобством, а заботиться о конечных юзерах тоже нужно. я вот например все наработки которые выкладываю в пуб пишу на чистом жассе)
на cjass как-то код привычней смотрится
привычней для си прогеров и только) для новичков и гуишников это просто самоубийство
Старый 20.09.2009, 22:20
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
ну для PHP прогеров, видимо, тоже))
А конечные юзеры - я возможно верну всё на vJass, но на последней стадии разработки. В финальной версии.
Старый 20.09.2009, 22:22
adic3x

offline
Опыт: 108,439
Активность:
-WarCraft 1.23 или новее
опечатка? 24 например плохо совместим с 23, но то, что работало в 23 должно работать и в 21
Старый 20.09.2009, 23:05
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
не опечатка, я просто не имею возможности тестить на версиях перед 1,23б..не имел..сейчас у меня 1,24 и она работает, как работала и на ,23. Обновился я сегодня.. Так что, можно 1,21 ставить?
Артте добавил:
был бы благодарен, если бы кто-то на ,21 потестил
Старый 20.09.2009, 23:14
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Артте, значит можно ставить на версии с 1.14(или 1.18?) до 1.24b
Старый 20.09.2009, 23:16
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
  1. если cjass, то почему не юзается на полную? было бы ещё приятнее смотреть
  2. в инклюдах надо убрать слово lib\\
  3. спасибо за говнокод ужасную смесь синтаксиса jass и cjass, я нашел много багов сворачивания xD
Старый 21.09.2009, 01:18
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 04:53.