@@ -92,7 +92,7 @@ canBuildHere = false;
9292modeCenter = _center ;
9393
9494buildOnMouseMove = {
95- params [" _control" ," _relX " ," _relY " ];
95+ params [" _control" ," _mouseX " ," _mouseY " ];
9696 modeValue = screenToWorld getMousePosition;
9797 modeValue = [modeValue select 0 ,modeValue select 1 ,0 ];
9898 if (! isNull modeTarget) then {
@@ -129,31 +129,44 @@ buildOnMouseMove = {
129129 };
130130 };
131131 if (buildCamRotating && buildCamMoving) exitWith {
132- _pos = getpos buildcam;
133- buildcam camSetPos [(_pos select 0 )+ _relX ,(_pos select 1 )+ _relY ,(_pos select 2 )];
134- buildcam camSetTarget buildFocus;
135- buildcam camCommit 0 ;
132+ private _mouseVec = [- _mouseX , _mouseY , 0 ];
133+ private _dist = (vectorMagnitude _mouseVec ) * (buildCam distance buildFocus) / 200 ;
134+ private _dir = [0 ,0 ,0 ] getDir _mouseVec ;
135+ _dir = _dir + getDir buildCam;
136+ ([sin _dir , cos _dir , 0 ] vectorMultiply _dist ) params [" _relX" ," _relY" ];
137+
138+ private _camATL = getPosATL buildCam;
139+ private _camWaterDepth = (getTerrainHeightASL _camATL ) min 0 ;
140+ buildCam camSetPos (_camATL vectorAdd [_relX , _relY , _camWaterDepth ]);
141+ buildCam camSetTarget buildFocus;
142+ buildCam camCommit 0 ;
136143 };
137144 if (buildCamMoving) exitWith {
138- _pos = getpos buildcam;
139- buildcam camSetPos [(_pos select 0 )+ _relX ,(_pos select 1 )- _relY ,(_pos select 2 )];
140- _pos = getpos buildFocus;
141- buildFocus setPos [(_pos select 0 )+ _relX ,(_pos select 1 )- _relY ,_pos select 2 ];
142- buildcam camSetTarget buildFocus;
143- buildcam camCommit 0 ;
145+ private _mouseVec = [- _mouseX , _mouseY , 0 ];
146+ private _dist = (vectorMagnitude _mouseVec ) * (buildCam distance buildFocus) / 200 ;
147+ private _dir = [0 ,0 ,0 ] getDir _mouseVec ;
148+ _dir = _dir + getDir buildCam;
149+ ([sin _dir , cos _dir , 0 ] vectorMultiply _dist ) params [" _relX" ," _relY" ];
150+
151+ private _camATL = getPosATL buildCam;
152+ private _camWaterDepth = (getTerrainHeightASL _camATL ) min 0 ;
153+ buildFocus setPosATL ((getPosATL buildFocus) vectorAdd [_relX , _relY , 0 ]);
154+ buildCam camSetPos (_camATL vectorAdd [_relX , _relY , _camWaterDepth ]);
155+ buildCam camSetTarget buildFocus;
156+ buildCam camCommit 0 ;
144157 };
145158
146159};
147-
148160buildMoveCam = {
149- params [" _relX " , " _relY " , " _relZ " ];
161+ params [" _dir " , " _dist " ];
150162
151- private _pos = getpos buildcam;
152- buildcam camSetPos [(_pos select 0 )+ _relX ,(_pos select 1 )- _relY ,(_pos select 2 )+ _relZ ];
153- _pos = getpos buildFocus;
154- buildFocus setPos [(_pos select 0 )+ _relX ,(_pos select 1 )- _relY ,(_pos select 2 )+ _relZ ];
155- buildcam camSetTarget buildFocus;
156- buildcam camCommit 0 ;
163+ _dir = _dir + getDir buildCam;
164+ ([sin _dir , cos _dir , 0 ] vectorMultiply _dist ) params [" _relX" ," _relY" ];
165+
166+ buildFocus setPosATL ((getPosATL buildFocus) vectorAdd [_relX , _relY , 0 ]);
167+ buildCam camSetPos ((getPosATL buildCam) vectorAdd [_relX , _relY , 0 ]);
168+ buildCam camSetTarget buildFocus;
169+ buildCam camCommit 0 ;
157170};
158171
159172buildOnKeyUp = {
@@ -186,26 +199,22 @@ buildOnKeyDown = {
186199 if (_key isEqualTo 17 ) exitWith {
187200 // W
188201 _handled = true ;
189- _rel = [[0 ,0 ,0 ],2 ,(getDir buildCam)+ 90 ] call BIS_fnc_relPos ;
190- _rel call buildMoveCam;
202+ [0 , 2 ] call buildMoveCam;
191203 };
192204 if (_key isEqualTo 31 ) exitWith {
193205 // S
194206 _handled = true ;
195- _rel = [[0 ,0 ,0 ],- 2 ,(getDir buildCam)+ 90 ] call BIS_fnc_relPos ;
196- _rel call buildMoveCam;
207+ [180 , 2 ] call buildMoveCam;
197208 };
198209 if (_key isEqualTo 30 ) exitWith {
199210 // A
200211 _handled = true ;
201- _rel = [[0 ,0 ,0 ],- 2 ,(getDir buildCam)] call BIS_fnc_relPos ;
202- _rel call buildMoveCam;
212+ [270 , 2 ] call buildMoveCam;
203213 };
204214 if (_key isEqualTo 32 ) exitWith {
205215 // D
206216 _handled = true ;
207- _rel = [[0 ,0 ,0 ],2 ,(getDir buildCam)] call BIS_fnc_relPos ;
208- _rel call buildMoveCam;
217+ [90 , 2 ] call buildMoveCam;
209218 };
210219
211220 if (isNull modeTarget) exitWith {};
@@ -267,6 +276,7 @@ buildOnMouseUp = {
267276 if (_money < modePrice) then {
268277 " You cannot afford that" call OT_fnc_notifyMinor ;
269278 }else {
279+
270280 _created = objNULL ;
271281 playSound " 3DEN_notificationDefault" ;
272282 player setVariable [" money" ,_money - modePrice,true ];
@@ -279,6 +289,7 @@ buildOnMouseUp = {
279289 clearItemCargoGlobal _x ;
280290 [_x ,getplayeruid player ] call OT_fnc_setOwner ;
281291 _x call OT_fnc_initObjectLocal ;
292+
282293 }foreach (_objects );
283294 _created = _objects select 0 ;
284295 deleteVehicle modeTarget;
@@ -288,6 +299,12 @@ buildOnMouseUp = {
288299 modeTarget = objNull ;
289300 };
290301
302+ // If the object is a house, mark it as being player-built (will be used to save the leasing status)
303+ private _buildableHouses = (OT_Buildables param [9 , []]) param [2 , []];
304+ if ((typeof _created ) in _buildableHouses ) then {
305+ _created setVariable [" OT_house_isPlayerBuilt" , true , true ];
306+ };
307+
291308 if (modeCode ! = " " ) then {
292309 _created setVariable [" OT_init" ,modeCode,true ];
293310 [_created ,modeValue,modeCode] remoteExec [" OT_fnc_initBuilding" ,2 ];
@@ -309,21 +326,12 @@ buildOnMouseUp = {
309326buildOnMouseWheel = {
310327 _z = _this select 1 ;
311328 _pos = position buildcam;
329+ private _distMul = 0.25 + (buildCam distance buildFocus) / 100 ;
312330
313331 if (_z < 0 ) then {
314- if ((_pos select 2 ) < 30 ) exitWith {
315- buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 )+ 5 ];
316- };
317- if ((_pos select 2 ) < 200 ) exitWith {
318- buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 )+ 20 ];
319- };
332+ buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 ) + 10 * _distMul ];
320333 }else {
321- if ((_pos select 2 ) > 30 ) exitWith {
322- buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 )- 20 ];
323- };
324- if ((_pos select 2 ) > 10 ) exitWith {
325- buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 )- 5 ];
326- };
334+ buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 ) - 10 * _distMul ];
327335 };
328336 buildcam camSetTarget buildFocus;
329337 buildCam camCommit 0.1 ;
0 commit comments