BIS fnc findSafePos: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Text replacement - "_{10,} " to "") |
Lou Montana (talk | contribs) m (Text replacement - " *\| *([Cc]omments|COMMENTS|[Gg]ame [Nn]ame|Game [Vv]ersion|Game Version \(number surrounded by NO SPACES\)|Multiplayer Arguments \("local" or "global"\)|Multiplayer Effects \("local" or "global"\)|Multiplayer Execution \("server" o...) |
||
Line 1: | Line 1: | ||
{{Function | {{Function | ||
| arma2 | | arma2 | ||
|1.00 | |1.00 | ||
|gr1 = Positions | |gr1 = Positions | ||
| This function generates position on a map according to several given parameters (see diagram):<br><br> | | This function generates position on a map according to several given parameters (see diagram):<br><br> | ||
Line 11: | Line 11: | ||
<br> | <br> | ||
The position '''pos''' will be generated inside an area which resides between '''minDist''' and '''maxDist''' from the given '''center'''. If '''objDist''' is also specified, the position will be selected '''objDist''' away from nearest terrain object. If '''maxGrad''' > 0 then the position will be also checked for how flat the area around is within '''objDist''' radius. The function can additionally be instructed to generate position specifically on water or land ('''waterMode''') or on a shoreline ('''shoreMode'''). The '''shoreLine''' param will be ignored if position is not requested specifically on land.<br><br> | The position '''pos''' will be generated inside an area which resides between '''minDist''' and '''maxDist''' from the given '''center'''. If '''objDist''' is also specified, the position will be selected '''objDist''' away from nearest terrain object. If '''maxGrad''' > 0 then the position will be also checked for how flat the area around is within '''objDist''' radius. The function can additionally be instructed to generate position specifically on water or land ('''waterMode''') or on a shoreline ('''shoreMode'''). The '''shoreLine''' param will be ignored if position is not requested specifically on land.<br><br> | ||
Additionally, generated position could be checked against the list of blacklisted positions '''blacklistPos'''. If search for suitable position failed, '''defaultPos''' position will be used. The format for '''defaultPos''' is array with 2 positions: [posOnLand, posOnWater]. | Additionally, generated position could be checked against the list of blacklisted positions '''blacklistPos'''. If search for suitable position failed, '''defaultPos''' position will be used. The format for '''defaultPos''' is array with 2 positions: [posOnLand, posOnWater]. | ||
| [center, minDist, maxDist, objDist, waterMode, maxGrad, shoreMode, blacklistPos, defaultPos] call [[BIS_fnc_findSafePos]] | | [center, minDist, maxDist, objDist, waterMode, maxGrad, shoreMode, blacklistPos, defaultPos] call [[BIS_fnc_findSafePos]] | ||
|p1= center (Optional): center position. Could be one of: | |p1= center (Optional): center position. Could be one of: | ||
* [[Array]] - [[Position2D]] or [[Position3D]] - position | * [[Array]] - [[Position2D]] or [[Position3D]] - position | ||
* [[Object]] - object which position will be used | * [[Object]] - object which position will be used | ||
* [[Nothing]] - when passing empty array [] or nothing, the world's "safePositionAnchor" entry will be used. (Default: []). | * [[Nothing]] - when passing empty array [] or nothing, the world's "safePositionAnchor" entry will be used. (Default: []). | ||
|p2= minDist (Optional): [[Number]] - minimum distance from the center position. (Default: 0). | |p2= minDist (Optional): [[Number]] - minimum distance from the center position. (Default: 0). | ||
|p3= maxDist (Optional): [[Number]] - maximum distance from the center position. If -1, the world's "safePositionRadius" entry will be used. (Default: -1). | |p3= maxDist (Optional): [[Number]] - maximum distance from the center position. If -1, the world's "safePositionRadius" entry will be used. (Default: -1). | ||
|p4= objDist (Optional): [[Number]] - minimum distance from the resulting position to the center of nearest object. Specifying quite large distance here will slow the function and might often fail to find suitable position. Recommended value: 0 - 10. (Default: 0). | |p4= objDist (Optional): [[Number]] - minimum distance from the resulting position to the center of nearest object. Specifying quite large distance here will slow the function and might often fail to find suitable position. Recommended value: 0 - 10. (Default: 0). | ||
|p5= waterMode (Optional): [[Number]] - water mode (Default: 0). Could be one of: | |p5= waterMode (Optional): [[Number]] - water mode (Default: 0). Could be one of: | ||
* 0 - cannot be in water | * 0 - cannot be in water | ||
* 1 - can either be in water or not | * 1 - can either be in water or not | ||
* 2 - must be in water | * 2 - must be in water | ||
|p6= maxGrad (Optional): [[Number]] - maximum terrain gradient (hill steepness). A quite small non-zero value could result in failure to find suitable position. Recommended: 0.1+ (Default: 0). | |p6= maxGrad (Optional): [[Number]] - maximum terrain gradient (hill steepness). A quite small non-zero value could result in failure to find suitable position. Recommended: 0.1+ (Default: 0). | ||
|p7= shoreMode (Optional): [[Number]] - shore mode (Default: 0). Could be one of: | |p7= shoreMode (Optional): [[Number]] - shore mode (Default: 0). Could be one of: | ||
* 0 - does not have to be at a shore | * 0 - does not have to be at a shore | ||
* 1 - must be at a shore | * 1 - must be at a shore | ||
|p8= blacklistPos (Optional): [[Array]] - List of blacklisted areas in format [area1, area2, area3... areaN] (Default: []). Area could be one of: | |p8= blacklistPos (Optional): [[Array]] - List of blacklisted areas in format [area1, area2, area3... areaN] (Default: []). Area could be one of: | ||
Line 42: | Line 42: | ||
* [[String]] - marker area | * [[String]] - marker area | ||
* [[Location]] - location | * [[Location]] - location | ||
* [[Array]] - array in format [center, distance] or [center, a, b, angle, rect] or [center, a, b, angle, rect, height] | * [[Array]] - array in format [center, distance] or [center, a, b, angle, rect] or [center, a, b, angle, rect, height] | ||
|p9= defaultPos (Optional): [[Array]] - default position when no position is found (Default: []). Array format is [landPosition, seaPosition], where: | |p9= defaultPos (Optional): [[Array]] - default position when no position is found (Default: []). Array format is [landPosition, seaPosition], where: | ||
* landPosition: [[Array]] - in format [x,y] or [x,y,z] - default position on land | * landPosition: [[Array]] - in format [x,y] or [x,y,z] - default position on land | ||
* seaPosition: [[Array]] - in format [x,y] or [x,y,z] - default position on water | * seaPosition: [[Array]] - in format [x,y] or [x,y,z] - default position on water | ||
| [[Array]] - in format [x,y] on success. When position cannot be found at all, default map center position is returned, which will be in format [x,y,0] | | [[Array]] - in format [x,y] on success. When position cannot be found at all, default map center position is returned, which will be in format [x,y,0] | ||
|x1= Find position minimum 1m from from player but not further than 150m, not closer than 3m to any other object, not in the water, maximum gradient of 20, not on the shoreline: <code>_pos = [<nowiki/>[[player]], 1, 150, 3, 0, 20, 0] [[call]] [[BIS_fnc_findSafePos]];</code> | |x1= Find position minimum 1m from from player but not further than 150m, not closer than 3m to any other object, not in the water, maximum gradient of 20, not on the shoreline: <code>_pos = [<nowiki/>[[player]], 1, 150, 3, 0, 20, 0] [[call]] [[BIS_fnc_findSafePos]];</code> | ||
|x2= <code>_pos = [<nowiki/>[[getPos]] [[player]], 2000, 5000, 1, 0, 0.7, 0, [], [<nowiki/>[[getPos]] [[player]], [[getPos]] [[player]]<nowiki>]</nowiki>] [[call]] [[BIS_fnc_findSafePos]];</code> | |x2= <code>_pos = [<nowiki/>[[getPos]] [[player]], 2000, 5000, 1, 0, 0.7, 0, [], [<nowiki/>[[getPos]] [[player]], [[getPos]] [[player]]<nowiki>]</nowiki>] [[call]] [[BIS_fnc_findSafePos]];</code> | ||
|x3= <code>_pos = [<nowiki/>[], 0, 1000] [[call]] [[BIS_fnc_findSafePos]];</code> | |x3= <code>_pos = [<nowiki/>[], 0, 1000] [[call]] [[BIS_fnc_findSafePos]];</code> | ||
|[[BIS_fnc_randomPosTrigger]], [[BIS_fnc_randomPos]] | |[[BIS_fnc_randomPosTrigger]], [[BIS_fnc_randomPos]] | ||
}} | }} | ||
Revision as of 23:02, 17 January 2021
Description
- Description:
- This function generates position on a map according to several given parameters (see diagram):
The position pos will be generated inside an area which resides between minDist and maxDist from the given center. If objDist is also specified, the position will be selected objDist away from nearest terrain object. If maxGrad > 0 then the position will be also checked for how flat the area around is within objDist radius. The function can additionally be instructed to generate position specifically on water or land (waterMode) or on a shoreline (shoreMode). The shoreLine param will be ignored if position is not requested specifically on land.
Additionally, generated position could be checked against the list of blacklisted positions blacklistPos. If search for suitable position failed, defaultPos position will be used. The format for defaultPos is array with 2 positions: [posOnLand, posOnWater]. - Execution:
- call
- Groups:
- Positions
Syntax
- Syntax:
- [center, minDist, maxDist, objDist, waterMode, maxGrad, shoreMode, blacklistPos, defaultPos] call BIS_fnc_findSafePos
- Parameters:
- center (Optional): center position. Could be one of:
- Array - Position2D or Position3D - position
- Object - object which position will be used
- Nothing - when passing empty array [] or nothing, the world's "safePositionAnchor" entry will be used. (Default: []).
- minDist (Optional): Number - minimum distance from the center position. (Default: 0).
- maxDist (Optional): Number - maximum distance from the center position. If -1, the world's "safePositionRadius" entry will be used. (Default: -1).
- objDist (Optional): Number - minimum distance from the resulting position to the center of nearest object. Specifying quite large distance here will slow the function and might often fail to find suitable position. Recommended value: 0 - 10. (Default: 0).
- waterMode (Optional): Number - water mode (Default: 0). Could be one of:
- 0 - cannot be in water
- 1 - can either be in water or not
- 2 - must be in water
- maxGrad (Optional): Number - maximum terrain gradient (hill steepness). A quite small non-zero value could result in failure to find suitable position. Recommended: 0.1+ (Default: 0).
- shoreMode (Optional): Number - shore mode (Default: 0). Could be one of:
- 0 - does not have to be at a shore
- 1 - must be at a shore
- blacklistPos (Optional): Array - List of blacklisted areas in format [area1, area2, area3... areaN] (Default: []). Area could be one of:
- defaultPos (Optional): Array - default position when no position is found (Default: []). Array format is [landPosition, seaPosition], where:
- Return Value:
- Array - in format [x,y] on success. When position cannot be found at all, default map center position is returned, which will be in format [x,y,0]
Examples
- Example 1:
- Find position minimum 1m from from player but not further than 150m, not closer than 3m to any other object, not in the water, maximum gradient of 20, not on the shoreline:
_pos = [player, 1, 150, 3, 0, 20, 0] call BIS_fnc_findSafePos;
- Example 2:
_pos = [getPos player, 2000, 5000, 1, 0, 0.7, 0, [], [getPos player, getPos player]] call BIS_fnc_findSafePos;
- Example 3:
_pos = [[], 0, 1000] call BIS_fnc_findSafePos;
Additional Information
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
Notes
Bottom Section
- Posted on March 15, 2017 - 19:30 (UTC)
- Killzone Kid
- To make sure position is not inside a building, increase distance to nearest object param.