From Bohemia Interactive Community
Hover & click on the images for description
Description
- Description:
- Description needed
- Groups:
- Math - Geometry
Syntax
- Syntax:
- lineIntersectsSurfaces [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults, LOD1, LOD2, returnUnique]
- Parameters:
- [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults, LOD1, LOD2]: Array
- begPosASL: PositionASL - virtual line start
- endPosASL: PositionASL - virtual line end
- ignoreObj1 (Optional): Object - first object to ignore or objNull: Default: objNull
- ignoreObj2 (Optional): Object - second object to ignore or objNull: Default: objNull
- sortMode (Optional): Boolean - true: closest to furthest, false: furthest to closest. Default: true
- maxResults (Optional): Number - Max results to return. -1 to return every result. Default: 1
- LOD1 (Optional): String (added in v1.52) - Primary LOD to look for intersection. Default: "VIEW"
- LOD2 (Optional): String (added in v1.52) - Secondary LOD to look for intersection. Default: "FIRE"
- returnUnique (Optional): Boolean (added in v1.70) - When false, all intersections in the same object are included not just the 1st one. Default: true
- Return Value:
- Return value needed
Examples
- Example 1:
_intersections = lineIntersectsSurfaces [eyePos player, aimPos chopper, player, chopper, true, -1];
- Example 2:
arrow = "Sign_Arrow_F" createVehicle [0,0,0];
onEachFrame {
_ins = lineIntersectsSurfaces [
AGLToASL positionCameraToWorld [0,0,0],
AGLToASL positionCameraToWorld [0,0,1000],
player
];
if (count _ins == 0) exitWith {arrow setPosASL [0,0,0]};
arrow setPosASL (_ins select 0 select 0);
arrow setVectorUp (_ins select 0 select 1);
hintSilent str _ins;
};
- Example 3:
- This should detect glass windows and wire fences (since Arma v1.52):
wirefence = "Land_New_WiredFence_5m_F" createVehicle position player;
arrow = "Sign_Arrow_F" createVehicle [0,0,0];
onEachFrame {
_ins = lineIntersectsSurfaces [
AGLToASL positionCameraToWorld [0,0,0],
AGLToASL positionCameraToWorld [0,0,1000],
player,
objNull,
true,
1,
"GEOM",
"NONE"
];
if (count _ins == 0) exitWith {arrow setPosASL [0,0,0]};
arrow setPosASL (_ins select 0 select 0);
arrow setVectorUp (_ins select 0 select 1);
hintSilent str _ins;
};
Additional Information
- See also:
- lineIntersectsWithlineIntersectsObjsterrainIntersectterrainIntersectASLterrainIntersectAtASLlineIntersectsintersectcursorObjectcursorTargetcheckVisibility
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here!
Add Note
- Posted on August 27, 2015 - 12:44 (UTC)
- Killzone Kid
-
Fast check if object is in a house:
KK_fnc_inHouse = {
lineIntersectsSurfaces [
getPosWorld _this,
getPosWorld _this vectorAdd [0, 0, 50],
_this, objNull, true, 1, "GEOM", "NONE"
] select 0 params ["","","","_house"];
if (_house isKindOf "House") exitWith {true};
false
};
onEachFrame {hintSilent str (player call KK_fnc_inHouse)};
- Posted on January 30, 2016 - 20:10 (UTC)
- Pierre MGI
-
This command is useful to place weaponholder (and then spawned weapons) on floor of houses, correcting the spawn position (can_collide) to intersect with floor:
MGI_fnc_setPosAGLS = {
params ["_obj", "_pos"];
_wh_pos = getPosASL _obj;
_pos set [2, (ATLtoASL _pos select 2)-10];
_ins = lineIntersectsSurfaces [_wh_pos, _pos,_obj,objNull, true,1,"VIEW","FIRE"];
_surface_distance = if (count _ins > 0) then [{(_ins select 0 select 0) distance _wh_pos},{0}];
_wh_pos set [2, (getPosASL _obj select 2) - (_surface_distance)];
_weaponholder setPosASL _wh_pos;
};
After the position (_pos) obtained in BIS_fnc_buidingPositions array:
_weaponholder = createVehicle ["groundWeaponHolder", _pos, [], 0, "CAN_COLLIDE"];
[_weaponholder,_pos] call MGI_fnc_setPosAGLS;
Then fill your weapon holder.