fn_randomPosTrigger.sqf 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. Author: Karel Moricky, tweaked by Rarek
  3. Description:
  4. Selects random position withing trigger area
  5. Parameter(s):
  6. _this select 0:
  7. OBJECT - trigger (automatically sets area param)
  8. ARRAY - position
  9. STRING - marker
  10. _this select 1:
  11. NUMBER - radius around position set in param 0.
  12. ARRAY - trigger settings in format of triggerArea command
  13. Returns:
  14. ARRAY - [x,y,z]
  15. */
  16. private ["_tPos","_tPosX","_tPosY","_tArea","_tX","_tY","_tDir","_tShape","_vector"];
  17. _tPos = [_this,0,[0,0,0],[[],objnull,""],[2,3]] call bis_fnc_param;
  18. _tArea = [_this,1,0,[[],0],4] call bis_fnc_param;
  19. //--- Trigger
  20. if (typename _tPos == typename objnull) then {
  21. _tArea = triggerarea _tPos;
  22. _tPos = position _tPos;
  23. };
  24. //--- Marker
  25. if (typename _tPos == typename "") then {
  26. _tArea = markersize _tPos + [markerdir _tPos,markershape _tPos == "rectangle"];
  27. _tPos = markerpos _tPos;
  28. };
  29. //--- Position
  30. _tPosX = _tPos select 0;
  31. _tPosY = _tPos select 1;
  32. //--- Area
  33. if (typename _tArea == typename 0) then {_tArea = [_tArea,_tArea,0,false]};
  34. _tX = _tarea select 0;
  35. _tY = _tarea select 1;
  36. _tDir = _tarea select 2;
  37. _tShape = _tarea select 3;
  38. //--- Random position
  39. _vector = if (_tShape) then {
  40. //--- Rectangle
  41. [
  42. (-_tX + 2 * random _tX),
  43. (-_tY + 2 * random _tY)
  44. ]
  45. } else {
  46. //--- Ellipse
  47. private ["_ranDir"];
  48. _ranDir = random 360;
  49. [
  50. (cos _ranDir * random _tX),
  51. (sin _ranDir * random _tY)
  52. ]
  53. };
  54. //--- Rotate according to area
  55. _vector = [_vector,-_tDir] call bis_fnc_rotateVector2D;
  56. //--- Convert to world coordinates
  57. [
  58. _tPosX + (_vector select 0),
  59. _tPosY + (_vector select 1),
  60. 0
  61. ]