All Classes Functions Typedefs
MFDHUDDrawer.hpp
1 // ==============================================================
2 // ORBITER AUX LIBRARY: Support for HUD drawing from MFD context
3 // http://sf.net/projects/enjomitchsorbit
4 // Part of the ORBITER SDK
5 //
6 // Warning! This library is a HACK and it may stop working
7 // in future versions of Orbiter API if the library isn't
8 // maintained anymore. Note however that it's very easy to do so.
9 //
10 // Copyright (C) 2008 Steve "agentgonzo" Arch - most of work
11 // Copyright (C) 2012 Szymon "Enjo" Ender - created a framework
12 //
13 // All rights reserved
14 //
15 // MFDHUDDrawer is free software: you can redistribute it
16 // and/or modify it under the terms of the GNU Lesser General Public
17 // License as published by the Free Software Foundation, either version
18 // 3 of the License, or (at your option) any later version.
19 //
20 // MFDHUDDrawer is distributed in the hope that it will
21 // be useful, but WITHOUT ANY WARRANTY; without even the implied
22 // warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
23 // See the GNU Lesser General Public License for more details.
24 //
25 // You should have received a copy of the GNU Lesser General Public
26 // License along with MFDHUDDrawer. If not, see
27 // <http://www.gnu.org/licenses/>.
28 // ==============================================================
29 
30 #ifndef MFDHUDDRAWER_HPP
31 #define MFDHUDDRAWER_HPP
32 
33 #include "Orbitersdk.h"
34 #include "IMFDDrawsHUD.hpp"
35 #include <vector>
36 #include <string>
37 
38 namespace EnjoLib
39 {
40 namespace MFDGoodies
41 {
43 
49 class MFDHUDDrawer : public
50 #ifdef ORB2006
51 VESSEL2
52 #else
53 VESSEL3
54 #endif
55 {
56 public:
58 
67  static void FocusChanged(OBJHANDLE new_focus, OBJHANDLE old_focus);
69 
70  MFDHUDDrawer(OBJHANDLE, int);
72  ~MFDHUDDrawer();
73 
74 private:
75 
76 
77  // Callback functions
78  virtual void clbkSetClassCaps (FILEHANDLE cfg) {};
79  virtual void clbkSaveState (FILEHANDLE scn) {};
80  virtual void clbkLoadStateEx (FILEHANDLE scn, void *status) {};
81  virtual void clbkSetStateEx (const void *status) {};
82  virtual void clbkPostCreation () {};
83  virtual void clbkFocusChanged (bool getfocus, OBJHANDLE hNewVessel, OBJHANDLE hOldVessel) {};
84  virtual void clbkPreStep (double simt, double simdt, double mjd) {};
85  virtual void clbkPostStep (double simt, double simdt, double mjd) {};
86  virtual bool clbkPlaybackEvent (double simt, double event_t, const char *event_type, const char *event) {return 0;};
87  virtual void clbkVisualCreated (VISHANDLE vis, int refcount) {};
88  virtual void clbkVisualDestroyed (VISHANDLE vis, int refcount) {};
90  virtual void clbkDrawHUD (int mode, const HUDPAINTSPEC *hps, HDC hDC);
92  virtual void clbkRCSMode (int mode) {};
93  virtual void clbkADCtrlMode (DWORD mode) {};
94  virtual void clbkHUDMode (int mode) {};
95  virtual void clbkMFDMode (int mfd, int mode) {};
96  virtual void clbkNavMode (int mode, bool active) {};
97  virtual void clbkDockEvent (int dock, OBJHANDLE mate) {};
98  virtual void clbkAnimate (double simt) {};
99  virtual int clbkConsumeDirectKey (char *keystate) {return 0;};
100  virtual int clbkConsumeBufferedKey (DWORD key, bool down, char *keystate) {return 0;};
101  virtual bool clbkLoadGenericCockpit () {return 0;};
102  virtual bool clbkLoadPanel (int id) {return 0;};
103  virtual bool clbkPanelMouseEvent (int id, int event, int mx, int my) {return 0;};
104  virtual bool clbkPanelRedrawEvent (int id, int event, SURFHANDLE surf) {return 0;};
105  virtual bool clbkLoadVC (int id) {return 0;};
106  virtual bool clbkVCMouseEvent (int id, int event, VECTOR3 &p) {return 0;};
107  virtual bool clbkVCRedrawEvent (int id, int event, SURFHANDLE surf) {return 0;};
108  #ifndef ORB2006
109  virtual bool clbkPanelMouseEvent (int id, int event, int mx, int my, void *context) {return true;}
110  virtual bool clbkPanelRedrawEvent (int id, int event, SURFHANDLE surf, void *context) {return true;}
111  virtual int clbkGeneric (int msgid=0, int prm=0, void *context=NULL) {return 0;}
112  virtual bool clbkLoadPanel2D (int id, PANELHANDLE hPanel, DWORD viewW, DWORD viewH) {return true;}
114  virtual bool clbkDrawHUD (int mode, const HUDPAINTSPEC *hps, oapi::Sketchpad * skp );
116  virtual void clbkRenderHUD (int mode, const HUDPAINTSPEC *hps, SURFHANDLE hDefaultTex) {}
117  virtual void clbkGetRadiationForce (const VECTOR3 &mflux, VECTOR3 &F, VECTOR3 &pos) {}
118  #endif
119  virtual void OldclbkSetClassCaps (FILEHANDLE cfg) {};
120  virtual void OldclbkSaveState (FILEHANDLE scn) {};
121  virtual void OldclbkLoadStateEx (FILEHANDLE scn, void *status) {};
122  virtual void OldclbkSetStateEx (const void *status) {};
123  virtual void OldclbkPostCreation () {};
124  virtual void OldclbkFocusChanged (bool getfocus, OBJHANDLE hNewVessel, OBJHANDLE hOldVessel) {};
125  virtual void OldclbkPreStep (double simt, double simdt, double mjd) {};
126  virtual void OldclbkPostStep (double simt, double simdt, double mjd) {};
127  virtual bool OldclbkPlaybackEvent (double simt, double event_t, const char *event_type, const char *event) {return 0;};
128  virtual void OldclbkVisualCreated (VISHANDLE vis, int refcount) {};
129  virtual void OldclbkVisualDestroyed (VISHANDLE vis, int refcount) {};
130  virtual void OldclbkDrawHUD (int mode, const HUDPAINTSPEC *hps, HDC hDC);
131  virtual void OldclbkRCSMode (int mode) {};
132  virtual void OldclbkADCtrlMode (DWORD mode) {};
133  virtual void OldclbkHUDMode (int mode) {};
134  virtual void OldclbkMFDMode (int mfd, int mode) {};
135  virtual void OldclbkNavMode (int mode, bool active) {};
136  virtual void OldclbkDockEvent (int dock, OBJHANDLE mate) {};
137  virtual void OldclbkAnimate (double simt) {};
138  virtual int OldclbkConsumeDirectKey (char *keystate) {return 0;};
139  virtual int OldclbkConsumeBufferedKey (DWORD key, bool down, char *keystate) {return 0;};
140  virtual bool OldclbkLoadGenericCockpit () {return 0;};
141  virtual bool OldclbkLoadPanel (int id) {return 0;};
142  virtual bool OldclbkPanelMouseEvent (int id, int event, int mx, int my) {return 0;};
143  virtual bool OldclbkPanelRedrawEvent (int id, int event, SURFHANDLE surf) {return 0;};
144  virtual bool OldclbkLoadVC (int id) {return 0;};
145  virtual bool OldclbkVCMouseEvent (int id, int event, VECTOR3 &p) {return 0;};
146  virtual bool OldclbkVCRedrawEvent (int id, int event, SURFHANDLE surf) {return 0;};
147 
148  #ifndef ORB2006
149  virtual bool OldclbkPanelMouseEvent (int id, int event, int mx, int my, void *context) {return true;}
150  virtual bool OldclbkPanelRedrawEvent (int id, int event, SURFHANDLE surf, void *context) {return true;}
151  virtual int OldclbkGeneric (int msgid=0, int prm=0, void *context=NULL) {return 0;}
152  virtual bool OldclbkLoadPanel2D (int id, PANELHANDLE hPanel, DWORD viewW, DWORD viewH) {return true;}
153  virtual bool OldclbkDrawHUD (int mode, const HUDPAINTSPEC *hps, oapi::Sketchpad * skp );
154  virtual void OldclbkRenderHUD (int mode, const HUDPAINTSPEC *hps, SURFHANDLE hDefaultTex) {}
155  virtual void OldclbkGetRadiationForce (const VECTOR3 &mflux, VECTOR3 &F, VECTOR3 &pos) {}
156  #endif
157 
158  private:
159  void Hook();
160  void UnHook();
161 
162  friend class IMFDDrawsHUD;
163  static void OnMFDConstruction( IMFDDrawsHUD * mfd );
164  static void OnMFDDestruction();
165  static bool IsVesselCompatible( VESSEL * v );
166 
167  static void TryHook( OBJHANDLE old_focus );
168  static void TryUnHook( OBJHANDLE new_focus );
169 
170  static class IMFDDrawsHUD * mfdDrawsHUD;
171 };
172 }
173 }
174 
175 #endif // MFDHUDDRAWER_HPP