Pioneer
Loading...
Searching...
No Matches
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"
9#include "pigui/PiGuiView.h"
11
12class Body;
13class Camera;
14class SpeedLines;
15class NavTunnelWidget;
16class Game;
17
21 V_BURN
22};
23
27 PARENT
28};
29
30class WorldView : public PiGuiView {
31public:
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;
59
60 void BeginCameraFrame() { m_cameraContext->BeginFrame(); };
61 void EndCameraFrame() { m_cameraContext->EndFrame(); };
62
63 bool ShouldShowLabels() { return m_labelsOn; }
64
65protected:
66 void OnSwitchTo() override;
67 void OnSwitchFrom() override;
68
69private:
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;
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 RefCounted.h:36
Definition SpeedLines.h:23
Definition ViewController.h:9
Definition WorldView.h:30
friend class NavTunnelWidget
Definition WorldView.h:33
ViewController * GetViewController() const
Definition WorldView.h:45
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
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
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