Возможно ли в Арме реализовать повреждение прицела техники после поражения оптических приборов стрелковым оружием/осколками от взрыва? Хотя бы самым элементарным образом - менять текстуру прицела на пробитую/треснутую (пока не говорю о таких тонкостях, как вышедший из строя дальномер или зум). Можно ли менять текстуру прицела "на ходу", по выполнению условия заменяя ее на другую? Если нет, то каким образом можно наложить сверху другую (такое возможно, во всяком случае, в А2 ACE такое есть - прицельные марки у стрелка вертолета или дальномер у танков именно так реализован)? Кто-то может помочь, хотя бы направив в нужном направлении - куда копать, я пока совершенно не понимаю
Моих познаний в структуре pbo пока не хватает даже на то, чтобы найти ссылки на эти самые прицельные сетки из конфига оружия (или они вообще в конфиге техники находятся?), а о том, как я буду определять момент поражения (создавать объект с хитбоксами у триплексов и проверять его на дамаг, например), пока и не думаю

Повреждение прицелов техники

Best Answer vlad333000 , 16 March 2016 - 21:23
Общий пример:
1. Создаем текстуру трещин для малого, среднего и высокого урона (Ну или любая другая удобная для вас градации)
2. Создаем дисплей с контролами для всех типов урона
2.1. Но пихаем этот дисплей в класс rscTitles
2.2. К дисплею приписываем:
onLoad = "uiNamespace setVariable [""display_opticDamage"",_this select 0]";3. Вызываем дисплей:
//Надо иначе Арма может ругаться disableSerialization; //Создаем дисплей "layer_opticDamage" cutRsc [<имя_вашего_дисплея>,"PLAIN"]; //Скрываем контролы { _x ctrlSetFade 1; _x ctrlCommit 0; } forEach (allControls (uiNamespace getVariable ["display_opticDamage",displayNull]));4. Добавляем обработчик событий Draw3D со следующим кодом:
//Надо иначе Арма может ругаться disableSerialization; //Получаем наш дисплей с повреждениями _display = uiNamespace getVariable ["display_opticDamage",displayNull]; //Смотрим где игрок if ((isNull (objectParent player)) && (cameraView isEqualTo "GUNNER") && (!isNull _display)) then { //Получаем урон "оптики" техники _damage = (objectParent player) getHit <HitPoint_нужный_вам>; //Переключаемся на нужный "вид" повреждений switch (true) do { //Нет урона case (_damage == 0.00): { { _x ctrlSetFade 1; _x ctrlCommit 0; } forEach (allControls _display); }; //Малый урон case ((_damage > 0.00) && (_damage <= 0.33)): { //Скрываем другие повреждения { _ctrl = _display displayCtrl _x; _ctrl ctrlSetFade 1; _ctrl ctrlCommit 0; } forEach [<idc_среднего_урона>,<idc_большого_урона>]; //Показываем повреждения определенного уровня _ctrl = _display displayCtrl <idc_малого_урона>; _ctrl ctrlSetFade 0; _ctrl ctrlCommit 0; }; //Средний урон case ((_damage > 0.33) && (_damage <= 0.66)): { { _ctrl = _display displayCtrl _x; _ctrl ctrlSetFade 1; _ctrl ctrlCommit 0; } forEach [<idc_малого_урона>,<idc_большого_урона>]; _ctrl = _display displayCtrl <idc_среднего_урона>; _ctrl ctrlSetFade 0; _ctrl ctrlCommit 0; }; //Большой урон case ((_damage > 0.66) && (_damage <= 1.00)): { { _ctrl = _display displayCtrl _x; _ctrl ctrlSetFade 1; _ctrl ctrlCommit 0; } forEach [<idc_малого_урона>,<idc_среднего_урона>]; _ctrl = _display displayCtrl <idc_высокого_урона>; _ctrl ctrlSetFade 0; _ctrl ctrlCommit 0; }; }; } else { //Игрок не в технике или не смотрит в оптику (Ну или сломался дисплей) { _x ctrlSetFade 1; _x ctrlCommit 0; } forEach (allControls _display); };Go to the full post

