Jump to content


Photo

drawIcon. Отображение раненых и разноцветные группы.


Best Answer Schatten , 29 July 2018 - 18:32

moroz89, подробное описание ошибки приводится в RPT-файле.

А ошибка заключается, в дополнение к написанному vlad333000, в неправильном использовании команды isNil -- она принимает или название переменной, или код. В твоём случае можно так:

isNil "_color"

В остальном -- нормально. Единственное замечание -- я предлагал сохранять в группе, а не в missionNamespace. В последнем случае твой цвет будет перезатираться.

 

Ну и, как обещал, выкладываю свой вариант:

Go to the full post


  • Please log in to reply
22 replies to this topic

#1 OFFLINE   moroz89

moroz89

    Мл.сержант

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

Posted 26 July 2018 - 15:02

Всем доброго времени суток. Нужна помощь по двум вопросам.

Вопрос 1.

Имеются две стороны, красные и зеленые. Нужно сделать так, чтобы они не видели друг друга на карте.

Проблем решилась просто:

side _x == playerSide

Но в таком случае не видно раненых.

Если в условие добавить:

if (side _x == playerSide || captive _x)

То раненых видно, но их видят все! И красные и зеленые.

Пробовал писать такое условие:

if (side _x == playerSide || (side _x == playerSide && captive _x))

Но тогда вообще не видно никого, кроме себя. Видимо чушь какую-то я написал )

 

Вот на всякий случай весь код:

fnc_iconDrawMap = compileFinal
"
	private [""_shadow"",""_textSize"",""_textFont"",""_textOffset""];

_shadow = 1;
_textSize = 0.04;
_textFont = 'puristaMedium';
_textOffset = 'right';
{
    private [""_unit"",""_iconType"",""_color"",""_pos"",""_iconSize"",""_dir"",""_text"",""_pos_lead""];
    _unit = vehicle _x;
    if (side _x == playerSide || captive _x) then
	{
        _iconType = [_unit] call fnc_icontype;
        _color = [_x] call fnc_iconcolor;
        _pos = getPosASL _unit;
        _iconSize = [_unit] call fnc_iconsize;
        _dir = getDir _unit;
        _text = [_unit] call fnc_icontext;
        _pos_lead = position (leader _unit);
        if (_x == crew _unit select 0 || {(_x in allUnitsUav)}) then {
            (_this select 0) drawIcon [
                _iconType,
                _color,
                _pos,
                _iconSize,
                _iconSize,
                _dir,
                _text,
                _shadow,
                _textSize,
                _textFont,
                _textOffset
            ];
        };
    };
} count (playableUnits + switchableUnits + allUnitsUav)
";

Вопрос 2.

Хочу разукрасить группы. Своя группа всегда красная, другие окрашиваются рандомно.

Вот что накалякал:

_xz = [0,1] call BIS_fnc_randomNum;
_yz = [0,1] call BIS_fnc_randomNum;
	
if ((group _unit) == (group player)) exitWith {_color = [0.5,0,0,1];_color;};
if ((group _unit) != (group player)) exitWith {_color = [0.5,_xz,_yz,1];_color;};

Теперь все юниты не состоящие в моей группе разукрасились и моргают всеми цветами радуги каждую 1 мс.

1. Как сделать так, чтобы цвет не менялся с каждым обновлением карты, а выбрался рандомно один раз и остался.

2. Как назначить цвет не конкретному юниту, а всей его группе.

 

Спасибо!)


  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 26 July 2018 - 15:16

moroz89, насчёт первого:

(side (group _x)) == playerSide

насчёт второго:

_color = if ((group _unit) == (group player)) then {[0.5,0,0,1]} else {[0.5,_xz,_yz,1]};

Edited by Schatten, 26 July 2018 - 15:27.

  • 1

#3 OFFLINE   moroz89

moroz89

    Мл.сержант

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

Posted 26 July 2018 - 15:48

Schatten, в обоих случаях просто перестает что-либо расскрашивать 


  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 26 July 2018 - 17:26

moroz89, код с внесёнными изменениями опубликуй.


  • 0

#5 OFFLINE   moroz89

moroz89

    Мл.сержант

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

Posted 27 July 2018 - 08:13

Schatten,

первое

fnc_iconDrawMap = compileFinal
"
	private [""_shadow"",""_textSize"",""_textFont"",""_textOffset""];

