diff --git a/addons/tagging/functions/fnc_tag.sqf b/addons/tagging/functions/fnc_tag.sqf index 7ea0ed2d38..ce3aa86bbc 100644 --- a/addons/tagging/functions/fnc_tag.sqf +++ b/addons/tagging/functions/fnc_tag.sqf @@ -70,13 +70,20 @@ if (_surfaceNormal vectorDotProduct (_endPosASL vectorDiff _startPosASL) > 0) t // Check if its a valid surface: big enough, reasonably plane private _v1 = vectorNormalized (_surfaceNormal vectorMultiply -1); -private _v2 = vectorNormalized (_v1 vectorCrossProduct (_endPosASL vectorDiff _startPosASL)); +private _v2 = []; +private _v3 = []; // If the surface is not horizontal (>20ยบ), create vup _v2 pointing upward instead of away -if (abs (_v1 select 2) < 0.94) then { - private _v3Temp = _v1 vectorCrossProduct [0, 0, 1]; - _v2 = _v3Temp vectorCrossProduct _v1; +private _vectorDirAndUp = if (abs (_v1 select 2) < 0.94) then { + _v3 = _v1 vectorCrossProduct [0, 0, 1]; + _v2 = _v3 vectorCrossProduct _v1; + TRACE_2("Wall Placement",_v1,_v2); + [_v1, _v2] +} else { + _v2 = vectorNormalized (_v1 vectorCrossProduct (_endPosASL vectorDiff _startPosASL)); + _v3 = _v2 vectorCrossProduct _v1; + TRACE_2("Ground Placement",_v1,_v3); + [_v1, _v3] }; -private _v3 = _v2 vectorCrossProduct _v1; TRACE_3("Reference:", _v1, _v2, _v3); @@ -101,7 +108,6 @@ if ( !([ 0.5 * TAG_SIZE, 0.5 * TAG_SIZE] call _fnc_isOk) || false }; -private _vectorDirAndUp = [_surfaceNormal vectorMultiply -1, _v3]; // Everything ok, make the unit create the tag [_unit, "PutDown"] call EFUNC(common,doGesture);