@@ -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 {};
@@ -317,21 +326,12 @@ buildOnMouseUp = {
317326buildOnMouseWheel = {
318327 _z = _this select 1 ;
319328 _pos = position buildcam;
329+ private _distMul = 0.25 + (buildCam distance buildFocus) / 100 ;
320330
321331 if (_z < 0 ) then {
322- if ((_pos select 2 ) < 30 ) exitWith {
323- buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 )+ 5 ];
324- };
325- if ((_pos select 2 ) < 200 ) exitWith {
326- buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 )+ 20 ];
327- };
332+ buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 ) + 10 * _distMul ];
328333 }else {
329- if ((_pos select 2 ) > 30 ) exitWith {
330- buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 )- 20 ];
331- };
332- if ((_pos select 2 ) > 10 ) exitWith {
333- buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 )- 5 ];
334- };
334+ buildcam camSetPos [(_pos select 0 ),(_pos select 1 ),(_pos select 2 ) - 10 * _distMul ];
335335 };
336336 buildcam camSetTarget buildFocus;
337337 buildCam camCommit 0.1 ;
0 commit comments