_shadow = 1;
_textSize = 0.04;
_textFont = 'puristaMedium';
_textOffset = 'right';
{
    private [""_unit"",""_iconType"",""_color"",""_pos"",""_iconSize"",""_dir"",""_text"",""_pos_lead""];
    _unit = vehicle _x;
    if ((side (group _x)) == playerSide) then
	{
        _iconType = [_unit] call fnc_icontype;
        _color = [_x] call fnc_iconcolor;
        _pos = getPosASL _unit;
        _iconSize = [_unit] call fnc_iconsize;
        _dir = getDir _unit;
        _text = [_unit] call fnc_icontext;
        _pos_lead = position (leader _unit);
        if (_x == crew _unit select 0 || {(_x in allUnitsUav)}) then {
            (_this select 0) drawIcon [
                _iconType,
                _color,
                _pos,
                _iconSize,
                _iconSize,
                _dir,
                _text,
                _shadow,
                _textSize,
                _textFont,
                _textOffset
            ];
                (_this select 0) drawLine [
                _pos,
                _pos_lead,
                _color
            ];
        };
    };
} count (playableUnits + switchableUnits + allUnitsUav)
"; 

второе

fnc_iconcolor = compileFinal
"
	private [""_unit"",""_color"",""_xz"",""_yz""];
	_unit = _this select 0;
	_xz = [0,1] call BIS_fnc_randomNum;
	_yz = [0,1] call BIS_fnc_randomNum;
	
        _color = if ((group _unit) == (group player)) then {[0.5,0,0,1]} else {[0.5,_xz,_yz,1]};
	_color;
"; 

  • 0

#6 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 27 July 2018 - 12:00

moroz89, что это за левый кусок кода:

                (_this select 0) drawLine [
                _pos,
                _pos_lead,
                _color
            ];

?
Уверен, из-за этого и не работает. Наверняка ещё в RPT-файле что-то есть.
Во-втором случае не вижу ничего странного.
 

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

Нужно с помощью

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

получить цвет группы. Если его нет, то сгенерировать и сохранить с помощью

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

в группе.


Edited by Schatten, 27 July 2018 - 12:15.

  • 0

#7 OFFLINE   moroz89

moroz89

    Мл.сержант

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

Posted 27 July 2018 - 12:44

moroz89, что это за левый кусок кода:

                (_this select 0) drawLine [
                _pos,
                _pos_lead,
                _color
            ];
?
Уверен, из-за этого и не работает. Наверняка ещё в RPT-файле что-то есть.
Во-втором случае не вижу ничего странного.

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

Нужно с помощью

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

получить цвет группы. Если его нет, то сгенерировать и сохранить с помощью

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

в группе.
Этот кусок кода рисует линии от бойцов к командиру группы и он работает отлично.

Спасибо за подсказку, буду пробовать!

Edited by moroz89, 27 July 2018 - 12:45.

  • 0

#8 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 28 July 2018 - 00:03

Этот кусок кода рисует линии от бойцов к командиру группы и он работает отлично.

Действительно. Сбил с толку отступ.

 

Schatten, в обоих случаях просто перестает что-либо расскрашивать 

А у меня отлично работает:


Edited by Schatten, 28 July 2018 - 18:17.

  • 0

#9 OFFLINE   moroz89

moroz89

    Мл.сержант

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

Posted 28 July 2018 - 17:13

Этот кусок кода рисует линии от бойцов к командиру группы и он работает отлично.

Действительно. Сбил с толку отступ.

Schatten, в обоих случаях просто перестает что-либо расскрашивать

А у меня отлично работает:
Arma3_x64 2018-07-27 23-01-03-490.png
Видимо я что-то не понял. И на скришоте две группы одного цвета, а я пытаюсь их в разные раскрасить )

Что-то с getVariable не могу разобраться. Вечером напишу сюда код, тыкните меня носом, если не сложно, что я делаю не так)

А по поводу первого, если просто (side _x == playerSide), то на карте не отображает раненных. То есть тех, у кого setCaptive = true.

Edited by moroz89, 28 July 2018 - 17:21.

  • 0

#10 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 28 July 2018 - 18:11

И на скришоте две группы одного цвета, а я пытаюсь их в разные раскрасить )

Я хотел показать, что дело не в предложенных решениях, а в чём-то другом.
 

Что-то с getVariable не могу разобраться. Вечером напишу сюда код, тыкните меня носом, если не сложно, что я делаю не так)

Жду.
 

А по поводу первого, если просто (side _x == playerSide), то на карте не отображает раненных. То есть тех, у кого setCaptive = true.

Естественно, ведь "side _x" определяет сторону юнита, которая изменяется на гражданскую, если его сделать пленником, а "side (group _x)" -- группы, которая не меняется.

 

P. S.

Так лучше?


Edited by Schatten, 28 July 2018 - 18:16.

  • 1

#11 OFFLINE   moroz89

moroz89

    Мл.сержант

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

Posted 28 July 2018 - 18:28

Я хотел показать, что дело не в предложенных решениях, а в чём-то другом.

Естественно, ведь "side _x" определяет сторону юнита, которая изменяется на гражданскую, если его сделать пленником, а "side (group _x)" -- группы, которая не меняется.

P. S.
Так лучше?


Тфу ты. Это же просто и логично. Спасибо, что разжевали.

По поводу картинки: это предустановленные цвета или рандом?
  • 0

#12 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 28 July 2018 - 18:37

