forked from pioneerspacesim/pioneer
-
Notifications
You must be signed in to change notification settings - Fork 1
/
WorldView.h
186 lines (158 loc) · 5.23 KB
/
WorldView.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
// Copyright © 2008-2012 Pioneer Developers. See AUTHORS.txt for details
// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
#ifndef _WORLDVIEW_H
#define _WORLDVIEW_H
#include "libs.h"
#include "gui/Gui.h"
#include "gui/GuiWidget.h"
#include "View.h"
#include "Serializer.h"
#include "Background.h"
#include "EquipType.h"
#include "WorldViewCamera.h"
class Body;
class Frame;
class LabelSet;
class Ship;
class NavTunnelWidget;
namespace Gui { class TexturedQuad; }
class WorldView: public View {
public:
friend class NavTunnelWidget;
WorldView();
WorldView(Serializer::Reader &reader);
virtual ~WorldView();
virtual void ShowAll();
virtual void Update();
virtual void Draw3D();
virtual void Draw();
static const double PICK_OBJECT_RECT_SIZE;
void DrawBgStars();
virtual void Save(Serializer::Writer &wr);
enum CamType {
COCKPIT_FRONT,
COCKPIT_REAR,
CAM_FRONT,
CAM_REAR,
CAM_LEFT,
CAM_RIGHT,
CAM_TOP,
CAM_BOTTOM,
CAM_EXTERNAL,
CAM_SIDEREAL
};
void SetCamType(enum CamType);
enum CamType GetCamType() const { return m_camType; }
WorldViewCamera *GetActiveCamera() const { return m_activeCamera; }
int GetNumLights() const { return m_numLights; }
void ToggleTargetActions();
void ShowTargetActions();
void HideTargetActions();
int GetActiveWeapon() const;
void OnClickBlastoff();
sigc::signal<void> onChangeCamType;
protected:
virtual void OnSwitchTo();
private:
void InitObject();
void RefreshHyperspaceButton();
void RefreshButtonStateAndVisibility();
void UpdateCommsOptions();
enum IndicatorSide {
INDICATOR_HIDDEN,
INDICATOR_ONSCREEN,
INDICATOR_LEFT,
INDICATOR_RIGHT,
INDICATOR_TOP,
INDICATOR_BOTTOM
};
struct Indicator {
vector2f pos;
vector2f realpos;
IndicatorSide side;
Gui::Label *label;
Indicator(): pos(0.0f, 0.0f), realpos(0.0f, 0.0f), side(INDICATOR_HIDDEN), label(0) {}
};
void UpdateProjectedObjects();
void UpdateIndicator(Indicator &indicator, const vector3d &direction);
void HideIndicator(Indicator &indicator);
void SeparateLabels(Gui::Label *a, Gui::Label *b);
void OnToggleLabels();
void DrawCrosshair(float px, float py, float sz, const Color &c);
void DrawCombatTargetIndicator(const Indicator &target, const Indicator &lead, const Color &c);
void DrawTargetSquare(const Indicator &marker, const Color &c);
void DrawVelocityIndicator(const Indicator &marker, const Color &c);
void DrawImageIndicator(const Indicator &marker, Gui::TexturedQuad *quad, const Color &c);
void DrawEdgeMarker(const Indicator &marker, const Color &c);
Gui::Button *AddCommsOption(const std::string msg, int ypos, int optnum);
void AddCommsNavOption(const std::string msg, Body *target);
void OnClickCommsNavOption(Body *target);
void BuildCommsNavOptions();
void HideLowThrustPowerOptions();
void ShowLowThrustPowerOptions();
void OnClickLowThrustPower();
void OnSelectLowThrustPower(float power);
void OnClickHyperspace();
void OnChangeWheelsState(Gui::MultiStateImageButton *b);
void OnChangeFlightState(Gui::MultiStateImageButton *b);
void OnHyperspaceTargetChanged();
void OnPlayerDockOrUndock();
void OnPlayerChangeTarget();
void OnPlayerChangeFlightControlState();
void SelectBody(Body *, bool reselectIsDeselect);
Body* PickBody(const double screenX, const double screenY) const;
void MouseButtonDown(int button, int x, int y);
NavTunnelWidget *m_navTunnel;
Gui::ImageButton *m_hyperspaceButton;
Gui::Label *m_showCameraName;
Gui::Fixed *m_commsOptions;
Gui::VBox *m_commsNavOptions;
Gui::HBox *m_commsNavOptionsContainer;
Gui::Fixed *m_lowThrustPowerOptions;
Gui::Label *m_flightStatus, *m_debugText;
Gui::ImageButton *m_launchButton;
Gui::MultiStateImageButton *m_wheelsButton;
Gui::MultiStateImageButton *m_flightControlButton;
bool m_labelsOn;
enum CamType m_camType;
int m_numLights;
Uint32 m_showTargetActionsTimeout;
Uint32 m_showLowThrustPowerTimeout;
Uint32 m_showCameraNameTimeout;
#if WITH_DEVKEYS
Gui::Label *m_debugInfo;
#endif
Gui::Label *m_hudVelocity, *m_hudTargetDist, *m_hudAltitude, *m_hudPressure, *m_hudHyperspaceInfo, *m_hudTargetInfo;
Gui::MeterBar *m_hudHullTemp, *m_hudWeaponTemp, *m_hudHullIntegrity, *m_hudShieldIntegrity;
Gui::MeterBar *m_hudTargetHullIntegrity, *m_hudTargetShieldIntegrity;
Gui::MeterBar *m_hudFuelGauge;
sigc::connection m_onHyperspaceTargetChangedCon;
sigc::connection m_onPlayerChangeTargetCon;
sigc::connection m_onChangeFlightControlStateCon;
sigc::connection m_onMouseButtonDown;
Gui::LabelSet *m_bodyLabels;
std::map<Body*,vector3d> m_projectedPos;
std::string cameraName;
InternalCamera *m_internalCamera;
ExternalCamera *m_externalCamera;
SiderealCamera *m_siderealCamera;
WorldViewCamera *m_activeCamera; //one of the above
Indicator m_velIndicator;
Indicator m_navVelIndicator;
Indicator m_navTargetIndicator;
Indicator m_combatTargetIndicator;
Indicator m_targetLeadIndicator;
Indicator m_mouseDirIndicator;
ScopedPtr<Gui::TexturedQuad> m_indicatorMousedir;
vector2f m_indicatorMousedirSize;
};
class NavTunnelWidget: public Gui::Widget {
public:
NavTunnelWidget(WorldView *worldView);
virtual void Draw();
virtual void GetSizeRequested(float size[2]);
void DrawTargetGuideSquare(const vector2f &pos, const float size, const Color &c);
private:
WorldView *m_worldView;
};
#endif /* _WORLDVIEW_H */