mod_base_mode.hh

Go to the documentation of this file.
00001 /*
00008  * LEGAL:   COPYRIGHT (C) 2007 JIM E. BROOKS
00009  *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
00010  *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
00011  *****************************************************************************/
00012 
00013 #if COMPILING_MODULE
00014 #ifndef MOD_BASE_MODE_HH
00015 #define MOD_BASE_MODE_HH 1
00016 
00017 #include "mod_base_craft.hh"
00018 #include "mod_base_keyboard.hh"
00019 
00020 namespace mod_base {
00021 
00022 // For rotating, return a radian scaled by the settings for control response.
00023 #define KEYBOARD_ROTATE_RADIAN( DIR, MEMBER, IDX ) \
00024     ( Deg2Rad( (DIR) * (int(mod_base::Keyboard::GetInstance().GetResponsePercent())/100.0) * (mod_base::gSettings.MEMBER[IDX]) * mod_base::gSettings.mKeyboardResponse[IDX]) )
00025 
00031 class ModuleMode : public Shared
00032 {
00033 
00034 public:                             ModuleMode( void );
00035 public:     virtual                 ~ModuleMode();
00036 
00037 //------------------------------------------------------------------------------
00038 // Interface:
00039 public:     virtual void            Start( void );
00040 public:     virtual void            SetCurrentCraft( SharedPtr<Craft> currentCraft ) { mCurrentCraft = currentCraft; }
00041 public:     virtual SharedPtr<Craft>    GetCurrentCraft( void ) { return mCurrentCraft; }
00042 public:     virtual void            ResetScene( void ) = 0;
00043 public:     virtual bool            IfEyeMode( void ) = 0;  
00044 public:     virtual bool            IfDemoMode( void ) { return false; }
00045 
00046 //------------------------------------------------------------------------------
00047 // Support for derivative:
00048 protected:  virtual void            TimerEvent( const Milliseconds millisecElapsed ) = 0;
00049 protected:  virtual void            IdleEvent( void ) = 0;
00050 protected:  virtual void            KeyboardEvent( const inp::Keyboard::Event& keyEvent ) = 0;
00051 
00052 // These functors reflect events to derivative of ModuleMode via ModuleMode methods.
00053 private:
00055     class TimerFunctor : public Timer::Functor
00056     {
00057     public:
00058                 TimerFunctor( SharedPtr<ModuleMode> moduleMode ) : mModuleMode(moduleMode) { }
00059         void    operator()( const Milliseconds millisecElapsed );
00060         SharedPtr<ModuleMode> mModuleMode;
00061     };
00062     friend class TimerFunctor;
00063 
00064 private:
00066     class IdleFunctor : public Event<>::ListenerFunctor
00067     {
00068     public:
00069                 IdleFunctor( SharedPtr<ModuleMode> moduleMode ) : mModuleMode(moduleMode) { }
00070         void    operator()( Void nothing );
00071         SharedPtr<ModuleMode> mModuleMode;
00072     };
00073     friend class IdleFunctor;
00074 
00075 private:
00077     class KeyboardFunctor : public mod_base::Keyboard::Functor
00078     {
00079     public:
00080                 KeyboardFunctor( SharedPtr<ModuleMode> moduleMode ) : mModuleMode(moduleMode) { }
00081         void    operator()( const inp::Keyboard::Event& keyEvent );
00082         SharedPtr<ModuleMode> mModuleMode;
00083     };
00084 
00085 protected:
00086     // mCurrentCraft can be initially NULL during startup when Graph/World aren't ready.
00087     shptr<Craft>        mCurrentCraft;      
00088 };
00089 
00090 } // namespace mod_base
00091 
00092 #endif // MOD_BASE_MODE_HH
00093 #endif // COMPILING_MODULE
Palomino 3D Engine documents generated by doxygen 1.5.3 on Fri Nov 23 11:26:12 2007