@@ -8,13 +8,29 @@ using namespace Engine3DRadSpace;
88using namespace Engine3DRadSpace ::Math;
99using namespace Engine3DRadSpace ::Objects;
1010
11- FreeCam::FreeCam () : Camera(" FreeCam" )
11+ FreeCam::FreeCam (
12+ const std::string& name,
13+ bool enabled,
14+ const Vector3& pos,
15+ const Quaternion& rotation,
16+ const Vector3& up,
17+ float aspectRatio,
18+ float fov,
19+ float npd,
20+ float fpd
21+ ) : Camera(name, enabled, pos, rotation, up, aspectRatio, fov, npd, fpd),
22+ _camCoords(rotation.ToYawPitchRoll().XY())
1223{
1324}
1425
1526void FreeCam::Update ()
1627{
1728 if (Enabled) return ;
29+ if (Frozen)
30+ {
31+ Camera::Update ();
32+ return ;
33+ }
1834
1935 auto game = static_cast <Game*>(_game);
2036 float dt = game->Update_dt ;
@@ -39,19 +55,20 @@ void FreeCam::Update()
3955
4056 auto &kb = game->Keyboard ;
4157
42- Vector3 mv;
58+ if (kb.IsKeyDown (Forward)) _dir += _fwd;
59+ if (kb.IsKeyDown (Backward)) _dir -= _fwd;
60+ if (kb.IsKeyDown (Left)) _dir -= right;
61+ if (kb.IsKeyDown (Right)) _dir += right;
4362
44- if (kb.IsKeyDown (Forward)) mv += _fwd;
45- if (kb.IsKeyDown (Backward)) mv -= _fwd;
46- if (kb.IsKeyDown (Left)) mv -= right;
47- if (kb.IsKeyDown (Right)) mv += right;
63+ if (EnableElevation)
64+ {
65+ if (kb.IsKeyDown (Elevate)) _dir += Normal;
66+ if (kb.IsKeyDown (Descend)) _dir -= Normal;
67+ }
4868
49- if (kb.IsKeyDown (Elevate)) mv += Normal;
50- if (kb.IsKeyDown (Descend)) mv -= Normal;
69+ if (_dir.LengthSquared () > 0 ) _dir.Normalize ();
5170
52- if (mv.LengthSquared () > 0 ) mv.Normalize ();
53-
54- Position += mv * MovementSpeed * dt;
71+ Position += _dir * MovementSpeed * dt;
5572
5673 Camera::Update ();
5774}
0 commit comments