IrrlichtDevice.h
上传用户:yhq100200
上传日期:2022-01-28
资源大小:829k
文件大小:9k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // Copyright (C) 2002-2008 Nikolaus Gebhardt
  2. // This file is part of the "Irrlicht Engine".
  3. // For conditions of distribution and use, see copyright notice in irrlicht.h
  4. #ifndef __I_IRRLICHT_DEVICE_H_INCLUDED__
  5. #define __I_IRRLICHT_DEVICE_H_INCLUDED__
  6. #include "IReferenceCounted.h"
  7. #include "dimension2d.h"
  8. #include "IVideoDriver.h"
  9. #include "EDriverTypes.h"
  10. #include "IEventReceiver.h"
  11. #include "ICursorControl.h"
  12. #include "IVideoModeList.h"
  13. #include "ITimer.h"
  14. #include "IOSOperator.h"
  15. namespace irr
  16. {
  17. class ILogger;
  18. class IEventReceiver;
  19. namespace io {
  20. class IFileSystem;
  21. } // end namespace io
  22. namespace gui {
  23. class IGUIEnvironment;
  24. } // end namespace gui
  25. namespace scene {
  26. class ISceneManager;
  27. } // end namespace scene
  28. //! The Irrlicht device. You can create it with createDevice() or createDeviceEx().
  29. /** This is the most important class of the Irrlicht Engine. You can access everything
  30. in the engine if you have a pointer to an instance of this class.
  31. There should be only one instance of this class at any time.
  32. */
  33. class IrrlichtDevice : public virtual IReferenceCounted
  34. {
  35. public:
  36. //! Runs the device.
  37. /** Also increments the virtual timer by calling
  38. ITimer::tick();. You can prevent this
  39. by calling ITimer::stop(); before and ITimer::start() after
  40. calling IrrlichtDevice::run(). Returns false if device wants
  41. to be deleted. Use it in this way:
  42. code
  43. while(device->run())
  44. {
  45. // draw everything here
  46. }
  47. endcode
  48. If you want the device to do nothing if the window is inactive
  49. (recommended), use the slightly enhanced code shown at isWindowActive().
  50. Note if you are running Irrlicht inside an external, custom
  51. created window: Calling Device->run() will cause Irrlicht to
  52. dispatch windows messages internally.
  53. If you are running Irrlicht in your own custom window, you can
  54. also simply use your own message loop using GetMessage,
  55. DispatchMessage and whatever and simply don't use this method.
  56. But note that Irrlicht will not be able to fetch user input
  57. then. See irr::SIrrlichtCreationParameters::WindowId for more
  58. informations and example code.
  59. */
  60. virtual bool run() = 0;
  61. //! Cause the device to temporarily pause execution and let other processes run.
  62. /** This should bring down processor usage without major
  63. performance loss for Irrlicht */
  64. virtual void yield() = 0;
  65. //! Pause execution and let other processes to run for a specified amount of time.
  66. /** It may not wait the full given time, as sleep may be interrupted
  67. param timeMs: Time to sleep for in milisecs.
  68. param pauseTimer: If true, pauses the device timer while sleeping
  69. */
  70. virtual void sleep(u32 timeMs, bool pauseTimer=false) = 0;
  71. //! Provides access to the video driver for drawing 3d and 2d geometry.
  72. /** return Pointer the video driver. */
  73. virtual video::IVideoDriver* getVideoDriver() = 0;
  74. //! Provides access to the virtual file system.
  75. /** return Pointer to the file system. */
  76. virtual io::IFileSystem* getFileSystem() = 0;
  77. //! Provides access to the 2d user interface environment.
  78. /** return Pointer to the gui environment. */
  79. virtual gui::IGUIEnvironment* getGUIEnvironment() = 0;
  80. //! Provides access to the scene manager.
  81. /** return Pointer to the scene manager. */
  82. virtual scene::ISceneManager* getSceneManager() = 0;
  83. //! Provides access to the cursor control.
  84. /** return Pointer to the mouse cursor control interface. */
  85. virtual gui::ICursorControl* getCursorControl() = 0;
  86. //! Provides access to the message logger.
  87. /** return Pointer to the logger. */
  88. virtual ILogger* getLogger() = 0;
  89. //! Gets a list with all video modes available.
  90. /** If you are confused now, because you think you have to
  91. create an Irrlicht Device with a video mode before being able
  92. to get the video mode list, let me tell you that there is no
  93. need to start up an Irrlicht Device with EDT_DIRECT3D8,
  94. EDT_OPENGL or EDT_SOFTWARE: For this (and for lots of other
  95. reasons) the null driver, EDT_NULL exists.
  96. return Pointer to a list with all video modes supported
  97. by the gfx adapter. */
  98. virtual video::IVideoModeList* getVideoModeList() = 0;
  99. //! Provides access to the operation system operator object.
  100. /** The OS operator provides methods for
  101. getting system specific informations and doing system
  102. specific operations, such as exchanging data with the clipboard
  103. or reading the operation system version.
  104. return Pointer to the OS operator. */
  105. virtual IOSOperator* getOSOperator() = 0;
  106. //! Provides access to the engine's timer.
  107. /** The system time can be retrieved by it as
  108. well as the virtual time, which also can be manipulated.
  109. return Pointer to the ITimer object. */
  110. virtual ITimer* getTimer() = 0;
  111. //! Sets the caption of the window.
  112. /** param text: New text of the window caption. */
  113. virtual void setWindowCaption(const wchar_t* text) = 0;
  114. //! Returns if the window is active.
  115. /** If the window is inactive,
  116. nothing needs to be drawn. So if you don't want to draw anything
  117. when the window is inactive, create your drawing loop this way:
  118. code
  119. while(device->run())
  120. {
  121. if (device->isWindowActive())
  122. {
  123. // draw everything here
  124. }
  125. else
  126. device->yield();
  127. }
  128. endcode
  129. return True if window is active. */
  130. virtual bool isWindowActive() const = 0;
  131. //! Checks if the Irrlicht window has focus
  132. /** return True if window has focus. */
  133. virtual bool isWindowFocused() const = 0;
  134. //! Checks if the Irrlicht window is minimized
  135. /** return True if window is minimized. */
  136. virtual bool isWindowMinimized() const = 0;
  137. //! Checks if the Irrlicht window is running in fullscreen mode
  138. /** return True if window is fullscreen. */
  139. virtual bool isFullscreen() const = 0;
  140. //! Get the current color format of the window
  141. /** return Color format of the window. */
  142. virtual video::ECOLOR_FORMAT getColorFormat() const = 0;
  143. //! Notifies the device that it should close itself.
  144. /** IrrlichtDevice::run() will always return false after closeDevice() was called. */
  145. virtual void closeDevice() = 0;
  146. //! Get the version of the engine.
  147. /** The returned string
  148. will look like this: "1.2.3" or this: "1.2".
  149. return String which contains the version. */
  150. virtual const c8* getVersion() const = 0;
  151. //! Sets a new user event receiver which will receive events from the engine. 
  152. /** Return true in IEventReceiver::OnEvent to prevent the event from continuing along 
  153. the chain of event receivers. The path that an event takes through the system depends
  154. on its type. See irr::EEVENT_TYPE for details.
  155. param receiver New receiver to be used. */
  156. virtual void setEventReceiver(IEventReceiver* receiver) = 0;
  157. //! Provides access to the current event receiver.
  158. /** return Pointer to the current event receiver. Returns 0 if there is none. */
  159. virtual IEventReceiver* getEventReceiver() = 0;
  160. //! Sends a user created event to the engine.
  161. /** Is is usually not necessary to use this. However, if you
  162. are using an own input library for example for doing joystick
  163. input, you can use this to post key or mouse input events to
  164. the engine. Internally, this method only delegates the events
  165. further to the scene manager and the GUI environment. */
  166. virtual bool postEventFromUser(const SEvent& event) = 0;
  167. //! Sets the input receiving scene manager.
  168. /** If set to null, the main scene manager (returned by
  169. GetSceneManager()) will receive the input
  170. param sceneManager New scene manager to be used. */
  171. virtual void setInputReceivingSceneManager(scene::ISceneManager* sceneManager) = 0;
  172. //! Sets if the window should be resizeable in windowed mode.
  173. /** The default is false. This method only works in windowed
  174. mode.
  175. param resize Flag whether the window should be resizeable. */
  176. virtual void setResizeAble(bool resize=false) = 0;
  177. //! Activate any joysticks, and generate events for them.
  178. /** Irrlicht contains support for joysticks, but does not generate joystick events by default,
  179. as this would consume joystick info that 3rd party libraries might rely on. Call this method to 
  180. activate joystick support in Irrlicht and to receive @ref SJoystickEvent events.
  181. param joystickInfo On return, this will contain an array of each joystick that was found and activated.
  182. return true if joysticks are supported on this device and _IRR_COMPILE_WITH_JOYSTICK_EVENTS_
  183. is defined, false if joysticks are not supported or support is compiled out.
  184. */
  185. virtual bool activateJoysticks(core::array<SJoystickInfo> & joystickInfo) = 0;
  186. // >> Add by uirou for IME Window start
  187. virtual void focusIn(){};
  188. virtual void focusOut(){};
  189. virtual void updateICSpot(short x, short y, short height){};
  190. // << Add by uirou for IME Window end
  191. };
  192. } // end namespace irr
  193. #endif