#1
OFFLINE
Posted 15 March 2016 - 03:14
#2
OFFLINE
Posted 15 March 2016 - 18:54
куда копать, я пока совершенно не понимаю
в А2 ACE такое есть
#3
OFFLINE
Posted 15 March 2016 - 19:53
Я потому и спрашиваю, что сам не пойму, как это в ACE реализовано.
#4
OFFLINE
Posted 16 March 2016 - 02:43
наверное, в идеале, надо в модели понатыкать хитпойнтов в прицелы и смотреть за их значением. тогда можно будет из стрелковки стрелять по прицелам и радоваться жизни.
#5
OFFLINE
Posted 16 March 2016 - 17:10
да хорошо бы такое реализовать
#6
OFFLINE
Posted 16 March 2016 - 17:14
наверное, в идеале, надо в модели понатыкать хитпойнтов в прицелы и смотреть за их значением. тогда можно будет из стрелковки стрелять по прицелам и радоваться жизни.
Мне для начала найти бы, каким образом можно наложить текстуру с трещинами на сам прицел во время игры.
#7
OFFLINE
Posted 16 March 2016 - 21:23 Best Answer
1. Создаем текстуру трещин для малого, среднего и высокого урона (Ну или любая другая удобная для вас градации)
2. Создаем с контролами для всех типов урона
2.1. Но пихаем этот дисплей в класс
2.2. К дисплею приписываем:
onLoad = "uiNamespace setVariable [""display_opticDamage"",_this select 0]";3. Вызываем дисплей:
//Надо иначе Арма может ругаться disableSerialization; //Создаем дисплей "layer_opticDamage" cutRsc [<имя_вашего_дисплея>,"PLAIN"]; //Скрываем контролы { _x ctrlSetFade 1; _x ctrlCommit 0; } forEach (allControls (uiNamespace getVariable ["display_opticDamage",displayNull]));4. Добавляем со следующим кодом:
//Надо иначе Арма может ругаться disableSerialization; //Получаем наш дисплей с повреждениями _display = uiNamespace getVariable ["display_opticDamage",displayNull]; //Смотрим где игрок if ((isNull (objectParent player)) && (cameraView isEqualTo "GUNNER") && (!isNull _display)) then { //Получаем урон "оптики" техники _damage = (objectParent player) getHit <HitPoint_нужный_вам>; //Переключаемся на нужный "вид" повреждений switch (true) do { //Нет урона case (_damage == 0.00): { { _x ctrlSetFade 1; _x ctrlCommit 0; } forEach (allControls _display); }; //Малый урон case ((_damage > 0.00) && (_damage <= 0.33)): { //Скрываем другие повреждения { _ctrl = _display displayCtrl _x; _ctrl ctrlSetFade 1; _ctrl ctrlCommit 0; } forEach [<idc_среднего_урона>,<idc_большого_урона>]; //Показываем повреждения определенного уровня _ctrl = _display displayCtrl <idc_малого_урона>; _ctrl ctrlSetFade 0; _ctrl ctrlCommit 0; }; //Средний урон case ((_damage > 0.33) && (_damage <= 0.66)): { { _ctrl = _display displayCtrl _x; _ctrl ctrlSetFade 1; _ctrl ctrlCommit 0; } forEach [<idc_малого_урона>,<idc_большого_урона>]; _ctrl = _display displayCtrl <idc_среднего_урона>; _ctrl ctrlSetFade 0; _ctrl ctrlCommit 0; }; //Большой урон case ((_damage > 0.66) && (_damage <= 1.00)): { { _ctrl = _display displayCtrl _x; _ctrl ctrlSetFade 1; _ctrl ctrlCommit 0; } forEach [<idc_малого_урона>,<idc_среднего_урона>]; _ctrl = _display displayCtrl <idc_высокого_урона>; _ctrl ctrlSetFade 0; _ctrl ctrlCommit 0; }; }; } else { //Игрок не в технике или не смотрит в оптику (Ну или сломался дисплей) { _x ctrlSetFade 1; _x ctrlCommit 0; } forEach (allControls _display); };
Edited by vlad333000, 16 March 2016 - 21:25.
#8
OFFLINE
Posted 16 March 2016 - 22:06
Спасибо огромное, а для А2 такое возможно? Пример выше, как я понимаю, только для А3.
#10
OFFLINE
Posted 25 March 2016 - 01:40
Вроде что-то получается, но текстура трещин закрывает интерфейс (экшен меню, например). Как ее убрать на уровень ниже?