mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
54 lines
1.8 KiB
Plaintext
54 lines
1.8 KiB
Plaintext
// (c) zGuba 2011
|
|
// Function helper for framing objects on screen.
|
|
// Input: [_object,_margins3D,_offset3D] (object, 3 * float array, 3 * float array)
|
|
// Output: [_minX,_minY,_minY,_maxY] (4 * float)
|
|
|
|
#include "script_component.hpp"
|
|
|
|
private ["_minX","_minY","_maxX","_maxY"];
|
|
|
|
PARAMS_3(_object,_margins,_offsets);
|
|
|
|
_minX = 10;
|
|
_minY = 10;
|
|
_maxX = -10;
|
|
_maxY = -10;
|
|
|
|
if (true) then {
|
|
_bounds = boundingBox _object;
|
|
|
|
_boundsMin = _bounds select 0;
|
|
_boundsMinX = (_boundsMin select 0) - (_margins select 0) + (_offsets select 0);
|
|
_boundsMinY = (_boundsMin select 1) - (_margins select 1) + (_offsets select 1);
|
|
_boundsMinZ = (_boundsMin select 2) - (_margins select 2) + (_offsets select 2);
|
|
_boundsMax = _bounds select 1;
|
|
_boundsMaxX = (_boundsMax select 0) + (_margins select 0) + (_offsets select 0);
|
|
_boundsMaxY = (_boundsMax select 1) + (_margins select 1) + (_offsets select 1);
|
|
_boundsMaxZ = (_boundsMax select 2) + (_margins select 2) + (_offsets select 2);
|
|
|
|
_boundsCorners = [
|
|
[_boundsMinX,_boundsMinY,_boundsMinZ],
|
|
[_boundsMinX,_boundsMinY,_boundsMaxZ],
|
|
[_boundsMinX,_boundsMaxY,_boundsMinZ],
|
|
[_boundsMinX,_boundsMaxY,_boundsMaxZ],
|
|
[_boundsMaxX,_boundsMinY,_boundsMinZ],
|
|
[_boundsMaxX,_boundsMinY,_boundsMaxZ],
|
|
[_boundsMaxX,_boundsMaxY,_boundsMinZ],
|
|
[_boundsMaxX,_boundsMaxY,_boundsMaxZ]
|
|
];
|
|
|
|
|
|
{
|
|
_ppos = worldToScreen (_object modelToWorld _x);
|
|
if (count _ppos >= 2) then {
|
|
EXPLODE_2_PVT(_ppos,_pposX,_pposY);
|
|
if (_pposX < _minX) then {_minX = _pposX};
|
|
if (_pposX > _maxX) then {_maxX = _pposX};
|
|
if (_pposY < _minY) then {_minY = _pposY};
|
|
if (_pposY > _maxY) then {_maxY = _pposY};
|
|
}; //else - what to do if it is offscreen?
|
|
} forEach _boundsCorners;
|
|
};
|
|
|
|
[_minX,_minY,_maxX,_maxY]
|