Difference between revisions of "lineIntersectsSurfaces"

From Bohemia Interactive Community
Jump to navigation Jump to search
m
Line 68: Line 68:
 
arrow setPosASL (_ins select 0 select 0);
 
arrow setPosASL (_ins select 0 select 0);
 
arrow setVectorUp (_ins select 0 select 1);
 
arrow setVectorUp (_ins select 0 select 1);
 +
_intDist = (_ins select 0 select 0) distance (ATLToASL positionCameraToWorld [0,0,0]);
 
_sel = "";
 
_sel = "";
 
_dist = 10000;
 
_dist = 10000;
Line 73: Line 74:
 
_ins2 = [_ins select 0 select 3,_x] intersect [
 
_ins2 = [_ins select 0 select 3,_x] intersect [
 
positionCameraToWorld [0,0,0],
 
positionCameraToWorld [0,0,0],
positionCameraToWorld [0,0,1000]
+
positionCameraToWorld [0,0,_intDist + 0.1]
 
];
 
];
  
Line 83: Line 84:
 
} forEach _ins2;
 
} forEach _ins2;
 
if (_sel != "") exitWith {};
 
if (_sel != "") exitWith {};
} forEach ["geom","ifire","fire","view"];
+
} forEach ["GEOM","IFIRE","FIRE","VIEW"];
  
hintsilent format ["selection: %1",_sel];
+
hintsilent format ["GEOM: %1",_sel];
 
};
 
};
 
["sample_id","onEachFrame","testFunc"] call BIS_fnc_addStackedEventHandler;
 
["sample_id","onEachFrame","testFunc"] call BIS_fnc_addStackedEventHandler;

Revision as of 00:01, 13 August 2015

Template:Command

Notes

Bottom Section

You can combine with intersect command to find selection names on intersected objects (in this example priority is geom >> ifire >> fire >> view):

<nowiki>arrow = "Sign_Arrow_F" createVehicle [0,0,0];

testFunc = { _ins = lineIntersectsSurfaces [ ATLToASL positionCameraToWorld [0,0,0], ATLToASL 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); _intDist = (_ins select 0 select 0) distance (ATLToASL positionCameraToWorld [0,0,0]); _sel = ""; _dist = 10000; { _ins2 = [_ins select 0 select 3,_x] intersect [ positionCameraToWorld [0,0,0], positionCameraToWorld [0,0,_intDist + 0.1] ];

{ if (_x select 1 < _dist) then { _dist = _x select 1; _sel = _x select 0 }; } forEach _ins2; if (_sel != "") exitWith {}; } forEach ["GEOM","IFIRE","FIRE","VIEW"];

hintsilent format ["GEOM: %1",_sel]; }; ["sample_id","onEachFrame","testFunc"] call BIS_fnc_addStackedEventHandler;