Pioneer
ShipViewController.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #pragma once
5 
6 #include "CameraController.h"
7 #include "Input.h"
8 #include "InputBindings.h"
9 #include "ViewController.h"
10 #include "utils.h"
11 
13 
15 public:
18 
19  void Update() override;
20  void Activated() override;
21  void Deactivated() override;
22  void Draw(Camera *camera) override;
23 
24  enum CamType {
28  CAM_FLYBY
29  };
30 
31  void SetCamType(enum CamType);
32  enum CamType GetCamType() const { return m_camType; }
33  CameraController *GetCameraController() const { return m_activeCameraController; }
34 
35  // returns true if the active camera is an exterior view.
36  bool IsExteriorView() const;
37 
38  sigc::signal<void> onChangeCamType;
39 
40 private:
41  // TODO: better system for cockpit rendering that doesn't require
42  // WorldView looking at the internals of ShipViewController.
43  friend class WorldView;
44  void ChangeInternalCameraMode(InternalCameraController::Mode m);
45 
46  enum CamType m_camType;
47 
48  sigc::connection m_onMouseWheelCon;
49 
50  std::unique_ptr<HeadtrackingManager> m_headtrackingManager;
51 
52  std::unique_ptr<InternalCameraController> m_internalCameraController;
53  std::unique_ptr<ExternalCameraController> m_externalCameraController;
54  std::unique_ptr<SiderealCameraController> m_siderealCameraController;
55  std::unique_ptr<FlyByCameraController> m_flybyCameraController;
56  CameraController *m_activeCameraController; //one of the above
57 
58  bool headtracker_input_priority;
59  bool m_mouseActive;
60 
61  void MouseWheel(bool up);
62 
63 public:
64  void Init();
65  void LoadFromJson(const Json &jsonObj);
66  void SaveToJson(Json &jsonObj);
67 
68  struct InputBinding : public Input::InputFrame {
69  using InputFrame::InputFrame;
70 
75 
78 
85 
88 
89  void RegisterBindings() override;
91 };
nlohmann::json Json
Definition: Json.h:8
Definition: CameraController.h:16
Definition: Camera.h:80
Definition: Headtracker.h:10
Mode
Definition: CameraController.h:82
Definition: ShipViewController.h:14
void SaveToJson(Json &jsonObj)
Definition: ShipViewController.cpp:95
bool IsExteriorView() const
Definition: ShipViewController.cpp:183
void Init()
Definition: ShipViewController.cpp:104
CameraController * GetCameraController() const
Definition: ShipViewController.h:33
CamType
Definition: ShipViewController.h:24
@ CAM_FLYBY
Definition: ShipViewController.h:28
@ CAM_SIDEREAL
Definition: ShipViewController.h:27
@ CAM_INTERNAL
Definition: ShipViewController.h:25
@ CAM_EXTERNAL
Definition: ShipViewController.h:26
void LoadFromJson(const Json &jsonObj)
Definition: ShipViewController.cpp:82
void Deactivated() override
Definition: ShipViewController.cpp:135
ShipViewController::InputBinding InputBindings
sigc::signal< void > onChangeCamType
Definition: ShipViewController.h:38
enum CamType GetCamType() const
Definition: ShipViewController.h:32
~ShipViewController()
Definition: ShipViewController.cpp:79
void Draw(Camera *camera) override
Definition: ShipViewController.cpp:296
void Activated() override
Definition: ShipViewController.cpp:124
void Update() override
Definition: ShipViewController.cpp:197
ShipViewController(WorldView *v)
Definition: ShipViewController.cpp:69
void SetCamType(enum CamType)
Definition: ShipViewController.cpp:143
Definition: ViewController.h:9
Definition: WorldView.h:30
Definition: InputBindings.h:142
Definition: InputBindings.h:166
Definition: Input.h:46
Definition: ShipViewController.h:68
Action * rightCamera
Definition: ShipViewController.h:82
Axis * cameraZoom
Definition: ShipViewController.h:74
Action * leftCamera
Definition: ShipViewController.h:81
Axis * lookPitch
Definition: ShipViewController.h:77
Action * cycleCameraMode
Definition: ShipViewController.h:86
void RegisterBindings() override
Definition: ShipViewController.cpp:48
Axis * cameraYaw
Definition: ShipViewController.h:71
Action * resetCamera
Definition: ShipViewController.h:87
Action * rearCamera
Definition: ShipViewController.h:80
Axis * lookYaw
Definition: ShipViewController.h:76
Action * topCamera
Definition: ShipViewController.h:83
Action * frontCamera
Definition: ShipViewController.h:79
Axis * cameraPitch
Definition: ShipViewController.h:72
Action * bottomCamera
Definition: ShipViewController.h:84
Axis * cameraRoll
Definition: ShipViewController.h:73