Jump to content


Photo

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


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


  • Please log in to reply
9 replies to this topic

#1 OFFLINE   dmb09

dmb09

    Рядовой

  • Пользователи
  • 7 posts

Posted 15 March 2016 - 03:14

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


  • 0

#2 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 15 March 2016 - 18:54

 

куда копать, я пока совершенно не понимаю nixweiss.gif

 

 

 в А2 ACE такое есть


  • 0

#3 OFFLINE   dmb09

dmb09

    Рядовой

  • Пользователи
  • 7 posts

Posted 15 March 2016 - 19:53

Я потому и спрашиваю, что сам не пойму, как это в ACE реализовано.


  • 0

#4 OFFLINE   Snap

Snap

    Старшина

  • Пользователи (ВсВт-В)
  • 352 posts
  • Откуда:Чебоксары
  • Отряд:Black Badges

Posted 16 March 2016 - 02:43

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


  • 0

#5 OFFLINE   foran

foran

    Капитан

  • Пользователи (ВсВт-В)
  • 1757 posts
  • Откуда:Россия
  • Отряд:[WTF]

Posted 16 March 2016 - 17:10

да хорошо бы такое реализовать


  • 0

#6 OFFLINE   dmb09

dmb09

    Рядовой

  • Пользователи
  • 7 posts

Posted 16 March 2016 - 17:14

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

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


  • 0

#7 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 posts
  • Откуда:Кострома

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.

  • 1

#8 OFFLINE   dmb09

dmb09

    Рядовой

  • Пользователи
  • 7 posts

Posted 16 March 2016 - 22:06

Спасибо огромное, а для А2 такое возможно? Пример выше, как я понимаю, только для А3.


  • 0

#9 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 posts
  • Откуда:Кострома

Posted 16 March 2016 - 22:58

dmb09, ну а для А2, как писал выше тов. SteelRat, найдёте в АСЕ 2, я слишком молод что бы вспоминать её и её особенности, особенно когда уже есть готовый вариант в АСЕ 2 (В котором нужно лишь показаться и поискать похожие названия)
  • 0

#10 OFFLINE   dmb09

dmb09

    Рядовой

  • Пользователи
  • 7 posts

Posted 25 March 2016 - 01:40

Вроде что-то получается, но текстура трещин закрывает интерфейс (экшен меню, например). Как ее убрать на уровень ниже?


  • 0




Яндекс.Метрика