По поводу картинки: это предустановленные цвета или рандом?

_color = if (_unitGroup == _playerGroup) then {
	[0.5, 0, 0, 1]
} else {
	[
		0.5,
		[0, 1] call BIS_fnc_randomNum,
		[0, 1] call BIS_fnc_randomNum,
		1
	]
};

P. S.

Полный вариант предоставлю после твоего.


  • 0

#13 OFFLINE   moroz89

moroz89

    Мл.сержант

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

Posted 28 July 2018 - 21:44

Сдаюсь.Если я просто задам значение _color = if (_unitGroup..... то у меня уже перестает раскрашивать.

fnc_iconcolor = compileFinal
"
	private [""_unit"",""_color"",""_alpha"",""_xz"",""_yz"",""_col1"",""_colorX"",""_colorZ""];
	_unit = _this select 0;

	if (_unit getVariable ""isUnconscious"") exitWith {_color = [1,0.4,0,_alpha];_color};
	
	_color = if (_unitGroup == _playerGroup) then {
		[0.5, 0, 0, 1]
	} else {
		[0.5,
		[0, 1] call BIS_fnc_randomNum,
		[0, 1] call BIS_fnc_randomNum,
		1]
	};	
	_color;
";


  • 0

#14 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 28 July 2018 - 21:59

Сдаюсь.Если я просто задам значение _color = if (_unitGroup..... то у меня уже перестает раскрашивать.

Ну конечно же, ведь _unitGroup и _playerGroup -- это мои переменные, которых у тебя нету! Поэтому используй второе условие, которое я привёл здесь.

Да и _alpha не инициализирована.

 

P. S.

Кстати, а где код с setVariable/getVariable?


Edited by Schatten, 28 July 2018 - 22:01.

  • 0

#15 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

  • Пользователи
  • 264 posts
  • Откуда:Moscow

Posted 28 July 2018 - 22:55

Я бы изначально по-другому сделал
При старте миссии forEach’ом прогонял всех юнитов, И каждому записывал его цвет в variable, и от туда же потом считывал

Edited by ReXcOr, 28 July 2018 - 22:56.

  • 0

#16 OFFLINE   moroz89

moroz89

    Мл.сержант

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

Posted 29 July 2018 - 17:46

 

Сдаюсь.Если я просто задам значение _color = if (_unitGroup..... то у меня уже перестает раскрашивать.

Ну конечно же, ведь _unitGroup и _playerGroup -- это мои переменные, которых у тебя нету! Поэтому используй второе условие, которое я привёл здесь.

Да и _alpha не инициализирована.

 

P. S.

Кстати, а где код с setVariable/getVariable?

 

 

Не углядел. Теперь работает.

 

С getVariable все копаюсь, изучать пытаюсь. Пока не получается. На странице wiki информации толком нет, либо это я просто не способен в ней разобраться )


  • 0

#17 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 29 July 2018 - 17:49

С getVariable все копаюсь, изучать пытаюсь. Пока не получается. На странице wiki информации толком нет, либо это я просто не способен в ней разобраться )

Скорее второе. Выкладывай сюда свои наработки, разберёмся.


  • 0

#18 OFFLINE   moroz89

moroz89

    Мл.сержант

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

Posted 29 July 2018 - 18:20

	_colorX = if ((group _unit) == (group player)) then {
		[0.5, 0, 0, 1];
	} else {
		[0.5,
		[0, 1] call BIS_fnc_randomNum,
		[0, 1] call BIS_fnc_randomNum,
		1];
	};
	
	_color = missionNamespace getVariable ""colorXY"";
	if (isNil _color) then {
		missionNamespace setVariable [""colorXY"",_colorX];
	};
	_color;

При открытии карты получаю ошибку в drawIcon


  • 0

#19 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 29 July 2018 - 18:29

moroz89, зачем двойные двойные кавычки? (Это не опечатка в моих словах, а ваш код)
moroz89, ну и сам код неправильный:
1. Вы получили значение переменной
2. Вы проверили что переменная не определена:
2.1 Если переменная не определена, переопредееляете переменную в missionNamespace и продолжаете использовать старую
2.2 Если переменная определена, продолжаете ее использовать

Ничего не находите странным?

Edited by vlad333000, 29 July 2018 - 18:41.

  • 0

#20 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 29 July 2018 - 18:32   Best Answer

moroz89, подробное описание ошибки приводится в RPT-файле.

А ошибка заключается, в дополнение к написанному

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

-- она принимает или название переменной, или код. В твоём случае можно так:

isNil "_color"

В остальном -- нормально. Единственное замечание -- я предлагал сохранять в группе, а не в missionNamespace. В последнем случае твой цвет будет перезатираться.

 

Ну и, как обещал, выкладываю свой вариант:

Attached File  MapIcons.VR.7z   1.72KB   6 downloads


Edited by Schatten, 30 July 2018 - 11:18.

  • 1




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