setTerrainHeight: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Add Global Effect + Server Only)
m (Fix typo)
 
(5 intermediate revisions by 2 users not shown)
Line 4: Line 4:
|version1= 2.10
|version1= 2.10


|branch= dev


|eff= global
|eff= global
Line 12: Line 11:
|gr1= Diagnostic
|gr1= Diagnostic


|descr= {{Wiki|WIP}}
|descr= Set the current terrain's altitude on provided location(s).
Set the current terrain's altitude on provided location(s).
{{Feature|important|
{{Feature|important|
* Heightmap changes:
* Heightmap changes:
Line 19: Line 17:
** are stored in the JIP queue
** are stored in the JIP queue
** are '''not''' removed from the JIP queue if the values are set back to terrain's default value
** are '''not''' removed from the JIP queue if the values are set back to terrain's default value
** are updated in the JIP queue for updated positions '''if''' the same group of positions are edited (order does not matter, but amount does)
** are updated in the JIP queue for updated positions '''if''' the same group of positions are edited (order does not matter, but amount does);<br>editing positions by terrain ''sections'' is good for multiplayer optimisation (see {{Link|#Example 2}})
** are '''not''' updated and sent twice (old one then new one) if position edits are not exactly the same (see point above and {{Link|#Example 2}}).
** are '''not''' updated and sent twice (old one then new one) if position edits are not exactly the same (see point above and {{Link|#Example 2}}).
* Edited terrain heights are '''not''' saved inside savegames, they need to be restored manually on savegame load.
* Edited terrain heights are '''not''' saved inside savegames, they need to be restored manually on savegame load.
* Known issues:
** Terrain sections can become invisible if the change is too extreme
** Walking on the edge of extreme height changes can catapult the player away
}}
}}


|s1= [[setTerrainHeight]] [positionAndAltitudeArray, adjustObjects]
|s1= [[setTerrainHeight]] [positionAndAltitudeArray, adjustObjects]


|p1= positionAndAltitudeArray: [[Array]] of [[Array]] in format [[PositionASL]] - [<nowiki/>[x1, y1, newASLHeight1], [x2, y2, newASLHeight2], ... ]
|p1= positionAndAltitudeArray: [[Array]] of [[Array]] in format [[PositionASL]] - [<nowiki/>[x1, y1, newASLHeight1], [x2, y2, newASLHeight2], ...]


|p2= adjustObjects: [[Boolean]] - (Optional, default [[true]]) if true then objects on modified points are moved up/down to keep the same ATL height
|p2= adjustObjects: [[Boolean]] - (Optional, default [[true]]) if true then objects on modified points are moved up/down to keep the same ATL height
Line 53: Line 54:


private _desiredTerrainHeight = 150;
private _desiredTerrainHeight = 150;
setTerrainHeight [[getPosWorld player, 50, 50, _desiredTerrainHeight] call _fnc_flattenTerrain, true];
private _positionsAndHeights = [getPosWorld player, 50, 50, _desiredTerrainHeight] call _fnc_flattenTerrain;
setTerrainHeight [_positionsAndHeights, true];
</sqf>
</sqf>


Line 59: Line 61:
<sqf>
<sqf>
// first update
// first update
setTerrainHeight [[1000, 1000, 25], [1005, 1000, 25]];
setTerrainHeight [[[1000, 1000, 25], [1005, 1000, 25], [1000, 1005, 25], [1005, 1005, 25]]];


// second update
// second update - this will make the JIP queue keep both messages
setTerrainHeight [[1005, 1000, 50]]; // this will make the JIP queue keep both messages
setTerrainHeight [[[1005, 1000, 50]]];
</sqf>
</sqf>


Line 68: Line 70:
<sqf>
<sqf>
// first update
// first update
setTerrainHeight [[1000, 1000, 25], [1005, 1000, 25]];
setTerrainHeight [[[1000, 1000, 25], [1005, 1000, 25], [1000, 1005, 25], [1005, 1005, 25]]];


// second update
// second update - this will update the JIP queue properly
setTerrainHeight [[1000, 1000, 25], [1005, 1000, 50]]; // this will update the JIP queue properly
setTerrainHeight [[[1000, 1000, 25], [1005, 1000, 50], [1000, 1005, 25], [1005, 1005, 25]]];
</sqf>
</sqf>


|seealso= [[getTerrainInfo]] [[getTerrainHeight]]
|seealso= [[getTerrainInfo]] [[getTerrainHeight]]
}}
}}

Latest revision as of 14:22, 10 April 2023

Hover & click on the images for description

Description

Description:
Set the current terrain's altitude on provided location(s).
  • Heightmap changes:
    • are internally converted (rounded) to heightmap coordinates
    • are stored in the JIP queue
    • are not removed from the JIP queue if the values are set back to terrain's default value
    • are updated in the JIP queue for updated positions if the same group of positions are edited (order does not matter, but amount does);
      editing positions by terrain sections is good for multiplayer optimisation (see Example 2)
    • are not updated and sent twice (old one then new one) if position edits are not exactly the same (see point above and Example 2).
  • Edited terrain heights are not saved inside savegames, they need to be restored manually on savegame load.
  • Known issues:
    • Terrain sections can become invisible if the change is too extreme
    • Walking on the edge of extreme height changes can catapult the player away
Groups:
Diagnostic

Syntax

Syntax:
setTerrainHeight [positionAndAltitudeArray, adjustObjects]
Parameters:
positionAndAltitudeArray: Array of Array in format PositionASL - [[x1, y1, newASLHeight1], [x2, y2, newASLHeight2], ...]
adjustObjects: Boolean - (Optional, default true) if true then objects on modified points are moved up/down to keep the same ATL height
All objects above modified terrain will be adjusted, even flying ones.
Return Value:
Nothing

Examples

Example 1:
private _fnc_flattenTerrain = { params ["_start", "_a", "_b", "_h"]; private _newPositions = []; for "_xStep" from 0 to _a do { for "_yStep" from 0 to _b do { private _newHeight = _start vectorAdd [_xStep, _yStep, 0]; _newHeight set [2, _h]; _newPositions pushBack _newHeight; }; }; _newPositions; }; private _desiredTerrainHeight = 150; private _positionsAndHeights = [getPosWorld player, 50, 50, _desiredTerrainHeight] call _fnc_flattenTerrain; setTerrainHeight [_positionsAndHeights, true];
Example 2:
Bad example:
// first update setTerrainHeight [[[1000, 1000, 25], [1005, 1000, 25], [1000, 1005, 25], [1005, 1005, 25]]]; // second update - this will make the JIP queue keep both messages setTerrainHeight [[[1005, 1000, 50]]];
Good example:
// first update setTerrainHeight [[[1000, 1000, 25], [1005, 1000, 25], [1000, 1005, 25], [1005, 1005, 25]]]; // second update - this will update the JIP queue properly setTerrainHeight [[[1000, 1000, 25], [1005, 1000, 50], [1000, 1005, 25], [1005, 1005, 25]]];

Additional Information

See also:
getTerrainInfo getTerrainHeight

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