mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
new dynamicText function [Video](https://www.youtube.com/watch?v=M0tPSOqA54w)
This commit is contained in:
parent
20cdc1e17b
commit
ea6ae2f529
@ -1,112 +1,110 @@
|
|||||||
/*
|
/*
|
||||||
Author: Raimonds Virtoss - EpochMod.com
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
Contributors: Aaron Clark
|
|
||||||
|
|
||||||
Description:
|
Description:
|
||||||
Displays custom text message to player
|
Displays custom text message to player, supports any variable and structured text
|
||||||
|
|
||||||
Licence:
|
Licence:
|
||||||
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
Github:
|
Github:
|
||||||
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf
|
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
"TEST" call Epoch_dynamicText
|
"TEST" call Epoch_dynamicText
|
||||||
*/
|
*/
|
||||||
#include "\A3\ui_f\hpp\defineCommonGrids.inc"
|
#include "\A3\ui_f\hpp\defineCommonGrids.inc"
|
||||||
private ["_y","_cnt","_ctrl","_alreadyEnabled","_input","_scale","_width","_height","_centerX","_centerY","_display","_ctrlGroup","_controls","_ctrlText","_add"];
|
|
||||||
params [["_text","Missing text",["",(text "")]],["_time",5,[1]],["_color","#ffffff",[""]]];
|
|
||||||
|
|
||||||
if (_text isEqualType "STRING") then {_text = parseText _text};
|
_in = param [0, "No input given"];
|
||||||
|
_timer = param [1, 2];
|
||||||
|
|
||||||
_alreadyEnabled = uiNamespace getVariable ["rmx_var_dynamicText",false];
|
if !(_in isEqualType "STRING") then {_in = str _in};
|
||||||
|
|
||||||
_input = count str _text * 2;
|
if (isnil "rmx_var_dtMessageArr") then {
|
||||||
_scale = 1;
|
rmx_var_dtMessageArr = [];
|
||||||
_width = _scale * GUI_GRID_W;
|
|
||||||
_height = _scale * GUI_GRID_H;
|
|
||||||
_centerX = 0.5;
|
|
||||||
_centerY = -18 * GUI_GRID_H + GUI_GRID_Y;
|
|
||||||
|
|
||||||
disableSerialization;
|
|
||||||
_display = findDisplay 46;
|
|
||||||
|
|
||||||
_ctrlGroup = _display ctrlCreate ["RscControlsGroupNoScrollbars", call Epoch_getIDC];
|
|
||||||
_ctrlGroup ctrlSetPosition [_centerX - _width/2 * _input / 2, _centerY - _height, _width * _input, _height * 2];
|
|
||||||
_ctrlGroup ctrlCommit 0;
|
|
||||||
|
|
||||||
_y = 0;
|
|
||||||
_cnt = -1;
|
|
||||||
_controls = [];
|
|
||||||
for "_i" from 0 to (_input - 1) do {
|
|
||||||
_ctrl = _display ctrlCreate ["RscPicture", call Epoch_getIDC,_ctrlGroup];
|
|
||||||
_cnt = _cnt + 1;
|
|
||||||
if (_cnt == (_input / 2)) then {_y = _height; _cnt = 0;};
|
|
||||||
_ctrl ctrlSetPosition [_cnt * _width,_y,_width,_height];
|
|
||||||
_ctrl ctrlSetText "#(rgb,8,8,3)color(1,1,1,1)";
|
|
||||||
_ctrl ctrlCommit 0;
|
|
||||||
_ctrl ctrlSetFade 1-(random 0.2);
|
|
||||||
[_ctrl, 1-(random 0.2),0] call BIS_fnc_ctrlSetScale;
|
|
||||||
|
|
||||||
_controls set [_i, _ctrl];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_ctrlText = _display ctrlCreate ["rmx_ST1", call Epoch_getIDC,_ctrlGroup];
|
if (!isnil "rmx_var_dtEnabled") exitWith {
|
||||||
_ctrlText ctrlSetStructuredText _text;
|
if !([_in, _timer] in rmx_var_dtMessageArr) then //spam protection
|
||||||
_ctrlText ctrlSetPosition [0, 0, _width * _input /2, _height * 2];
|
{
|
||||||
_ctrlText ctrlCommit 0;
|
rmx_var_dtMessageArr pushBack [_in, _timer];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rmx_var_dtEnabled = true;
|
||||||
|
rmx_var_dtMessageArr pushBack [_in, _timer];
|
||||||
|
|
||||||
|
[GUI_GRID_W, GUI_GRID_H] spawn {
|
||||||
_add = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]];
|
params ["_gridW","_gridH"];
|
||||||
_add pushBack _ctrlGroup;
|
|
||||||
uiNamespace setVariable ["rmx_var_dynamicTextCTRL",_add];
|
|
||||||
|
|
||||||
[_time,_ctrlGroup,_ctrlText,_controls] spawn {
|
|
||||||
disableSerialization;
|
disableSerialization;
|
||||||
params ["_time","_ctrlGroup","_ctrlText","_controls"];
|
|
||||||
|
|
||||||
_tick = diag_tickTime;
|
_dsp = findDisplay 46;
|
||||||
while {(diag_tickTime - _tick) < _time} do {
|
|
||||||
|
_c = _dsp ctrlCreate ["rmx_ST2", -8777];
|
||||||
|
_c2 = _dsp ctrlCreate ["RscText", -8776];
|
||||||
|
_c3 = _dsp ctrlCreate ["RscText", -8775];
|
||||||
|
|
||||||
|
_clr = call rmx_fnc_getColorScheme;
|
||||||
|
|
||||||
|
_c ctrlSetBackgroundColor [_clr select 0, _clr select 1, _clr select 2, 0.5];
|
||||||
|
_c2 ctrlSetBackgroundColor _clr;
|
||||||
|
_c3 ctrlSetBackgroundColor _clr;
|
||||||
|
|
||||||
|
//first animation
|
||||||
|
_width = 0.2 * _gridW;
|
||||||
|
_height = 2 * _gridH;
|
||||||
|
|
||||||
|
_c ctrlSetPosition [0.5 - _gridW / 2,1,_gridW,_height];
|
||||||
|
_c2 ctrlSetPosition[0.5 - _gridW / 2,1,_width,_height];
|
||||||
|
_c3 ctrlSetPosition[0.5 + _gridW / 2,1,_width,_height];
|
||||||
|
_c ctrlCommit 0;
|
||||||
|
_c2 ctrlCommit 0;
|
||||||
|
_c3 ctrlCommit 0;
|
||||||
|
|
||||||
|
_cmt = 0.25;
|
||||||
|
|
||||||
|
//Main queue
|
||||||
|
while {!(rmx_var_dtMessageArr isEqualTo [])} do
|
||||||
|
{
|
||||||
|
|
||||||
|
_in = rmx_var_dtMessageArr select 0 select 0;
|
||||||
|
_timer = rmx_var_dtMessageArr select 0 select 1;
|
||||||
|
rmx_var_dtMessageArr deleteAt 0;
|
||||||
|
|
||||||
|
_c ctrlSetStructuredText (parseText _in);
|
||||||
|
|
||||||
|
_cnt = 0;
|
||||||
|
|
||||||
{
|
{
|
||||||
_x ctrlSetFade 1-(random 0.2);
|
_ct = if (_x in [65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90]) then {0.8} else {0.3};
|
||||||
[_x, 1-(random 0.2), (random 1)] call BIS_fnc_ctrlSetScale;
|
_cnt = _cnt +_ct;
|
||||||
} forEach _controls;
|
} count (toArray _in);
|
||||||
uiSleep 0.5;
|
|
||||||
};
|
|
||||||
_arr = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]];
|
|
||||||
_del =
|
|
||||||
{
|
|
||||||
if (str _x isEqualTo str _ctrlGroup) exitWith {_forEachIndex};
|
|
||||||
0
|
|
||||||
} forEach _arr;
|
|
||||||
|
|
||||||
_arr deleteAt _del;
|
_w2 = ((_cnt max 5) min 80) * _gridW;
|
||||||
uiNamespace setVariable ["rmx_var_dynamicTextCTRL",_arr];
|
|
||||||
uiSleep 0.01;
|
|
||||||
{
|
|
||||||
_x call Epoch_getIDC;
|
|
||||||
ctrlDelete _x;
|
|
||||||
} forEach (_controls + [_ctrlText] + [_ctrlGroup]);
|
|
||||||
};
|
|
||||||
|
|
||||||
if !(_alreadyEnabled) then {
|
_c ctrlSetPosition [0.5 - _w2 / 2,1,_w2,_height];
|
||||||
uiNamespace setVariable ["rmx_var_dynamicText",true];
|
_c2 ctrlSetPosition[0.5 - _w2 / 2,1,_width,_height];
|
||||||
[ctrlPosition _ctrlGroup] spawn {
|
_c3 ctrlSetPosition[0.5 + _w2 / 2,1,_width,_height];
|
||||||
disableSerialization;
|
|
||||||
params ["_defaultPos"];
|
_c ctrlCommit _cmt;
|
||||||
_yPos = _defaultPos param [1];
|
_c2 ctrlCommit _cmt;
|
||||||
_height = _defaultPos param [3];
|
_c3 ctrlCommit _cmt;
|
||||||
while {uiNamespace getVariable ["rmx_var_dynamicText",false]} do {
|
|
||||||
_arr = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]];
|
uiSleep _timer;
|
||||||
if (_arr isEqualTo []) exitWith {uiNamespace setVariable ["rmx_var_dynamicText",nil];};
|
|
||||||
{
|
|
||||||
_xPos = (ctrlPosition _x) select 0;
|
|
||||||
_x ctrlSetPosition [_xPos,_yPos + _height * _forEachIndex];
|
|
||||||
_x ctrlCommit 0;
|
|
||||||
} forEach _arr;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//exit with animation
|
||||||
|
_c ctrlSetPosition [0.5 - _gridW / 2,1,_gridW,_height];
|
||||||
|
_c2 ctrlSetPosition[0.5 - _gridW / 2,1,_width,_height];
|
||||||
|
_c3 ctrlSetPosition[0.5 + _gridW / 2,1,_width,_height];
|
||||||
|
_c ctrlCommit _cmt;
|
||||||
|
_c2 ctrlCommit _cmt;
|
||||||
|
_c3 ctrlCommit _cmt;
|
||||||
|
|
||||||
|
uiSleep _cmt;
|
||||||
|
|
||||||
|
ctrlDelete _c;
|
||||||
|
ctrlDelete _c2;
|
||||||
|
ctrlDelete _c3;
|
||||||
|
|
||||||
|
rmx_var_dtEnabled = nil;
|
||||||
};
|
};
|
||||||
true
|
|
||||||
|
112
Sources/epoch_code/gui/scripts/trashcan/Epoch_dynamicTextold.sqf
Normal file
112
Sources/epoch_code/gui/scripts/trashcan/Epoch_dynamicTextold.sqf
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
|
Contributors: Aaron Clark
|
||||||
|
|
||||||
|
Description:
|
||||||
|
Displays custom text message to player
|
||||||
|
|
||||||
|
Licence:
|
||||||
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
|
Github:
|
||||||
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
"TEST" call Epoch_dynamicText
|
||||||
|
*/
|
||||||
|
#include "\A3\ui_f\hpp\defineCommonGrids.inc"
|
||||||
|
private ["_y","_cnt","_ctrl","_alreadyEnabled","_input","_scale","_width","_height","_centerX","_centerY","_display","_ctrlGroup","_controls","_ctrlText","_add"];
|
||||||
|
params [["_text","Missing text",["",(text "")]],["_time",5,[1]],["_color","#ffffff",[""]]];
|
||||||
|
|
||||||
|
if (_text isEqualType "STRING") then {_text = parseText _text};
|
||||||
|
|
||||||
|
_alreadyEnabled = uiNamespace getVariable ["rmx_var_dynamicText",false];
|
||||||
|
|
||||||
|
_input = count str _text * 2;
|
||||||
|
_scale = 1;
|
||||||
|
_width = _scale * GUI_GRID_W;
|
||||||
|
_height = _scale * GUI_GRID_H;
|
||||||
|
_centerX = 0.5;
|
||||||
|
_centerY = -18 * GUI_GRID_H + GUI_GRID_Y;
|
||||||
|
|
||||||
|
disableSerialization;
|
||||||
|
_display = findDisplay 46;
|
||||||
|
|
||||||
|
_ctrlGroup = _display ctrlCreate ["RscControlsGroupNoScrollbars", call Epoch_getIDC];
|
||||||
|
_ctrlGroup ctrlSetPosition [_centerX - _width/2 * _input / 2, _centerY - _height, _width * _input, _height * 2];
|
||||||
|
_ctrlGroup ctrlCommit 0;
|
||||||
|
|
||||||
|
_y = 0;
|
||||||
|
_cnt = -1;
|
||||||
|
_controls = [];
|
||||||
|
for "_i" from 0 to (_input - 1) do {
|
||||||
|
_ctrl = _display ctrlCreate ["RscPicture", call Epoch_getIDC,_ctrlGroup];
|
||||||
|
_cnt = _cnt + 1;
|
||||||
|
if (_cnt == (_input / 2)) then {_y = _height; _cnt = 0;};
|
||||||
|
_ctrl ctrlSetPosition [_cnt * _width,_y,_width,_height];
|
||||||
|
_ctrl ctrlSetText "#(rgb,8,8,3)color(1,1,1,1)";
|
||||||
|
_ctrl ctrlCommit 0;
|
||||||
|
_ctrl ctrlSetFade 1-(random 0.2);
|
||||||
|
[_ctrl, 1-(random 0.2),0] call BIS_fnc_ctrlSetScale;
|
||||||
|
|
||||||
|
_controls set [_i, _ctrl];
|
||||||
|
};
|
||||||
|
|
||||||
|
_ctrlText = _display ctrlCreate ["rmx_ST1", call Epoch_getIDC,_ctrlGroup];
|
||||||
|
_ctrlText ctrlSetStructuredText _text;
|
||||||
|
_ctrlText ctrlSetPosition [0, 0, _width * _input /2, _height * 2];
|
||||||
|
_ctrlText ctrlCommit 0;
|
||||||
|
|
||||||
|
|
||||||
|
_add = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]];
|
||||||
|
_add pushBack _ctrlGroup;
|
||||||
|
uiNamespace setVariable ["rmx_var_dynamicTextCTRL",_add];
|
||||||
|
|
||||||
|
[_time,_ctrlGroup,_ctrlText,_controls] spawn {
|
||||||
|
disableSerialization;
|
||||||
|
params ["_time","_ctrlGroup","_ctrlText","_controls"];
|
||||||
|
|
||||||
|
_tick = diag_tickTime;
|
||||||
|
while {(diag_tickTime - _tick) < _time} do {
|
||||||
|
{
|
||||||
|
_x ctrlSetFade 1-(random 0.2);
|
||||||
|
[_x, 1-(random 0.2), (random 1)] call BIS_fnc_ctrlSetScale;
|
||||||
|
} forEach _controls;
|
||||||
|
uiSleep 0.5;
|
||||||
|
};
|
||||||
|
_arr = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]];
|
||||||
|
_del =
|
||||||
|
{
|
||||||
|
if (str _x isEqualTo str _ctrlGroup) exitWith {_forEachIndex};
|
||||||
|
0
|
||||||
|
} forEach _arr;
|
||||||
|
|
||||||
|
_arr deleteAt _del;
|
||||||
|
uiNamespace setVariable ["rmx_var_dynamicTextCTRL",_arr];
|
||||||
|
uiSleep 0.01;
|
||||||
|
{
|
||||||
|
_x call Epoch_getIDC;
|
||||||
|
ctrlDelete _x;
|
||||||
|
} forEach (_controls + [_ctrlText] + [_ctrlGroup]);
|
||||||
|
};
|
||||||
|
|
||||||
|
if !(_alreadyEnabled) then {
|
||||||
|
uiNamespace setVariable ["rmx_var_dynamicText",true];
|
||||||
|
[ctrlPosition _ctrlGroup] spawn {
|
||||||
|
disableSerialization;
|
||||||
|
params ["_defaultPos"];
|
||||||
|
_yPos = _defaultPos param [1];
|
||||||
|
_height = _defaultPos param [3];
|
||||||
|
while {uiNamespace getVariable ["rmx_var_dynamicText",false]} do {
|
||||||
|
_arr = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]];
|
||||||
|
if (_arr isEqualTo []) exitWith {uiNamespace setVariable ["rmx_var_dynamicText",nil];};
|
||||||
|
{
|
||||||
|
_xPos = (ctrlPosition _x) select 0;
|
||||||
|
_x ctrlSetPosition [_xPos,_yPos + _height * _forEachIndex];
|
||||||
|
_x ctrlCommit 0;
|
||||||
|
} forEach _arr;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
true
|
Loading…
Reference in New Issue
Block a user