Skip to content

Commit ed233ba

Browse files
author
Cre8or
committed
Build camera fixes
- Fixed the camera movement in the build menu to correctly consider the camera's direction, and made the controls easier to use (movement now scales to the distance to the camera focus)
1 parent 09b9509 commit ed233ba

1 file changed

Lines changed: 39 additions & 39 deletions

File tree

addons/overthrow_main/functions/actions/fn_build.sqf

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ canBuildHere = false;
9292
modeCenter = _center;
9393

9494
buildOnMouseMove = {
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-
148160
buildMoveCam = {
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

159172
buildOnKeyUp = {
@@ -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 = {
317326
buildOnMouseWheel = {
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

Comments
 (0)