bump version to 0.4

* Adds experimental test of new HUD from @raymix
* Hud elements are added and removed dynamically so that all active
icons are always right justified.
* Icons scale in size when critical levels are reached.
* added use of new A3 features to control angle and scale of hud icons.
* warning and critical levels are controlled via customVarsDefaults.

* Added larger group sizes up to 64 players and increased Krypto costs.
* reworked Finsh login in login fsm to wait for display 46 not to be
Null.
This commit is contained in:
vbawol 2016-08-08 14:45:39 -05:00
parent 9d8734acdc
commit 810fe5d65c
67 changed files with 246 additions and 88 deletions

1
Changelogs/0.4.0.0.txt Normal file
View File

@ -0,0 +1 @@
TBA

View File

@ -1,8 +1,8 @@
/*%FSM<COMPILE "D:\SteamLibrary\steamapps\common\Arma 3 Tools\FSMEditor\scriptedFSM.cfg, Epoch Login">*/ /*%FSM<COMPILE "F:\Program Files (x86)\Steam\steamapps\common\Arma 3 Tools\FSMEditor\scriptedFSM.cfg, Epoch Login">*/
/*%FSM<HEAD>*/ /*%FSM<HEAD>*/
/* /*
item0[] = {"INIT",0,250,-25.000000,-375.000000,75.000000,-325.000000,0.000000,"INIT"}; item0[] = {"INIT",0,250,-25.000000,-375.000000,75.000000,-325.000000,0.000000,"INIT"};
item1[] = {"FINISH",1,4346,-25.000000,1475.000000,75.000000,1525.000000,0.000000,"FINISH"}; item1[] = {"FINISH",1,4346,-149.463196,1518.792480,-49.463196,1568.792480,0.000000,"FINISH"};
item2[] = {"true",8,218,-150.000000,-125.000000,-50.000000,-75.000000,0.000000,"true"}; item2[] = {"true",8,218,-150.000000,-125.000000,-50.000000,-75.000000,0.000000,"true"};
item3[] = {"Version_Check",2,250,-25.000000,-75.000000,75.000000,-25.000000,0.000000,"Version Check"}; item3[] = {"Version_Check",2,250,-25.000000,-75.000000,75.000000,-25.000000,0.000000,"Version Check"};
item4[] = {"Player_Object_Re",4,218,-150.000000,75.000000,-50.000000,125.000000,0.000000,"Player" \n "Object Ready"}; item4[] = {"Player_Object_Re",4,218,-150.000000,75.000000,-50.000000,125.000000,0.000000,"Player" \n "Object Ready"};
@ -183,8 +183,8 @@ link93[] = {82,76};
link94[] = {83,16}; link94[] = {83,16};
link95[] = {83,22}; link95[] = {83,22};
link96[] = {84,31}; link96[] = {84,31};
globals[] = {0.000000,0,0,0,0,640,480,1,247,6316128,1,-534.004700,883.834412,1895.573975,986.017029,1287,884,1}; globals[] = {0.000000,0,0,0,0,640,480,1,247,6316128,1,-566.678223,916.507324,1906.129761,921.949097,1287,854,1};
window[] = {2,-1,-1,-32000,-32000,1149,2931,3915,382,3,1305}; window[] = {2,-1,-1,-1,-1,923,-1524,-540,156,3,1305};
*//*%FSM</HEAD>*/ *//*%FSM</HEAD>*/
class FSM class FSM
{ {
@ -236,35 +236,34 @@ class FSM
{ {
name = "FINISH"; name = "FINISH";
itemno = 1; itemno = 1;
init = /*%FSM<STATEINIT""">*/"[] spawn {" \n init = /*%FSM<STATEINIT""">*/"// setup display EH's" \n
" disableSerialization;" \n "{" \n
" waitUntil{!isNull (findDisplay 46)};" \n " (findDisplay 46) displayAddEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)];" \n
" _display = findDisplay 46;" \n "} forEach ([""CfgEpochClient"", ""displayAddEventHandler"", []] call EPOCH_fnc_returnConfigEntryV2);" \n
" {" \n
" _display displayAddEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)];" \n
" } forEach ([""CfgEpochClient"", ""displayAddEventHandler"", []] call EPOCH_fnc_returnConfigEntryV2);" \n
" call epoch_dynamicHUD_start; " \n
" player switchMove """";" \n
"};" \n
"" \n "" \n
"3 fadeSound 1;" \n "// reset anim state" \n
"player switchMove """";" \n
"" \n "" \n
"if (_debug) then {" \n "// setup Epoch Hud" \n
" diag_log ""EPOCH-LOGIN: Finish!"";" \n "call epoch_dynamicHUD_start;" \n
"};" \n "[] spawn EPOCH_masterLoop;" \n
"" \n "" \n
"EPOCH_loginFSM = nil;" \n "EPOCH_loginFSM = nil;" \n
"EPOCH_playerLoginInit = nil;" \n "EPOCH_playerLoginInit = nil;" \n
"" \n "" \n
"//player enableSimulation true;" \n "// fade in sound and screen" \n
"" \n "3 fadeSound 1;" \n
"titleCut ["""", ""BLACK IN"", 1];" \n "titleCut ["""", ""BLACK IN"", 1];" \n
"1338 cutText ["""",""PLAIN"",0]; " \n "1338 cutText ["""",""PLAIN"",0]; " \n
"" \n "" \n
"progressLoadingScreen 1.0;" \n "progressLoadingScreen 1.0;" \n
"" \n
"endLoadingScreen;" \n "endLoadingScreen;" \n
"EPOCH_loadingScreenDone = true;"/*%FSM</STATEINIT""">*/; "EPOCH_loadingScreenDone = true;" \n
"" \n
"if (_debug) then {" \n
" diag_log ""EPOCH-LOGIN: Finish!"";" \n
"};" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links class Links
{ {
@ -911,7 +910,6 @@ class FSM
" }forEach EPOCH_playerHitPoints;" \n " }forEach EPOCH_playerHitPoints;" \n
"};" \n "};" \n
"" \n "" \n
"[] spawn EPOCH_masterLoop;" \n
"true call EPOCH_fnc_Weather;" \n "true call EPOCH_fnc_Weather;" \n
"[5,100] spawn EPOCH_niteLight;" \n "[5,100] spawn EPOCH_niteLight;" \n
"" \n "" \n
@ -965,7 +963,7 @@ class FSM
priority = 0.000000; priority = 0.000000;
to="FINISH"; to="FINISH";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"preloadCamera _playerPos"/*%FSM</CONDITION""">*/; condition=/*%FSM<CONDITION""">*/"!(isNull (findDisplay 46)) && {preloadCamera _playerPos}"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"call compile _extraPayload;"/*%FSM</ACTION""">*/; action=/*%FSM<ACTION""">*/"call compile _extraPayload;"/*%FSM</ACTION""">*/;
}; };
/*%FSM</LINK>*/ /*%FSM</LINK>*/

View File

@ -81,39 +81,133 @@ _hungry = EPOCH_playerHunger <= 0;
_thirsty = EPOCH_playerThirst <= 0; _thirsty = EPOCH_playerThirst <= 0;
_warnbloodPressure = EPOCH_playerBloodP > 120; _warnbloodPressure = EPOCH_playerBloodP > 120;
_thirst ctrlShow (EPOCH_playerThirst <= 625); //_thirst ctrlShow (EPOCH_playerThirst <= 625);
if (ctrlShown _thirst) then { /*
[_thirst,_thirsty] call _fadeUI; if (EPOCH_playerThirst <= 625) then {
_thirst = ["topRight",_hudIndex] call epoch_getHUDCtrl;
_hudIndex = _hudIndex + 1;
_thirst ctrlSetText "x\addons\a3_epoch_code\Data\UI\thirst_ca.paa";
[_thirst,_thirsty] call _scaleUI;
_color = [2500,0,EPOCH_playerThirst,1] call EPOCH_colorRange; _color = [2500,0,EPOCH_playerThirst,1] call EPOCH_colorRange;
_thirst ctrlSetTextColor _color; _thirst ctrlSetTextColor _color;
}; };
_hunger ctrlShow (EPOCH_playerHunger <= 1250); if (EPOCH_playerHunger <= 1250) then {
if (ctrlShown _hunger) then { _hunger = ["topRight",_hudIndex] call epoch_getHUDCtrl;
[_hunger,_hungry] call _fadeUI; _hudIndex = _hudIndex + 1;
_hunger ctrlSetText "x\addons\a3_epoch_code\Data\UI\hunger_ca.paa";
[_hunger,_hungry] call _scaleUI;
_color = [5000,0,EPOCH_playerHunger,1] call EPOCH_colorRange; _color = [5000,0,EPOCH_playerHunger,1] call EPOCH_colorRange;
_hunger ctrlSetTextColor _color; _hunger ctrlSetTextColor _color;
}; };
*/
_playerOxygen = getOxygenRemaining player; _playerOxygen = getOxygenRemaining player;
_oxygen ctrlShow (_playerOxygen < 1); //_oxygen ctrlShow (_playerOxygen < 1);
if (ctrlShown _oxygen) then { if (_playerOxygen < 1) then {
[_oxygen,(_playerOxygen <= 0.55)] call _fadeUI; _hudIndex = missionNamespace getVariable [format["EPOCH_dynHUD_%1","topRight"],1];
_oxygen = ["topRight",_hudIndex] call epoch_getHUDCtrl;
missionNamespace setVariable [format["EPOCH_dynHUD_%1","topRight"], _hudIndex + 1];
_oxygen ctrlSetText "x\addons\a3_epoch_code\Data\UI\oxygen_ca.paa";
[_oxygen,(_playerOxygen <= 0.55)] call _scaleUI;
_color = [0,1,_playerOxygen,1] call EPOCH_colorRange; _color = [0,1,_playerOxygen,1] call EPOCH_colorRange;
_oxygen ctrlSetTextColor _color; _oxygen ctrlSetTextColor _color;
}; };
_hazzard ctrlShow (EPOCH_playerToxicity > 35); // dynamic start (greater than)
if (ctrlShown _hazzard) then { {
[_hazzard,(EPOCH_playerToxicity >= 55)] call _fadeUI; _x params [["_selVarName",""],["_HUDclass","topRight"],["_ctrlText",""]];
_color = [0,100,EPOCH_playerToxicity,1] call EPOCH_colorRange; _varIndex = EPOCH_customVars find _selVarName;
_hazzard ctrlSetTextColor _color; if (_varIndex != -1) then {
}; _currentVarVal = missionNamespace getVariable[format['EPOCH_player%1', _selVarName],EPOCH_defaultVars select _varIndex];
(EPOCH_customVarLimits select _varIndex) params [["_playerLimitMax",100],["_playerLimitMin",0],["_playerWarnLimit",25],["_playerCriticalLimit",75],["_playerWarnLow",0],["_playerCriticalLow",0]];
if (_playerLimitMax isEqualType "") then {
_playerLimitMax = missionNamespace getVariable [_playerLimitMax, 0];
};
if (_playerLimitMin isEqualType "") then {
_playerLimitMin = missionNamespace getVariable [_playerLimitMin, 0];
};
_warnLow = _currentVarVal < _playerWarnLow;
_warnHigh = _currentVarVal > _playerWarnLimit;
_criticalLow = _currentVarVal <= _playerCriticalLow;
_criticalHigh = _currentVarVal >= _playerCriticalLimit;
if (_warnHigh || _warnLow) then {
_hudIndex = missionNamespace getVariable [format["EPOCH_dynHUD_%1",_HUDclass],1];
_curCtrl = [_HUDclass,_hudIndex] call epoch_getHUDCtrl;
missionNamespace setVariable [format["EPOCH_dynHUD_%1",_HUDclass], _hudIndex + 1];
if (_ctrlText isEqualType []) then {
_ctrlText = if (_warnHigh) then {_ctrlText select 0} else {_ctrlText select 1};
};
_curCtrl ctrlSetText _ctrlText;
_critical = (_criticalHigh || _criticalLow);
[_curCtrl,_critical] call _scaleUI;
_color = [_playerLimitMin,_playerLimitMax,_currentVarVal,1] call EPOCH_colorRange;
_curCtrl ctrlSetTextColor _color;
};
};
} forEach
[
[
'Temp',
"topRight",
[
"x\addons\a3_epoch_code\Data\UI\hot_ca.paa",
"x\addons\a3_epoch_code\Data\UI\cold_ca.paa"
]
],
[
'Hunger',
"topRight",
"x\addons\a3_epoch_code\Data\UI\hunger_ca.paa"
],
[
'Thirst',
"topRight",
"x\addons\a3_epoch_code\Data\UI\thirst_ca.paa"
],
[ 'Toxicity',
"topRight",
"x\addons\a3_epoch_code\Data\UI\hazzard_ca.paa"
],
[
'Wet',
"topRight",
"x\addons\a3_epoch_code\Data\UI\wet_ca.paa"
],
[
'BloodP',
"topRight",
"x\addons\a3_epoch_code\Data\UI\bleeding_ca.paa"
],
[
'Alcohol',
"topRight",
"x\addons\a3_epoch_code\Data\UI\drunk_ca.paa"
],
[
'Soiled',
"topRight",
"x\addons\a3_epoch_code\Data\UI\soiled_ca.paa"
],
[
'Radiation',
"topRight",
"x\addons\a3_epoch_code\Data\UI\rads_ca.paa"
]
];
// dynamic end
_legDamage = player getHitPointDamage "HitLegs"; _legDamage = player getHitPointDamage "HitLegs";
_broken ctrlShow (_legDamage >= 0.5); // _broken ctrlShow (_legDamage >= 0.5);
if (ctrlShown _broken) then { if (_legDamage >= 0.5) then {
[_broken,true] call _fadeUI; _hudIndex = missionNamespace getVariable [format["EPOCH_dynHUD_%1","topRight"],1];
_broken = ["topRight",_hudIndex] call epoch_getHUDCtrl;
missionNamespace setVariable [format["EPOCH_dynHUD_%1","topRight"], _hudIndex + 1];
_broken ctrlSetText "x\addons\a3_epoch_code\Data\UI\broken_ca.paa";
[_broken,true] call _scaleUI;
_color = [1,0,_legDamage,1] call EPOCH_colorRange; _color = [1,0,_legDamage,1] call EPOCH_colorRange;
_broken ctrlSetTextColor _color; _broken ctrlSetTextColor _color;
}; };
@ -136,9 +230,13 @@ if (_envCold || _envHot || _hungry || _thirsty) then {
}; };
_critical = (damage player >= 0.7 || _warnbloodPressure); _critical = (damage player >= 0.7 || _warnbloodPressure);
_emergency ctrlShow _critical; // _emergency ctrlShow _critical;
if (ctrlShown _emergency) then { if (_critical) then {
[_emergency,(EPOCH_playerBloodP > 140)] call _fadeUI; _hudIndex = missionNamespace getVariable [format["EPOCH_dynHUD_%1","topRight"],1];
_emergency = ["topRight",_hudIndex] call epoch_getHUDCtrl;
missionNamespace setVariable [format["EPOCH_dynHUD_%1","topRight"], _hudIndex + 1];
_emergency ctrlSetText "x\addons\a3_epoch_code\Data\UI\bleeding_ca.paa";
[_emergency,(EPOCH_playerBloodP > 140)] call _scaleUI;
_color = [180,100,EPOCH_playerBloodP,1] call EPOCH_colorRange; _color = [180,100,EPOCH_playerBloodP,1] call EPOCH_colorRange;
_emergency ctrlSetTextColor _color; _emergency ctrlSetTextColor _color;
}; };
@ -154,3 +252,12 @@ if (EPOCH_debugMode) then {
}; };
call EPOCH_TradeLoop; call EPOCH_TradeLoop;
// blank out unused hud elements
_hudIndex = missionNamespace getVariable [format["EPOCH_dynHUD_%1","topRight"],1];
for "_i" from _hudIndex to 9 do {
_c = ["topRight",_i] call epoch_getHUDCtrl;
_c ctrlSetText "";
};
missionNamespace setVariable [format["EPOCH_dynHUD_%1","topRight"], nil];

View File

@ -22,20 +22,33 @@ if (count EPOCH_playerSpawnArray != count EPOCH_spawnIndex) then{
{ EPOCH_playerSpawnArray pushBack 0 } forEach EPOCH_spawnIndex; { EPOCH_playerSpawnArray pushBack 0 } forEach EPOCH_spawnIndex;
}; };
9990 cutRsc ["EpochGameUI","PLAIN",2,false]; //9990 cutRsc ["EpochGameUI","PLAIN",2,false];
_display = uiNamespace getVariable "EPOCH_EpochGameUI"; //_display = uiNamespace getVariable "EPOCH_EpochGameUI";
/*
EPOCH_fnc_makeCtrl = {
params [["_picture",""],["_HUDclass","topRight"]];
private _index = missionNamespace getvariable ["EPOCH_dynamicCtrlIndex",1];
private _ctrl = [_HUDclass,_index] call epoch_getHUDCtrl;
_ctrl ctrlSetText _picture;
missionNamespace setvariable ["EPOCH_dynamicCtrlIndex",_index + 1];
_ctrl
};
_thirst = _display displayCtrl 21201; _thirst = ["x\addons\a3_epoch_code\Data\UI\thirst_ca.paa"] call EPOCH_fnc_makeCtrl;
_hunger = _display displayCtrl 21202; _hunger = ["x\addons\a3_epoch_code\Data\UI\hunger_ca.paa"] call EPOCH_fnc_makeCtrl;
_broken = _display displayCtrl 21203; _broken = ["x\addons\a3_epoch_code\Data\UI\broken_ca.paa"] call EPOCH_fnc_makeCtrl;
_oxygen = _display displayCtrl 21204; _oxygen = ["x\addons\a3_epoch_code\Data\UI\oxygen_ca.paa"] call EPOCH_fnc_makeCtrl;
_hazzard = _display displayCtrl 21205; _hazzard = ["x\addons\a3_epoch_code\Data\UI\hazzard_ca.paa"] call EPOCH_fnc_makeCtrl;
_emergency = _display displayCtrl 21206; _emergency = ["x\addons\a3_epoch_code\Data\UI\bleeding_ca.paa"] call EPOCH_fnc_makeCtrl;
diag_log format ["init HUD: %1 %2 %3 %4 %5 %6", _thirst,_hunger,_broken,_oxygen,_hazzard,_emergency];
{ {
_x ctrlShow false; _x ctrlShow false;
}forEach[_thirst,_hunger,_broken,_oxygen,_hazzard,_emergency]; }forEach[_thirst,_hunger,_broken,_oxygen,_hazzard,_emergency];
*/
// find radio // find radio
{ {
if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) == "ItemRadio") exitWith{ if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) == "ItemRadio") exitWith{
@ -97,6 +110,26 @@ _fadeUI = {
}; };
_bool _bool
}; };
_scaleUI = {
params ["_ctrl","_bool"];
private _oemScale = _ctrl getVariable ["ctrl_scale", 1];
private _curScale = ctrlScale _ctrl;
if (_bool) then {
if (_curScale isEqualTo _oemScale) then {
_ctrl ctrlSetScale (_oemScale - 0.1);
_ctrl ctrlCommit 0.5;
} else {
_ctrl ctrlSetScale _oemScale;
_ctrl ctrlCommit 0.5;
};
} else {
if !(_curScale isEqualTo _oemScale) then {
_ctrl ctrlSetScale _oemScale;
_ctrl ctrlCommit 0.5;
};
};
_bool
};
_cursorTarget = objNull; _cursorTarget = objNull;

