lineIntersectsSurfaces: Difference between revisions
Jump to navigation
Jump to search
Killzone Kid (talk | contribs) (example updated) |
Killzone Kid (talk | contribs) (extended with optional LODs) |
||
Line 7: | Line 7: | ||
____________________________________________________________________________________________ | ____________________________________________________________________________________________ | ||
| Returns list of intersections with surfaces from ''begPosASL'' to ''endPosASL''. If there is ground intersection, it is also included. Works on units. Works underwater. Doesn't return intersection with sea surface. Hardcoded max distance: 5000m.|= Description | | Returns list of intersections with surfaces from ''begPosASL'' to ''endPosASL''. If there is ground intersection, it is also included. Works on units. Works underwater. Doesn't return intersection with sea surface. Hardcoded max distance: 5000m.<br><br> | ||
Since Arma v1.51.131920 it is possible to indicate primary and secondary LOD to look for intersection. Available options are: | |||
* "FIRE" | |||
* "VIEW" | |||
* "GEOM" | |||
* "IFIRE" - ("I" stands for Indirect, almost the same as FIRE) | |||
* "NONE" | |||
Default LODs are "VIEW" and "FIRE" |= Description | |||
____________________________________________________________________________________________ | ____________________________________________________________________________________________ | ||
| '''lineIntersectsSurfaces''' [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults] |= Syntax | | '''lineIntersectsSurfaces''' [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults, LOD1, LOD2] |= Syntax | ||
|p1= [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults]: [[Array]]|= Parameter 0 | |p1= [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults, LOD1, LOD2]: [[Array]]|= Parameter 0 | ||
|p2= begPosASL: [[PositionASL]] - virtual line start |= Parameter 1 | |p2= begPosASL: [[PositionASL]] - virtual line start |= Parameter 1 | ||
|p3= endPosASL: [[PositionASL]] - virtual line end |= Parameter 2 | |p3= endPosASL: [[PositionASL]] - virtual line end |= Parameter 2 | ||
Line 18: | Line 26: | ||
|p6= sortMode (Optional): [[Boolean]] - [[true]]: closest to furthest, [[false]]: furthest to closest. Default: [[true]] |= Parameter 5 | |p6= sortMode (Optional): [[Boolean]] - [[true]]: closest to furthest, [[false]]: furthest to closest. Default: [[true]] |= Parameter 5 | ||
|p7= maxResults (Optional): [[Number]] - Max results to return. -1 to return every result. Default: 1|= Parameter 6 | |p7= maxResults (Optional): [[Number]] - Max results to return. -1 to return every result. Default: 1|= Parameter 6 | ||
|p6= LOD1 (Optional): [[String]] (added in v1.51.131920) - Primary LOD to look for intersection. Default: "VIEW" |= Parameter 5 | |||
|p7= LOD2 (Optional): [[String]] (added in v1.51.131920) - Seondary LOD to look for intersection. Default: "FIRE" |= Parameter 6 | |||
| [[Array]] of intersections in format <nowiki>[</nowiki>[intersectPosASL, surfaceNormal, intersectObj, parentObject],...] where: | | [[Array]] of intersections in format <nowiki>[</nowiki>[intersectPosASL, surfaceNormal, intersectObj, parentObject],...] where: | ||
Line 33: | Line 43: | ||
[[AGLToASL]] [[positionCameraToWorld]] [0,0,1000], | [[AGLToASL]] [[positionCameraToWorld]] [0,0,1000], | ||
[[player]] | [[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; | |||
};</code> |= Example 2 | |||
|x3= This should detect glass windows and wire fences (since Arma v1.51.131920): <code>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]}; | [[if]] ([[count]] _ins == 0) [[exitWith]] {arrow [[setPosASL]] [0,0,0]}; |
Revision as of 17:54, 18 August 2015
Description
- Description:
- Returns list of intersections with surfaces from begPosASL to endPosASL. If there is ground intersection, it is also included. Works on units. Works underwater. Doesn't return intersection with sea surface. Hardcoded max distance: 5000m.
Since Arma v1.51.131920 it is possible to indicate primary and secondary LOD to look for intersection. Available options are:- "FIRE"
- "VIEW"
- "GEOM"
- "IFIRE" - ("I" stands for Indirect, almost the same as FIRE)
- "NONE"
- Groups:
- Uncategorised
Syntax
- Syntax:
- lineIntersectsSurfaces [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults, LOD1, LOD2]
- 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
- LOD1 (Optional): String (added in v1.51.131920) - Primary LOD to look for intersection. Default: "VIEW"
- LOD2 (Optional): String (added in v1.51.131920) - Seondary LOD to look for intersection. Default: "FIRE"
- Return Value:
- Array of intersections in format [[intersectPosASL, surfaceNormal, intersectObj, parentObject],...] where:
- intersectPosASL - the actual position where line intersects 1st surface
- surfaceNormal - a normal to the intersected surface
- intersectObject - the object the surface belongs to (could be proxy object)
- parentObject - the object proxy object belongs to (not always the same as intersect object)
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.51.131920):
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:
- lineIntersectsWithlineIntersectsObjsterrainIntersectterrainIntersectASLlineIntersectsintersect
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
[[Category:Introduced with arma3dev version 1.49]][[ Category: arma3dev: New Scripting Commands | LINEINTERSECTSSURFACES]][[ Category: arma3dev: Scripting Commands | LINEINTERSECTSSURFACES]]