Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- scriptName "fn_objectsMapper.sqf";
- /*
- Author: Joris-Jan van 't Land, modified for ArmA3: Outlawz7
- Description:
- Takes an array of data about a dynamic object template and creates the objects.
- Parameter(s):
- _this select 0: position of the template - Array [X, Y, Z]
- _this select 1: azimuth of the template in degrees - Number
- _this select 2: object template script name - script
- (optional) _this select 3: set vector up - boolean
- Example(s):
- _newComp = [(getPos this), (getDir this), "dyno_a3\doc\csat_guardpost01.sqf", false] call (compile (preprocessFileLineNumbers "dyno_a3\otl7_Mapper.sqf"));
- _newComp = [(getPos this), (getDir this), "dyno_a3\doc\csat_guardpost01.sqf", true] call (compile (preprocessFileLineNumbers "dyno_a3\otl7_Mapper.sqf"));
- */
- private ["_pos", "_azi", "_objs", "_rdm"];
- _pos = _this select 0;
- _azi = _this select 1;
- _script = "Compositions\fob.sqf";
- _setVector = _this select 3;
- private ["_newObjs"];
- //If the object array is in a script, call it.
- _objs = call (compile (preprocessFileLineNumbers _script));
- _newObjs = [];
- private ["_posX", "_posY"];
- _posX = _pos select 0;
- _posY = _pos select 1;
- //Function to multiply a [2, 2] matrix by a [2, 1] matrix.
- private ["_multiplyMatrixFunc"];
- _multiplyMatrixFunc =
- {
- private ["_array1", "_array2", "_result"];
- _array1 = _this select 0;
- _array2 = _this select 1;
- _result =
- [
- (((_array1 select 0) select 0) * (_array2 select 0)) + (((_array1 select 0) select 1) * (_array2 select 1)),
- (((_array1 select 1) select 0) * (_array2 select 0)) + (((_array1 select 1) select 1) * (_array2 select 1))
- ];
- _result
- };
- for "_i" from 0 to ((count _objs) - 1) do
- {
- private ["_obj", "_type", "_relPos", "_azimuth", "_fuel", "_damage", "_newObj"];
- _obj = _objs select _i;
- _type = _obj select 0;
- _relPos = _obj select 1;
- _azimuth = _obj select 2;
- //Optionally map fuel and damage for backwards compatibility.
- if ((count _obj) > 3) then {_fuel = _obj select 3};
- if ((count _obj) > 4) then {_damage = _obj select 4};
- //Rotate the relative position using a rotation matrix.
- private ["_rotMatrix", "_newRelPos", "_newPos"];
- _rotMatrix =
- [
- [cos _azi, sin _azi],
- [-(sin _azi), cos _azi]
- ];
- _newRelPos = [_rotMatrix, _relPos] call _multiplyMatrixFunc;
- //Backwards compatability causes for height to be optional.
- private ["_z"];
- if ((count _relPos) > 2) then {_z = _relPos select 2} else {_z = 0};
- _newPos = [_posX + (_newRelPos select 0), _posY + (_newRelPos select 1), _z];
- //Create the object and make sure it's in the correct location.
- _newObj = _type createVehicle _newPos;
- _newObj setDir (_azi + _azimuth);
- _newObj setPos _newPos;
- if (_setVector) then {_newObj setVectorUp [0,0,1];};
- //If fuel and damage were grabbed, map them.
- if (!isNil "_fuel") then {_newObj setFuel _fuel};
- if (!isNil "_damage") then {_newObj setDamage _damage};
- _newObjs = _newObjs + [_newObj];
- };
- _newObjs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement