Did some messing around with ponds; maybe some will find this useful.
Creates ponds in an area:
PHP Code:
private ["_aslHeight","_pond","_yPos","_xPos","_pondSize","_ponds","_centerPosASL","_size","_pondClass","_waterHeightASL","_lenTiles"];
_pondSize = 52;
_centerPosASL = _this select 0;
if (typeName _centerPosASL == "OBJECT") then { _centerPosASL = getPosASL _centerPosASL; };
_size = _this select 1;
_aslHeight = if (count _this > 2) then {_this select 2} else {0.4};
_ponds = [];
_waterHeightASL = (_centerPosASL select 2) + _aslHeight;
_lenTiles = ceil ((_size) / _pondSize);
_ponds resize (_lenTiles * _lenTiles);
_pondClass = "pond_ACR";
_xPos = (_centerPosASL select 0) - (_lenTiles * _pondSize) / 2;
for "_i" from 0 to (_lenTiles-1) do {
_yPos = (_centerPosASL select 1) - (_lenTiles * _pondSize) / 2;
for "_j" from 0 to (_lenTiles-1) do {
_pond = createVehicle [_pondClass, [0,0,0], [], 0, "NO_COLLIDE"];
_pond setDir 0;
_pond setPosASL [_xPos, _yPos, _waterHeightASL];
_yPos = _yPos + _pondSize;
//hint str (_i * _lenTiles + _j);
_ponds set [_i * _lenTiles + _j, _pond];
};
_xPos = _xPos + _pondSize;
};
_ponds
Raises or lowers ponds over time:
PHP Code:
private ["_pondPos","_forEachIndex","_rise","_totalTime","_interval","_ponds","_steps","_risePerStep","_newPositions"];
_ponds = _this select 0; //Ponds to manage
_rise = _this select 1; //How many m to rise [meters]
_totalTime = _this select 2; //How long time to take to do it [seconds]
//Find interval - 0.015M per change is nice
_interval = 0.015 / (_rise / _totalTime);
//But never more than twice per seconds
_interval = _interval max 0.5;
_steps = _totalTime / _interval;
_risePerStep = _rise / _steps;
_newPositions = [];
_newPositions resize (count _ponds);
//Fill x, y, positions
{
_pondPos = getPosASL _x;
_newPositions set [_forEachIndex, [_pondPos select 0, _pondPos select 1, _pondPos select 2]];
} forEach _ponds;
for "_i" from 0 to _steps do {
//Raise all positions
{
_x set [2, (_x select 2) + _risePerStep];
} forEach _newPositions;
//Repos ponds
{
_x setPosASL (_newPositions select _forEachIndex);
} forEach _ponds;
sleep _interval;
};
EDIT - Added example:
Let's call the first file createPonds.sqf and the other raisePonds.sqf. Then how you could use them:
PHP Code:
//Create ponds centered on someObject that covers a square 500x500M (minimum, size ponds are 52x52 it will actually be 520x520m) and 0.4m above ground (measured at someObjects height).
ponds = [someObject, 500, 0.4] call compile preProcessFile "createPonds.sqf";
//Now to flood the area: will raise the flood 5m over a period of 600s = 10min roughly.
[ponds, 5, 10*60] execVM "raisePonds.sqf";