Merge pull request #2056 from worldwidesorrow/master

Archive unused utility functions
This commit is contained in:
worldwidesorrow
2020-01-21 12:08:00 -06:00
committed by GitHub
23 changed files with 121 additions and 259 deletions

View File

@@ -1,20 +1,13 @@
#include "\z\addons\dayz_code\util\mutex.hpp"
#include "\z\addons\dayz_code\util\player.hpp"
#define BANDAID
#define TIMEOUT 2
#define IS_PRIMARY(wpn) (getNumber (configFile >> "CfgWeapons" >> wpn >> "type") == 1)
#define MELEE(wpn) getNumber (configFile >> "CfgWeapons" >> wpn >> "melee")
#define IS_MELEE(wpn) (MELEE(wpn) == 1)
//0 if not found, 1 if in primary slot, 2 if on back
#define FIND_RIFLE() (0 call dz_fn_switchWeapon_find)
#define FIND_MELEE() (1 call dz_fn_switchWeapon_find)
#define FIND_RIFLE (0 call dz_fn_switchWeapon_find)
#define FIND_MELEE (1 call dz_fn_switchWeapon_find)
dz_switchWeapon_mutex = Mutex_New();
dz_switchWeapon_time = 0;
dz_switchWeapon_pistolTime = 0;
//0: switch rifle/melee instantly and update gear
@@ -22,181 +15,117 @@ dz_switchWeapon_pistolTime = 0;
//2: switch to rifle
//3: switch to pistol
//4: switch to melee
dz_fn_switchWeapon =
{
if (vehicle player != player) exitWith {};
dz_fn_switchWeapon = {
if Player_IsInVehicle exitWith {};
if Player_IsOnLadder() exitWith {};
if (dayz_autoRun) then {call dayz_autoRunOff;};
if (dayz_isSwimming) exitWith {};
private ["_current","_primary","_secondary","_swapWeapons"];
private ["_current","_secondary","_option"];
_option = _this;
_current = currentWeapon player;
switch _this do
{
//Instantly switch primary and carry, also update gear
case 0:
{
if (IS_PRIMARY(_current)) then
{ true call dz_fn_switchWeapon_swap; }
else
{ false call dz_fn_switchWeapon_swap; };
/*call _swapWeapons;
if (IS_PRIMARY(_current)) then
{ player selectWeapon primaryWeapon player; };*/
call {
if (_option == 0) exitWith { // Instantly switch primary and carry, also update gear
if (IS_PRIMARY(_current)) then {true call dz_fn_switchWeapon_swap;} else {false call dz_fn_switchWeapon_swap;};
[[(findDisplay 106)],"onLBSelChanged"] execVM "\z\addons\dayz_code\system\handleGear.sqf";
};
//Switch primary and carry
case 1:
{
if (dayz_quickSwitch) then
{
if (_option == 1) exitWith { //Switch primary and carry
if (dayz_quickSwitch) then {
true call dz_fn_switchWeapon_swap;
#ifdef BANDAID
call dayz_meleeMagazineCheck;
#endif
}
else
{ call dz_fn_switchWeapon_swapSecure; };
} else {
call dz_fn_switchWeapon_swapSecure;
};
};
//Switch to rifle
case 2:
{
//No current weapon
if (_current == "") exitWith
{
switch FIND_RIFLE() do
{
//In primary
case 1:
{
if (_option == 2) exitWith { // Switch to rifle
if (_current == "") exitWith { // No current weapon
switch FIND_RIFLE do {
case 1: { //In primary
player selectWeapon primaryWeapon player;
};
//On back
case 2:
{
case 2: { //On back
true call dz_fn_switchWeapon_swap;
};
};
};
//Current weapon is primary
if (IS_PRIMARY(_current)) exitWith
{
//if current is melee and on back is rifle
if (IS_MELEE(_current) && { !IS_MELEE(dayz_onBack) }) then
{
if (dayz_quickSwitch) then
{ true call dz_fn_switchWeapon_swap; }
else
{ call dz_fn_switchWeapon_swapSecure; };
if (IS_PRIMARY(_current)) exitWith { // Current weapon is primary
if (IS_MELEE(_current) && {!IS_MELEE(dayz_onBack)}) then { // if current is melee and on back is rifle
if (dayz_quickSwitch) then {
true call dz_fn_switchWeapon_swap;
} else {
call dz_fn_switchWeapon_swapSecure;
};
};
};
//Current is pistol
switch FIND_RIFLE() do
{
//In primary
case 1:
{
if (Player_GetStance() == Player_GetStance_PRONE) then
{ player playMoveNow "AmovPpneMstpSrasWrflDnon"; };
// Default: Current is pistol
switch FIND_RIFLE do {
case 1: { //In primary
if (Player_GetStance() == Player_GetStance_PRONE) then {
player playMoveNow "AmovPpneMstpSrasWrflDnon";
};
player selectWeapon primaryWeapon player;
};
//On back
case 2:
{
case 2: { //On back
if (diag_tickTime - dz_switchWeapon_pistolTime < 1) exitWith {};
if (Player_GetStance() == Player_GetStance_PRONE) then
{ player playMoveNow "AmovPpneMstpSrasWrflDnon"; };
if (Player_GetStance() == Player_GetStance_PRONE) then {
player playMoveNow "AmovPpneMstpSrasWrflDnon";
};
true call dz_fn_switchWeapon_swap;
};
};
};
//Switch to pistol
case 3:
{
//If current weapon is primary
if (IS_PRIMARY(_current)) then
{
if (_option == 3) exitWith { //Switch to pistol
if (IS_PRIMARY(_current)) then { //If current weapon is primary
_secondary = Player_GetSidearm();
if (!isNil "_secondary") then
{
if (!isNil "_secondary") then {
player selectWeapon _secondary;
dz_switchWeapon_pistolTime = diag_tickTime;
};
};
};
//Switch to melee
case 4:
{
//No current weapon
if (_current == "") exitWith
{
switch FIND_MELEE() do
{
//In primary
case 1:
{
if (_option == 4) exitWith { //Switch to melee or onBack
if (_current == "") exitWith { //No current weapon
switch FIND_MELEE do {
case 1: { //In primary
player selectWeapon primaryWeapon player;
};
//On back
case 2:
{
case 2: { //On back
true call dz_fn_switchWeapon_swap;
#ifdef BANDAID
call dayz_meleeMagazineCheck;
#endif
};
};
};
//Current weapon is primary
if (IS_PRIMARY(_current)) exitWith
{
//if current is rifle and on back is melee OR two rifles are allowed
if ((!IS_MELEE(_current) && { IS_MELEE(dayz_onBack) }) or (DZE_TwoPrimaries > 1)) then
{
if (dayz_quickSwitch) then
{
if (IS_PRIMARY(_current)) exitWith { //Current weapon is primary
if ((!IS_MELEE(_current) && { IS_MELEE(dayz_onBack) }) or (DZE_TwoPrimaries > 1)) then { //if current is rifle and on back is melee OR two rifles are allowed
if (dayz_quickSwitch) then {
true call dz_fn_switchWeapon_swap;
#ifdef BANDAID
call dayz_meleeMagazineCheck;
#endif
}
else
{ call dz_fn_switchWeapon_swapSecure; };
} else {
call dz_fn_switchWeapon_swapSecure;
};
};
};
//Current is pistol
//Find melee weapon
switch FIND_MELEE() do
{
//In primary
case 1:
{
player selectWeapon primaryWeapon player;
if (Player_GetStance() == Player_GetStance_PRONE) then
{ player playMoveNow "AmovPpneMstpSrasWrflDnon"; };
// Default: Current is pistol
if (DZE_TwoPrimaries > 1 && {!IS_MELEE(dayz_onBack)}) exitWith { // Allow switching to on back rifle if DZE_TwoPrimaries = 2.
if (dayz_quickSwitch) then {
true call dz_fn_switchWeapon_swap;
} else {
call dz_fn_switchWeapon_swapSecure;
};
};
//On back
case 2:
{
switch FIND_MELEE do { // Find melee weapon
case 1: { // In primary
player selectWeapon primaryWeapon player;
if (Player_GetStance() == Player_GetStance_PRONE) then {
player playMoveNow "AmovPpneMstpSrasWrflDnon";
};
};
case 2: { // On back
if (diag_tickTime - dz_switchWeapon_pistolTime < 1) exitWith {};
if (Player_GetStance() == Player_GetStance_PRONE) then
{ player playMoveNow "AmovPpneMstpSrasWrflDnon"; };
if (Player_GetStance() == Player_GetStance_PRONE) then {
player playMoveNow "AmovPpneMstpSrasWrflDnon";
};
true call dz_fn_switchWeapon_swap;
};
};
@@ -204,90 +133,46 @@ dz_fn_switchWeapon =
};
};
//See FIND_RIFLE() and FIND_MELEE()
dz_fn_switchWeapon_find =
{
//See FIND_RIFLE and FIND_MELEE
dz_fn_switchWeapon_find = {
private "_primary";
_primary = primaryWeapon player;
if (_primary != "" && { _this == MELEE(_primary) })
exitWith { 1 };
if (dayz_onBack != "" && { _this == MELEE(dayz_onBack) })
exitWith { 2 };
0
if (_primary != "" && { _this == MELEE(_primary) }) exitWith { 1 };
if (dayz_onBack != "" && { _this == MELEE(dayz_onBack) }) exitWith { 2 };
0 // Default
};
//Swaps rifle / melee instantly without animation
dz_fn_switchWeapon_swap =
{
if (dayz_onBack == "") then
{
dz_fn_switchWeapon_swap = {
if (dayz_onBack == "") then {
//Must be in a single statement to ensure atomicity in the scheduled environment.
dayz_onBack =
[
primaryWeapon player,
player removeWeapon primaryWeapon player
] select 0;
}
else
{
dayz_onBack =
[
primaryWeapon player,
player removeWeapon primaryWeapon player,
player addWeapon dayz_onBack
] select 0;
dayz_onBack = [primaryWeapon player,player removeWeapon primaryWeapon player] select 0;
} else {
dayz_onBack = [primaryWeapon player,player removeWeapon primaryWeapon player,player addWeapon dayz_onBack] select 0;
};
if (_this) then
{ player selectWeapon primaryWeapon player; };
if (_this) then {
player selectWeapon primaryWeapon player;
if (IS_MELEE(primaryWeapon player)) then {
call dayz_meleeMagazineCheck;
};
};
};
//Swaps rifle / melee forcing an animation
dz_fn_switchWeapon_swapSecure =
{
if (!Mutex_TryLock_Fast(dz_switchWeapon_mutex)) exitWith {};
dz_fn_switchWeapon_swapSecure = {
private ["_anim","_array","_str"];
//animation states are in the form "AmovPerc...", "AmovPknl...", "AmovPpne..."
dz_switchWeapon_anim = format
[
"AmovP%1MstpSrasWrflDnon_AmovP%1MstpSrasWpstDnon",
//Switch on player stance
switch Player_GetStance() do
{
case Player_GetStance_STAND: { "erc" };
case Player_GetStance_KNEEL: { "knl" };
case Player_GetStance_PRONE: { "pne" };
}
];
_array = toArray (animationState player);
_str = toString [_array select 5,_array select 6,_array select 7];
_anim = format["AmovP%1MstpSrasWrflDnon_AmovP%1MstpSrasWpstDnon",_str];
player playMoveNow _anim;
//Add AnimDone event handler to wait until current weapon is put away
dz_switchWeapon_handler = player addEventHandler ["AnimDone", dz_fn_switchWeapon_animDone];
player playMoveNow dz_switchWeapon_anim;
dz_switchWeapon_time = diag_tickTime;
};
dz_fn_switchWeapon_animDone =
{
//Wait at most TIMEOUT seconds
if (diag_tickTime - dz_switchWeapon_time > TIMEOUT) exitWith
{
dz_switchWeapon_handler = player addEventHandler ["AnimDone", {
true call dz_fn_switchWeapon_swap;
player removeEventHandler ["AnimDone", dz_switchWeapon_handler];
Mutex_Unlock(dz_switchWeapon_mutex);
};
//Check if finished animation is the correct one
if ((_this select 1) != dz_switchWeapon_anim) exitWith {};
true call dz_fn_switchWeapon_swap;
//Remove eventhandler
player removeEventHandler ["AnimDone", dz_switchWeapon_handler];
Mutex_Unlock(dz_switchWeapon_mutex);
#ifdef BANDAID
if (IS_MELEE(primaryWeapon player)) then
{ call dayz_meleeMagazineCheck; };
#endif
dz_switchWeapon_handler = nil;
}];
};

View File

@@ -11,7 +11,7 @@ Author: Foxy
//True if player is on a ladder, otherwise false
#define Player_IsOnLadder() ((getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1)
#define Player_IsInVehicle() (player != vehicle player);
#define Player_IsInVehicle (player != vehicle player)
//Gets the classname of the player's sidearm. nil if the player has no sidearm.
#define Player_GetSidearm() ({ if ((getNumber (configFile >> "CfgWeapons" >> _x >> "type")) == 2) exitWith { _x }; nil } foreach weapons player)
@@ -52,4 +52,4 @@ The weaponholder containing the item is returned. Returns null if the function f
#define Player_GetStance_PRONE 3
#define Player_GetStance() (1 + floor ((((toArray animationState player) select 5) - 100) / 5))
#endif
#endif

View File

@@ -1,22 +1,4 @@
#define STRINGIFY(x) #x
#define PATH(sub_path) STRINGIFY(\z\addons\dayz_code\util\sub_path)
#define CCPP call compile preprocessFileLineNumbers
//Debug
CCPP PATH(debug.sqf);
//Very generic utilities
CCPP PATH(util.sqf);
CCPP PATH(mutex.sqf);
CCPP PATH(math.sqf);
CCPP PATH(array.sqf);
//Collections
CCPP PATH(stack.sqf);
CCPP PATH(queue.sqf);
CCPP PATH(dictionary.sqf);
//Specialized
CCPP PATH(vector.sqf);
CCPP PATH(task.sqf);
CCPP PATH(request.sqf);
call compile preprocessFileLineNumbers "\z\addons\dayz_code\util\math.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_code\util\array.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_code\util\vector.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_code\util\player.sqf";

View File

@@ -1,6 +1,3 @@
#define DEBUG_STEP() call { dbg_step = false; waitUntil {dbg_step}; }
#include "Debug.hpp"
#include "Player.hpp"
#define WeaponSlotPrimary 1
@@ -15,8 +12,6 @@
#define IS_MAGAZINE(type) (type == WeaponSlotHandGunItem || type == WeaponSlotItem)
dz_player_invTypes = [WeaponSlotPrimary, WeaponSlotHandGun, WeaponSlotSecondary, WeaponSlotHandGunItem, WeaponSlotItem, WeaponSlotBinocular, WeaponHardMounted, WeaponSlotInventory];
dz_player_invSlots = [call compile getText (configFile >> "CfgVehicles" >> Player_BASE)] call BIS_FNC_invCodeToArray;
//dz_player_invSlots = [1,1,1,8,12,2,0,12];
dz_fn_player_numItems =
{
@@ -115,4 +110,4 @@ dz_fn_player_removeWeapon =
dz_fn_player_removeMagazine =
{
Player_RemoveMagazine_Fast(_this)
};
};

View File

@@ -118,4 +118,4 @@ See https://community.bistudio.com/wiki/Data_Types
#endif
//Type check define generator http://pastebin.com/kBTVtBzz
//Type check define generator http://pastebin.com/kBTVtBzz

View File

@@ -26,4 +26,4 @@ Author: Foxy
//Rearranges the internal data structure of the dictionary to free unused memory.
#define Dictionary_Compact(d) ((d) call dz_fn_dictionary_compact)
#endif
#endif

View File

@@ -25,4 +25,4 @@ Author: Foxy
//Unlocks the mutex. Use only when you have previously obtained lock yourself.
#define Mutex_Unlock(mtx) ((mtx) set [0, true])
#endif
#endif

View File

@@ -33,4 +33,4 @@ Author: Foxy
//#define Queue_Resize(q, s) ([q, s] call dz_fn_queue_resize)
#endif
#endif

View File

@@ -16,4 +16,4 @@ Author: Foxy
//Sets the reference to point to the specified object.
#define Ref_Set(ref, val) ((ref) set [0, val])
#endif
#endif

View File

@@ -46,4 +46,4 @@ Example:
//Retrieves the result of the request.
#define Request_GetResult(request) ((request) select 2)
#undef
#undef

View File

@@ -30,4 +30,4 @@ Example:
*/
#define Request_RegisterHandler(id, handler, async) Dictionary_Add(dz_request_handlers, id, Array_New2(handler, async))
#undef
#undef

View File

@@ -27,4 +27,4 @@ Author: Foxy
//Returns the number of items currently on the stack.
#define Stack_Count(stack) ((stack) select 0)
#endif
#endif

View File

@@ -19,4 +19,4 @@
#define String_Format15(string,p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14) (format [string,p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14])
#define String_Format16(string,p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15) (format [string,p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15])
#endif
#endif

View File

@@ -38,4 +38,4 @@ Author: Foxy
//Determines whether the task has canceled prior to completion.
#define Task_IsCanceled(task) (((task) select 2) == 3)
#endif
#endif

View File

@@ -23,4 +23,4 @@ variable is restored automatically after transmission. For example:
//Note: the predicate is evaluated once each frame. Expensive operations may cause performance issues.
#define Util_WaitUntil(predicate, timeout) ([_this, predicate, timeout, diag_tickTime] call dz_fn_util_waitUntil)
#endif
#endif

View File

@@ -64,4 +64,4 @@ dz_fn_dictionary_compact =
_this set [1, _keys];
_this set [2, _values];
};
};

View File

@@ -8,4 +8,4 @@ dz_fn_mutex_tryLock =
dz_fn_mutex_waitLock =
{
Mutex_WaitLock_Fast(_this);
};
};

View File

@@ -52,4 +52,4 @@ dz_fn_queue_isFull =
dz_fn_queue_resize =
{
assert (false);
};
};

View File

@@ -171,4 +171,4 @@ else //SERVER
dz_pvc_request = _temp;*/
};
};
};
};

View File

@@ -33,4 +33,4 @@ dz_fn_stack_peek =
dz_fn_stack_size =
{
count GET_ARRAY(_this)
};
};

View File

@@ -93,4 +93,4 @@ dz_fn_task_waitAll =
};
nil
};*/
};*/

View File

@@ -8,4 +8,4 @@ dz_fn_util_waitUntil =
{
waitUntil { ((_this select 2) + (_this select 3)) > diag_tickTime || { (_this select 0) call (_this select 1) } };
(_this select 0) call (_this select 1);
};
};