View File

@ -13,22 +13,21 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamicHUD/Epoch_dynamicHUD_start.sqf https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamicHUD/Epoch_dynamicHUD_start.sqf
*/ */
#include "\A3\ui_f\hpp\defineCommonGrids.inc" #include "\A3\ui_f\hpp\defineCommonGrids.inc"
_cfg = "rmx_dynamicHUD" call EPOCH_returnConfig; _cfg = "rmx_dynamicHUD" call EPOCH_returnConfig;
_configs = "true" configClasses _cfg; _configs = "true" configClasses _cfg;
diag_log format ["Epoch_dynamicHUD_start: %1", _configs];
setMousePosition [0.5,0.5]; setMousePosition [0.5,0.5];
disableSerialization; disableSerialization;
_dsp = findDisplay 46; _dsp = findDisplay 46;
rmx_var_dynamicHUD_groups = [];
rmx_var_dynamicHUD_groupCTRL = [];
{ {
_group = _dsp ctrlCreate ["rscControlsGroup", call Epoch_getIDC]; _group = _dsp ctrlCreate ["rscControlsGroup", call Epoch_getIDC];
rmx_var_dynamicHUD_groups set [_forEachIndex, _group]; rmx_var_dynamicHUD_groups set [_forEachIndex, _group];
_defaultPopulate = getNumber (_x >> "defaultPopulate"); _defaultPopulate = getNumber (_x >> "defaultPopulate");
_defaultPos = getNumber (_x >> "defaultPos"); _defaultPos = getNumber (_x >> "defaultPos");
_arraySize = getNumber (_x >> "arraySize"); _arraySize = getNumber (_x >> "arraySize");
@ -38,6 +37,9 @@ rmx_var_dynamicHUD_groupCTRL = [];
_height = getNumber (_x >> "height"); _height = getNumber (_x >> "height");
_width = getNumber (_x >> "width"); _width = getNumber (_x >> "width");
(getArray (_x >> "angle")) params [["_deg",0],["_xCenter",0.5],["_yCenter",0.5],["_tilt",0]];
(getArray (_x >> "scale")) params [["_scale",1.0],["_reduction",0]];
_wCtrl = _width * GUI_GRID_W; _wCtrl = _width * GUI_GRID_W;
_hCtrl = _height * GUI_GRID_H; _hCtrl = _height * GUI_GRID_H;
_oX = _offsetX * _wCtrl; _oX = _offsetX * _wCtrl;
@ -64,19 +66,27 @@ rmx_var_dynamicHUD_groupCTRL = [];
case 8: {[(safezoneW + safezoneX) - _w, (safezoneH + safezoneY) - _h, _w, _h]}; case 8: {[(safezoneW + safezoneX) - _w, (safezoneH + safezoneY) - _h, _w, _h]};
default {[0,0,0,0]}; default {[0,0,0,0]};
}; };
_groupPos set [0, (_groupPos select 0)+_oX]; _groupPos set [0, (_groupPos select 0)+_oX];
_groupPos set [1, (_groupPos select 1)+_oY]; _groupPos set [1, (_groupPos select 1)+_oY];
_group ctrlSetPosition _groupPos; _group ctrlSetPosition _groupPos;
_group ctrlCommit 0; _group ctrlCommit 0;
_evenOdd = true; _evenOdd = true;
rmx_var_dynamicHUD_groupCTRL set [_forEachIndex, [(configName _x)]]; rmx_var_dynamicHUD_groupCTRL set [_forEachIndex, [(configName _x)]];
_angle = [_deg,_xCenter,_yCenter];
for "_i" from 0 to (_arraySize - 1) do { for "_i" from 0 to (_arraySize - 1) do {
_c = _dsp ctrlCreate [_classname, call Epoch_getIDC, _group]; _c = _dsp ctrlCreate [_classname, call Epoch_getIDC, _group];
_c ctrlSetAngle _angle;
_angle set [0, (_angle select 0) - _tilt];
(rmx_var_dynamicHUD_groupCTRL select _forEachIndex) pushBack _c; (rmx_var_dynamicHUD_groupCTRL select _forEachIndex) pushBack _c;
_cPos = switch _defaultPopulate do { _cPos = switch _defaultPopulate do {
case 0: {[_i * _wCtrl,0,_wCtrl, _hCtrl]}; case 0: {[_i * _wCtrl,0,_wCtrl, _hCtrl]};
case 1: {[(_arraySize - 1 - _i) * _wCtrl,0,_wCtrl, _hCtrl]}; case 1: {[(_arraySize - 1 - _i) * _wCtrl,0,_wCtrl, _hCtrl]};
@ -85,7 +95,7 @@ rmx_var_dynamicHUD_groupCTRL = [];
case 4: case 4:
{ {
_center = _w/2 - _wCtrl/2; _center = _w/2 - _wCtrl/2;
_result = if (_i == 0) then { _result = if (_i == 0) then {
[_center, 0, _wCtrl, _hCtrl] [_center, 0, _wCtrl, _hCtrl]
} else { } else {
@ -101,7 +111,7 @@ rmx_var_dynamicHUD_groupCTRL = [];
case 5: case 5:
{ {
_center = _h/2 - _hCtrl/2; _center = _h/2 - _hCtrl/2;
_result = if (_i == 0) then { _result = if (_i == 0) then {
[0, _center, _wCtrl, _hCtrl] [0, _center, _wCtrl, _hCtrl]
} else { } else {
@ -117,10 +127,13 @@ rmx_var_dynamicHUD_groupCTRL = [];
default {[0,0,0,0]}; default {[0,0,0,0]};
}; };
_c ctrlSetPosition _cPos; _c ctrlSetPosition _cPos;
_c ctrlSetScale _scale;
_c setVariable ["ctrl_scale", _scale];
_scale = _scale - _reduction;
_c ctrlCommit 0; _c ctrlCommit 0;
}; };
} forEach _configs; } forEach _configs;
//dump default positions into an array //dump default positions into an array
true true

View File

@ -55,7 +55,10 @@ EPOCH_arr_interactedObjs = [];
EPOCH_buildOption = 0; EPOCH_buildOption = 0;
EPOCH_nearestLocations = []; EPOCH_nearestLocations = [];
EPOCH_lastFiredLocation = []; EPOCH_lastFiredLocation = [];
rmx_var_drag_MouseDown = false; rmx_var_drag_MouseDown = false;
rmx_var_dynamicHUD_groups = [];
rmx_var_dynamicHUD_groupCTRL = [];
["EPOCH_onEachFrame", "onEachFrame", EPOCH_onEachFrame] call BIS_fnc_addStackedEventHandler; ["EPOCH_onEachFrame", "onEachFrame", EPOCH_onEachFrame] call BIS_fnc_addStackedEventHandler;

View File

@ -21,7 +21,7 @@ defaultPopulate:
offSetX: Positive = right, Negative = left offSetX: Positive = right, Negative = left
offSetY: Positive = down, Negative = up offSetY: Positive = down, Negative = up
Offsets group of controls, unit measurement is width or height of group. The bigger the group the more it will be offset. Offsets group of controls, unit measurement is width or height of group. The bigger the group the more it will be offset.
Offsets are optional, don't have to be included Offsets are optional, don't have to be included
classname: classname:
https://community.bistudio.com/wiki/ctrlCreate/classnames https://community.bistudio.com/wiki/ctrlCreate/classnames
@ -41,11 +41,13 @@ class rmx_dynamicHUD
classname = "RscPicture"; classname = "RscPicture";
defaultPos = 2; defaultPos = 2;
defaultPopulate = 1; defaultPopulate = 1;
arraySize = 8; arraySize = 10;
width = 4; width = 4;
height = 4; height = 4;
offSetX = 0; offSetX = 0;
offSetY = 0; offSetY = 0;
angle[] = {15, 0.5, 0.5, 1.5}; // [start degrees, x, y, tilt]
scale[] = {1, 0.05}; // [start scale, size reduction]
}; };
class botcenter class botcenter
{ {
@ -55,6 +57,7 @@ class rmx_dynamicHUD
arraySize = 9; arraySize = 9;
width = 5; width = 5;
height = 5; height = 5;
//angle[] = {25, 0.5, 0.5};
}; };
}; };

View File

@ -13,7 +13,7 @@
*/ */
class CfgEpochClient class CfgEpochClient
{ {
epochVersion = "0.3.9.0"; epochVersion = "0.4.0.0";
sapperRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = 1% - 55% if soiled (+ 2% if in city) chance to spawn sapper sapperRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = 1% - 55% if soiled (+ 2% if in city) chance to spawn sapper
droneRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = // 2% chance (+ 4% chance if in city) (1% - 2% Half if using silencer) to spawn drone if shot fired droneRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = // 2% chance (+ 4% chance if in city) (1% - 2% Half if using silencer) to spawn drone if shot fired
buildingNearbyMilitary = 0; //1 to allow building nearby Military buildings buildingNearbyMilitary = 0; //1 to allow building nearby Military buildings
@ -36,7 +36,7 @@ class CfgEpochClient
disableRemoteSensors = true; // disableRemoteSensors true disableRemoteSensors = true; // disableRemoteSensors true
EPOCH_news[] = {"Word is that Sappers have a new boss.","Dogs will often lure them monsters away.","My dog was blown up. I miss him.."}; EPOCH_news[] = {"Word is that Sappers have a new boss.","Dogs will often lure them monsters away.","My dog was blown up. I miss him.."};
deathMorphClass[] = {"Epoch_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F"};//Random selection of these classes when player morphs after death. Currently available: Epoch_Cloak_F, Epoch_SapperB_F, Epoch_Sapper_F, I_UAV_01_F deathMorphClass[] = {"Epoch_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F"};//Random selection of these classes when player morphs after death. Currently available: Epoch_Cloak_F, Epoch_SapperB_F, Epoch_Sapper_F, I_UAV_01_F
niteLight[] = {1.88,22};//Set ambient lighting at night: {Brightness of light,Height of light}. Default (Low Ambient): {1.88,22} | Twilight: {7.2,88} | Distant: {12.8,142} niteLight[] = {1, 1.88, 22};//Set ambient lighting at night: {1 = enabled/0 = disabled, Brightness of light,Height of light}. Default (Low Ambient): {1.88,22} | Twilight: {7.2,88} | Distant: {12.8,142}
ryanZombiesEnabled = true; // enabled by default, false to disable ryanZombiesEnabled = true; // enabled by default, false to disable
antagonistSpawnIndex[] = { antagonistSpawnIndex[] = {
{"Epoch_Cloak_F", 1}, // {"type", limit} {"Epoch_Cloak_F", 1}, // {"type", limit}
@ -49,29 +49,29 @@ class CfgEpochClient
{"EPOCH_RyanZombie_1",12} {"EPOCH_RyanZombie_1",12}
}; };
customVarsDefaults[] = { customVarsDefaults[] = {
// EPOCH_player + varName, default value, {max,min} // EPOCH_player + varName, default value, {max,min,warn-high,critical-high,warn-low,critical-low}
{"Temp",98.6,{106.7,95}}, {"Temp",98.6,{106.7,95,102,105,96,95}},
{"Hunger",5000,{5000,0}}, {"Hunger",5000,{5000,0,5001,5001,1250,0}},
{"Thirst",2500,{2500,0}}, {"Thirst",2500,{2500,0,2501,2501,625,0}},
{"AliveTime",0,{-2,0}}, {"AliveTime",0,{-2,0}},
{"Energy",0,{2500,0}}, {"Energy",0,{2500,0}},
{"Wet",0,{100,0}}, {"Wet",0,{100,0,35,55,-1,-1}},
{"Soiled",0,{100,0}}, {"Soiled",0,{100,0,35,55,-1,-1}},
{"Immunity",0,{100,0}}, {"Immunity",0,{100,0}},
{"Toxicity",0,{100,0}}, {"Toxicity",0,{100,0,35,55,-1,-1}},
{"Stamina",100,{"EPOCH_playerStaminaMax",0}}, {"Stamina",100,{"EPOCH_playerStaminaMax",0}},
{"Crypto",0,{250000,0}}, {"Crypto",0,{250000,0}},
{"HitPoints",{0,0,0,0},{1,1,1,1}}, {"HitPoints",{0,0,0,0},{1,1,1,1}},
{"BloodP",100,{190,0}}, {"BloodP",100,{190,0,120,140,99,0}},
{"SpawnArray",{},{}}, {"SpawnArray",{},{}},
{"Karma",0,{50000,-50000}}, {"Karma",0,{50000,-50000}},
{"Alcohol",0,{100,0}}, {"Alcohol",0,{100,0,35,55,-1,-1}},
{"Radiation",0,{100,0}}, {"Radiation",0,{100,0,35,55,-1,-1}},
{"Nuisance",0,{100,0}}, {"Nuisance",0,{100,0}},
{"MissionArray",{},{}} {"MissionArray",{},{}}
}; };
// controls max group limit and cost // controls max group limit and cost
group_upgrade_lvl[] = {4,"100",6,"300",8,"500",10,"1000",12,"1500",13,"1750",14,"2000",15,"3000",16,"5000"}; group_upgrade_lvl[] = {4,"1000",6,"1500",8,"2000",10,"2500",12,"3000",14,"3500",16,"4000",32,"8000",64,"16000"};
// Event handler code // Event handler code
displayAddEventHandler[] = {"keyDown","keyUp"}; displayAddEventHandler[] = {"keyDown","keyUp"};

View File

@ -1 +1 @@
build=570; build=582;

View File

@ -1 +1 @@
build=570; build=582;

View File

@ -145,7 +145,7 @@ class CfgServerFunctions
}; };
class CfgServerVersion class CfgServerVersion
{ {
client = "0.3.9.0"; client = "0.4.0.0";
config = "0.3.9.0"; config = "0.4.0.0";
hive = "0.5.1.7"; hive = "0.5.1.7";
}; };

Binary file not shown.

View File

@ -1 +1 @@
build=570; build=582;

View File

@ -1 +1 @@
build=570; build=582;

View File

@ -20,7 +20,7 @@ class CfgPatches {
units[] = {}; units[] = {};
weapons[] = {}; weapons[] = {};
requiredVersion = 0.1; requiredVersion = 0.1;
epochVersion = "0.3.9.0"; epochVersion = "0.4.0.0";
requiredAddons[] = {}; requiredAddons[] = {};
#include "build.hpp" #include "build.hpp"
}; };

View File

@ -1 +1 @@
570 582