Better positioning for loaded Buildings Storages

Thx to @Sneer for his help with it
This commit is contained in:
He-Man 2019-09-20 22:13:04 +02:00
parent d12d58e4bf
commit 4ea25cc909
4 changed files with 30 additions and 49 deletions

View File

@ -22,7 +22,7 @@ if !(isNull _this) then {
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
_this setDamage 0;
_class = typeOf _this;
_worldspace = [(getposATL _this call EPOCH_precisionPos), vectordir _this, vectorup _this];
_worldspace = [getposworld _this, vectordir _this, vectorup _this, true];
_objHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _objSlot];
_animPhases = [];
{

View File

@ -75,12 +75,8 @@ for "_i" from 0 to _this do {
// experiment with damage factor based on time only for now.
_damage = ((1 - (_ttl / _maxTTL)) min 1) max 0;
_location = _worldspace deleteAt 0;
// increased position precision
if (count _location == 2) then{
_location = (_location select 0) vectorAdd (_location select 1);
};
_worldspace params ["_pos","_vectordir","_vectorup",["_useworld",false]];
_vectordirup = [_vectordir,_vectorup];
// remove old safes on && !(_class isKindOf 'Constructions_lockedstatic_F')
if (isClass (configFile >> "CfgVehicles" >> _class) && (_damage < 1) && !(_class isKindOf 'Constructions_lockedstatic_F')) then {
@ -115,8 +111,13 @@ for "_i" from 0 to _this do {
} foreach _DeSimulateObjects;
};
};
_baseObj setposATL _location;
_baseObj setVectorDirAndUp _worldspace;
if (_useworld) then {
_baseObj setposworld _pos;
}
else {
_baseObj setposATL _pos;
};
_baseObj setVectorDirAndUp _vectordirup;
if (_Simulated && _baseDynamicSimulationSystem) then { // Only needed, if simulation is not disabled
// new Dynamicsimulation
@ -130,8 +131,13 @@ for "_i" from 0 to _this do {
if(isText _ammoClass) then {
_ammoClass = getText _ammoClass;
_ammoObj = createVehicle [_ammoClass, [0,0,0], [], 0, "CAN_COLLIDE"];
_ammoObj setVectorDirAndUp _worldspace;
if (_useworld) then {
_ammoObj setposworld _pos;
}
else {
_ammoObj setposATL _location;
};
_ammoObj setVectorDirAndUp _vectordirup;
_baseObj setVariable ["EPOCH_TRAP_OBJ",_ammoObj];
_baseObj addEventHandler ["Explosion", {(_this select 0) setDamage 1}];
};
@ -165,7 +171,7 @@ for "_i" from 0 to _this do {
if (_class in (call EPOCH_JammerClasses)) then {
EPOCH_Plotpoles pushbackunique _baseObj;
if (EPOCH_SHOW_JAMMERS) then {
_marker = createMarker [str(_location), _location];
_marker = createMarker [str(_pos), _pos];
_marker setMarkerShape "ICON";
// TODO allow players to change this per base
_marker setMarkerType "mil_dot";
@ -200,7 +206,7 @@ for "_i" from 0 to _this do {
EPOCH_BuildingSlots set [_i,1];
if (EPOCH_DEBUG_VEH) then {
_marker = createMarker [str(_location) , _location];
_marker = createMarker [str(_pos) , _pos];
_marker setMarkerShape "ICON";
_marker setMarkerType "mil_dot";
_marker setMarkerText _class;

View File

@ -49,31 +49,8 @@ for "_i" from 1 to _maxStorageLimit do {
if !(_inventory isEqualType []) then { _inventory = []; };
_worldspace = _arr select 1;
_wsCount = count _worldspace;
// new worldspace format
if (_wsCount == 3) then {
_location = _worldspace deleteAt 0;
_dir = _worldspace;
} else {
_dir = _worldspace select 0;
_location = _worldspace select 1;
};
// increased position precision
if (count _location == 2) then{
_location = (_location select 0) vectorAdd(_location select 1);
};
// set to ground if only x,y
if (count _location == 2) then {
_location set [2, 0];
};
// try to recover from negitive z
if ((_location select 2) < 0) then {
_location set [2, 0];
};
_worldspace params ["_pos","_vectordir","_vectorup",["_useworld",false]];
_vectordirup = [_vectordir,_vectorup];
_vehicle = createVehicle[_class, [0,0,0], [], 0, "CAN_COLLIDE"];
@ -96,19 +73,18 @@ for "_i" from 1 to _maxStorageLimit do {
};
};
if (_dir isEqualType []) then {
_vehicle setposATL _location;
_vehicle setVectorDirAndUp _dir;
} else {
_vehicle setposATL _location;
_vehicle setDir _dir;
if (_useworld) then {
_vehicle setposworld _pos;
}
else {
_vehicle setposATL _pos;
};
_vehicle setVectorDirAndUp _vectordirup;
// temp set damage to mark for maint
_vehicle setDamage 0.01;
_vehicle setVariable ["STORAGE_SLOT", str(_i), true];
if (isDamageAllowed _vehicle) then {
@ -162,7 +138,7 @@ for "_i" from 1 to _maxStorageLimit do {
};
if (EPOCH_DEBUG_VEH) then {
_marker = createMarker [str(_location) , _location];
_marker = createMarker [str(_pos) , _pos];
_marker setMarkerShape "ICON";
_marker setMarkerType "mil_dot";
_marker setMarkerText _class;

View File

@ -26,14 +26,13 @@ if (!isNull _vehicle) then {
_damage = 0;
_vehicle setDamage 0;
_vehiclePos = getposATL _vehicle;
_inventory = _vehicle call EPOCH_server_CargoSave;
_colorSlot = _vehicle getVariable ["STORAGE_TEXTURE",0];
_storageOwners = _vehicle getVariable["STORAGE_OWNERS",[]];
_locked = if (_vehicle getVariable["EPOCH_Locked", true]) then {1} else {-1};
_worldspace = [(_vehiclePos call EPOCH_precisionPos), vectordir _vehicle, vectorup _vehicle];
_worldspace = [getposworld _vehicle, vectordir _vehicle, vectorup _vehicle, true];
_VAL = [_class, _worldspace, _damage, _inventory, _colorSlot, _storageOwners, _locked];
["Storage", _vehHiveKey, EPOCH_expiresBuilding, _VAL] call EPOCH_fnc_server_hiveSETEX;