Перейти к содержимому


Фотография

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


Лучший Ответ 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);
};
Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1 OFFLINE   dmb09

dmb09

    Рядовой

  • Пользователи
  • 7 сообщений

Отправлено 15 March 2016 - 03:14

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


  • 0

#2 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 15 March 2016 - 18:54

 

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

 

 

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


  • 0

#3 OFFLINE   dmb09

dmb09

    Рядовой

  • Пользователи
  • 7 сообщений

Отправлено 15 March 2016 - 19:53

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


  • 0

#4 OFFLINE   Snap

Snap

    Старшина

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

Отправлено 16 March 2016 - 02:43

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


  • 0

#5 OFFLINE   foran

foran

    Капитан

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

Отправлено 16 March 2016 - 17:10

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


  • 0

#6 OFFLINE   dmb09

dmb09

    Рядовой

  • Пользователи
  • 7 сообщений

Отправлено 16 March 2016 - 17:14

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

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


  • 0

#7 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 16 March 2016 - 21:23   Лучший Ответ

Общий пример:
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);
};

Сообщение отредактировал vlad333000: 16 March 2016 - 21:25

  • 1

#8 OFFLINE   dmb09

dmb09

    Рядовой

  • Пользователи
  • 7 сообщений

Отправлено 16 March 2016 - 22:06

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


  • 0

#9 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 16 March 2016 - 22:58

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

#10 OFFLINE   dmb09

dmb09

    Рядовой

  • Пользователи
  • 7 сообщений

Отправлено 25 March 2016 - 01:40

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


  • 0




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