Pioneer
WorldView.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 #ifndef _WORLDVIEW_H
5 #define _WORLDVIEW_H
6 
7 #include "ConnectionTicket.h"
8 #include "graphics/Drawables.h"
9 #include "pigui/PiGuiView.h"
11 
12 class Body;
13 class Camera;
14 class SpeedLines;
15 class NavTunnelWidget;
16 class Game;
17 
21  V_BURN
22 };
23 
24 enum PlaneType {
27  PARENT
28 };
29 
30 class WorldView : public PiGuiView {
31 public:
32  static void RegisterInputBindings();
33  friend class NavTunnelWidget;
34  WorldView(Game *game);
35  WorldView(const Json &jsonObj, Game *game);
36  ~WorldView() override;
37 
38  void Update() override;
39  void Draw3D() override;
40  void Draw() override;
41  void SaveToJson(Json &jsonObj) override;
42 
43  RefCountedPtr<CameraContext> GetCameraContext() const { return m_cameraContext; }
44 
45  ViewController *GetViewController() const { return m_viewController; }
46  void SetViewController(ViewController *newView);
47 
48  std::unique_ptr<ShipViewController> shipView;
49 
50  int GetActiveWeapon() const;
51 
52  std::tuple<double, double, double> CalculateHeadingPitchRoll(enum PlaneType);
53 
54  vector3d WorldSpaceToScreenSpace(const Body *body) const;
55  vector3d WorldSpaceToScreenSpace(const vector3d &position) const;
56  vector3d WorldDirToScreenSpace(const vector3d &direction) const;
58  vector3d CameraSpaceToScreenSpace(const vector3d &pos) const;
59 
60  void BeginCameraFrame() { m_cameraContext->BeginFrame(); };
61  void EndCameraFrame() { m_cameraContext->EndFrame(); };
62 
63  bool ShouldShowLabels() { return m_labelsOn; }
64 
65 protected:
66  void OnSwitchTo() override;
67  void OnSwitchFrom() override;
68 
69 private:
70  void InitObject();
71 
72  enum IndicatorSide {
73  INDICATOR_HIDDEN,
74  INDICATOR_ONSCREEN,
75  INDICATOR_LEFT,
76  INDICATOR_RIGHT,
77  INDICATOR_TOP,
78  INDICATOR_BOTTOM
79  };
80 
81  struct Indicator {
82  vector2f pos;
83  vector2f realpos;
84  IndicatorSide side;
85  Indicator() :
86  pos(0.0f, 0.0f),
87  realpos(0.0f, 0.0f),
88  side(INDICATOR_HIDDEN)
89  {}
90  };
91 
92  void UpdateProjectedObjects();
93  void UpdateIndicator(Indicator &indicator, const vector3d &direction);
94  void HideIndicator(Indicator &indicator);
95 
96  void OnToggleLabels();
97 
98  void DrawCombatTargetIndicator(const Indicator &target, const Indicator &lead, const Color &c);
99  void DrawEdgeMarker(const Indicator &marker, const Color &c);
100 
102  void OnRequestTimeAccelInc();
104  void OnRequestTimeAccelDec();
105  void SelectBody(Body *, bool reselectIsDeselect);
106 
107  Game *m_game;
108  ViewController *m_viewController;
109 
110  std::unique_ptr<SpeedLines> m_speedLines;
111 
112  bool m_labelsOn;
113 
114  ConnectionTicket m_onToggleHudModeCon;
115  ConnectionTicket m_onIncTimeAccelCon;
116  ConnectionTicket m_onDecTimeAccelCon;
117 
118  RefCountedPtr<CameraContext> m_cameraContext;
119  std::unique_ptr<Camera> m_camera;
120 
121  Indicator m_combatTargetIndicator;
122  Indicator m_targetLeadIndicator;
123 
124  std::unique_ptr<Graphics::Material> m_indicatorMat;
125  Graphics::Drawables::Lines m_indicator;
126 
127  struct InputBinding : public Input::InputFrame {
128  using InputFrame::InputFrame;
129 
130  Action *toggleHudMode;
131  Action *increaseTimeAcceleration;
132  Action *decreaseTimeAcceleration;
133 
134  void RegisterBindings() override;
135  } InputBindings;
136 };
137 
138 #endif /* _WORLDVIEW_H */
nlohmann::json Json
Definition: Json.h:8
VelIconType
Definition: WorldView.h:18
@ V_RETROGRADE
Definition: WorldView.h:20
@ V_PROGRADE
Definition: WorldView.h:19
@ V_BURN
Definition: WorldView.h:21
PlaneType
Definition: WorldView.h:24
@ ROTATIONAL
Definition: WorldView.h:26
@ PARENT
Definition: WorldView.h:27
@ NONE
Definition: WorldView.h:25
Definition: Body.h:57
Definition: Camera.h:80
Definition: Game.h:38
Definition: Drawables.h:80
Definition: PiGuiView.h:11
Definition: SpeedLines.h:23
Definition: ViewController.h:9
Definition: WorldView.h:30
friend class NavTunnelWidget
Definition: WorldView.h:33
void Draw3D() override
Definition: WorldView.cpp:153
void SetViewController(ViewController *newView)
Definition: WorldView.cpp:148
~WorldView() override
Definition: WorldView.cpp:30
void BeginCameraFrame()
Definition: WorldView.h:60
WorldView(Game *game)
Definition: WorldView.cpp:65
void OnSwitchFrom() override
Definition: WorldView.cpp:260
static void RegisterInputBindings()
void Draw() override
Definition: WorldView.cpp:443
void SaveToJson(Json &jsonObj) override
Definition: WorldView.cpp:127
vector3d WorldDirToScreenSpace(const vector3d &direction) const
Definition: WorldView.cpp:625
std::unique_ptr< ShipViewController > shipView
Definition: WorldView.h:48
vector3d WorldSpaceToScreenSpace(const Body *body) const
Definition: WorldView.cpp:607
int GetActiveWeapon() const
Definition: WorldView.cpp:295
std::tuple< double, double, double > CalculateHeadingPitchRoll(enum PlaneType)
Definition: WorldView.cpp:546
void EndCameraFrame()
Definition: WorldView.h:61
vector3d CameraSpaceToScreenSpace(const vector3d &pos) const
Definition: WorldView.cpp:631
bool ShouldShowLabels()
Definition: WorldView.h:63
void Update() override
Definition: WorldView.cpp:207
void OnSwitchTo() override
Definition: WorldView.cpp:253
vector3d GetTargetIndicatorScreenPosition(const Body *body) const
Definition: WorldView.cpp:636
ViewController * GetViewController() const
Definition: WorldView.h:45
RefCountedPtr< CameraContext > GetCameraContext() const
Definition: WorldView.h:43
Definition: InputBindings.h:14
Definition: Color.h:66
Definition: ConnectionTicket.h:12
Definition: Input.h:46
InputBindings::Action Action
Definition: Input.h:48