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