EsenthelEngine.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. /******************************************************************************/
  2. #pragma once // include the header only once
  3. /******************************************************************************/
  4. #define ENGINE_BUILD 59 // this is an integer value specifying the build iteration of Esenthel Engine, this gets incremented with each new release
  5. /******************************************************************************
  6. Following defines are available, they are always set to 0 (disabled) or 1 (enabled)
  7. WINDOWS - Windows platform
  8. WINDOWS_DESKTOP - Windows Desktop platform
  9. WINDOWS_PHONE - Windows Phone platform
  10. MAC - Mac OS X platform
  11. IOS - iOS platform
  12. LINUX - Linux platform
  13. ANDROID - Android platform
  14. WEB - Web platform
  15. DESKTOP - Windows Desktop, Mac, Linux platform
  16. MOBILE - Windows Phone , iOS, Android platform
  17. APPLE - Mac, iOS platform
  18. X64 - 64-bit platform
  19. DEBUG - Debug mode
  20. Sample Usage:
  21. #if WINDOWS
  22. This line will compile only on Windows platform!
  23. #endif
  24. /******************************************************************************/
  25. // DETECT PLATFORM
  26. /******************************************************************************/
  27. // 32/64-bit
  28. #if defined _WIN64 || defined __LP64__
  29. #define X64 1 // 64-bit
  30. #else
  31. #define X64 0 // 32-bit
  32. #endif
  33. // ARM
  34. #if (defined _M_ARM || defined __arm__) || (defined _M_ARM64 || defined __aarch64__)
  35. #define ARM 1
  36. #else
  37. #define ARM 0
  38. #endif
  39. // Windows
  40. #ifdef _WIN32
  41. #ifdef WINAPI_FAMILY
  42. #include <winapifamily.h>
  43. #define WINDOWS_OLD (WINAPI_FAMILY==WINAPI_FAMILY_DESKTOP_APP)
  44. #else
  45. #define WINDOWS_OLD 1
  46. #endif
  47. #define WINDOWS_NEW (!WINDOWS_OLD)
  48. #define PLATFORM(windows, unix) windows
  49. #else
  50. #define WINDOWS_OLD 0
  51. #define WINDOWS_NEW 0
  52. #define PLATFORM(windows, unix) unix
  53. #endif
  54. // Apple - Mac or iOS
  55. #ifdef __APPLE__
  56. #include <TargetConditionals.h>
  57. #if TARGET_OS_IPHONE // iOS
  58. #define MAC 0
  59. #define IOS 1
  60. #else // Mac
  61. #define MAC 1
  62. #define IOS 0
  63. #endif
  64. #if TARGET_IPHONE_SIMULATOR // iOS Simulator
  65. #define IOS_SIMULATOR 1
  66. #endif
  67. #else
  68. #define MAC 0
  69. #define IOS 0
  70. #endif
  71. // Android
  72. #ifdef ANDROID
  73. #undef ANDROID
  74. #define ANDROID 1
  75. #else
  76. #define ANDROID 0
  77. #endif
  78. // Linux
  79. #if defined __linux__ && !ANDROID // Android also has '__linux__' defined
  80. #define LINUX 1
  81. #else
  82. #define LINUX 0
  83. #endif
  84. // Web
  85. #ifdef EMSCRIPTEN
  86. #define WEB 1
  87. #else
  88. #define WEB 0
  89. #endif
  90. // Other
  91. #define WINDOWS (WINDOWS_OLD || WINDOWS_NEW)
  92. #define WINDOWS_PHONE (WINDOWS && ARM ) // can't use WINAPI_FAMILY_PHONE_APP because that's only for Win8
  93. #define WINDOWS_DESKTOP (WINDOWS && !ARM )
  94. #define APPLE (MAC || IOS)
  95. #define DESKTOP (WINDOWS_DESKTOP || MAC || LINUX )
  96. #define MOBILE (WINDOWS_PHONE || IOS || ANDROID)
  97. #if (WINDOWS+MAC+IOS+LINUX+ANDROID+WEB)!=1
  98. #error Unsupported platform detected
  99. #endif
  100. /******************************************************************************/
  101. #if EE_PRIVATE>=2
  102. #include "Esenthel Config.h" // include engine configuration created by "Esenthel Builder" or the default one if not available, this needs to be done after platform detection
  103. #endif
  104. #include "_/headers.h"
  105. #include "_/types.h"
  106. /******************************************************************************/
  107. namespace EE // Esenthel Engine namespace
  108. {
  109. /******************************************************************************/
  110. #pragma pack(push, 4)
  111. #include "_/defines.h"
  112. #include "_/structs.h"
  113. /******************************************************************************/
  114. // MISC
  115. /******************************************************************************/
  116. #include "Misc/Character.h"
  117. #include "Memory/Mem Simple.h"
  118. #include "Misc/String8.h"
  119. #include "Misc/String.h"
  120. #include "Misc/String Functions.h"
  121. #include "Misc/Cpu.h"
  122. #include "Memory/Mem Pointer.h"
  123. #include "Misc/Misc.h"
  124. #include "Memory/_Memc.h"
  125. #include "Memory/Mem Continuous.h"
  126. #include "Misc/UID.h"
  127. #include "Memory/Memory.h"
  128. #include "Memory/Counted Pointer.h"
  129. #include "Memory/Cipher.h"
  130. #include "Memory/Hash.h"
  131. #include "Memory/Mem Temporary.h"
  132. #include "Memory/Fixed Array.h"
  133. #include "Memory/_Memb.h"
  134. #include "Memory/Mem Block.h"
  135. #include "Memory/_Memx.h"
  136. #include "Memory/Mem Extended.h"
  137. #include "Memory/_Meml.h"
  138. #include "Memory/Mem List.h"
  139. #include "Misc/String Borrowed.h"
  140. #include "Memory/Node.h"
  141. #include "Misc/Date Time.h"
  142. #include "Memory/Index.h"
  143. //
  144. #include "Math/Vector.h"
  145. #include "Graphics/Color.h"
  146. #include "Misc/Timer.h"
  147. #include "Math/Matrix.h"
  148. #include "Math/Math.h"
  149. #include "Math/Orientation.h"
  150. #include "Math/Shapes/Rectangle.h"
  151. //
  152. #include "Misc/Sort.h"
  153. #include "Misc/Thread.h"
  154. #include "Misc/Reference.h"
  155. #include "Memory/_Memc Thread Safe.h"
  156. #include "Memory/Mem Continuous Thread Safe.h"
  157. #include "Memory/_Cache.h"
  158. #include "Memory/Cache.h"
  159. #include "Memory/_Map.h"
  160. #include "Memory/Map.h"
  161. #include "Misc/States.h"
  162. #include "File/File.h"
  163. #include "File/File Text.h"
  164. #include "File/IO.h"
  165. #include "File/Chunk.h"
  166. #include "Misc/Compress.h"
  167. #include "File/Pak.h"
  168. #include "Misc/Enum.h"
  169. #include "Misc/Param.h"
  170. #include "File/Xml.h"
  171. #include "Platforms/Android.h"
  172. #include "Misc/Callback.h"
  173. #include "Misc/DLL.h"
  174. #include "Misc/Printer.h"
  175. /******************************************************************************/
  176. // MATH
  177. /******************************************************************************/
  178. #include "Math/Shapes/Plane.h"
  179. #include "Math/Shapes/Edge.h"
  180. #include "Math/Shapes/Triangle.h"
  181. #include "Math/Shapes/Quad.h"
  182. #include "Math/Shapes/Box.h"
  183. #include "Math/Shapes/Circle.h"
  184. #include "Math/Shapes/Ball.h"
  185. #include "Math/Shapes/Capsule.h"
  186. #include "Math/Shapes/Tube.h"
  187. #include "Math/Shapes/Cone.h"
  188. #include "Math/Shapes/Pyramid.h"
  189. #include "Math/Shapes/Torus.h"
  190. #include "Math/Shapes/Polygon.h"
  191. #include "Math/Shape.h"
  192. #include "Math/Number.h"
  193. #include "Math/Quaternion.h"
  194. #include "Math/Camera.h"
  195. #include "Math/Calculate.h"
  196. #include "Math/Random.h"
  197. /******************************************************************************/
  198. // ANIMATION
  199. /******************************************************************************/
  200. #include "Animation/Skeleton.h"
  201. #include "Animation/Animation Keys.h"
  202. #include "Animation/Animation.h"
  203. #include "Animation/Motion.h"
  204. /******************************************************************************/
  205. // GRAPHICS
  206. /******************************************************************************/
  207. #include "Graphics/Display State.h"
  208. #include "Graphics/Image.h"
  209. #include "Graphics/Image Atlas.h"
  210. #include "Graphics/Image RT.h"
  211. #include "Gui/Font.h"
  212. #include "Gui/Text Style.h"
  213. #include "Graphics/Material.h"
  214. #include "Graphics/Display Draw.h"
  215. #include "Graphics/Renderer.h"
  216. #include "Graphics/Display.h"
  217. #include "Graphics/Light.h"
  218. #include "Graphics/Shader.h"
  219. #include "Graphics/Shader Main.h"
  220. #include "Graphics/Vertex Index Buffer Ex.h"
  221. #include "Graphics/Vertex Index Buffer.h"
  222. #include "Graphics/Sun.h"
  223. #include "Graphics/Fur.h"
  224. #include "Graphics/Effects 2D.h"
  225. #include "Graphics/Environment.h"
  226. /******************************************************************************/
  227. // SOUND
  228. /******************************************************************************/
  229. #include "Sound/Sound Extra.h"
  230. #include "Sound/Sound Stream.h"
  231. #include "Sound/Sound Buffer.h"
  232. #include "Sound/Sound.h"
  233. #include "Sound/Music.h"
  234. /******************************************************************************/
  235. // MESH
  236. /******************************************************************************/
  237. #include "Mesh/Mesh Csg.h"
  238. #include "Mesh/Mesh Render.h"
  239. #include "Mesh/Mesh Base.h"
  240. #include "Mesh/Mesh Part.h"
  241. #include "Mesh/Mesh Lod.h"
  242. #include "Mesh/Mesh Mesh.h"
  243. #include "Mesh/Mesh Group.h"
  244. #include "Mesh/Mesh Cuts.h"
  245. #include "Mesh/Mesh Import.h"
  246. #include "Mesh/Mesh Overlay.h"
  247. #include "Mesh/Material Palette.h"
  248. /******************************************************************************/
  249. // PHYSICS
  250. /******************************************************************************/
  251. #include "Physics/Phys Material.h"
  252. #include "Physics/Phys Body.h"
  253. #include "Physics/Joint.h"
  254. #include "Physics/Actor.h"
  255. #include "Physics/Vehicle.h"
  256. #include "Physics/Physics.h"
  257. #include "Physics/Aggregate.h"
  258. #include "Physics/Controller.h"
  259. #include "Physics/Ragdoll.h"
  260. #include "Physics/Grab.h"
  261. #include "Physics/Cloth.h"
  262. #include "Physics/Destruct Mesh.h"
  263. /******************************************************************************/
  264. //
  265. /******************************************************************************/
  266. #include "Math/Frustum.h"
  267. #include "Misc/Application.h"
  268. #include "Misc/Windows.h"
  269. #include "Input/Input Buttons.h"
  270. #include "Input/Input.h"
  271. #include "Input/Keyboard.h"
  272. #include "Input/Mouse.h"
  273. #include "Input/Joypad.h"
  274. #include "Memory/_Grid.h"
  275. #include "Memory/Grid.h"
  276. #include "Misc/Pathfind 2D.h"
  277. #include "Misc/Pathfind.h"
  278. #include "Misc/Video.h"
  279. #include "Misc/Member.h"
  280. #include "Graphics/Water.h"
  281. #include "Graphics/Sky.h"
  282. #include "Graphics/Fog.h"
  283. #include "Graphics/Clouds.h"
  284. #include "Graphics/Particle.h"
  285. #include "Graphics/Effects 3D.h"
  286. #include "Misc/Object.h"
  287. #include "Mesh/Heightmap.h"
  288. #include "Mesh/Blocks.h"
  289. #include "Mesh/Voxel.h"
  290. /******************************************************************************/
  291. // GUI
  292. /******************************************************************************/
  293. #include "Gui/Panel Image.h"
  294. #include "Gui/Panel.h"
  295. #include "Gui/Gui Skin.h"
  296. #include "Gui/Gui Object.h"
  297. #include "Gui/Gui Objects.h"
  298. #include "Gui/Gui.h"
  299. #include "Gui/Objects/Text.h"
  300. #include "Gui/Objects/Gui Image.h"
  301. #include "Gui/Objects/Button.h"
  302. #include "Gui/Objects/Tabs.h"
  303. #include "Gui/Objects/CheckBox.h"
  304. #include "Gui/Objects/Progress.h"
  305. #include "Gui/Objects/Slider.h"
  306. #include "Gui/Objects/SlideBar.h"
  307. #include "Gui/Objects/TextLine.h"
  308. #include "Gui/Objects/TextBox.h"
  309. #include "Gui/Objects/Region.h"
  310. #include "Gui/Objects/Viewport.h"
  311. #include "Gui/Objects/Gui Custom.h"
  312. #include "Gui/Objects/List.h"
  313. #include "Gui/Objects/Menu.h"
  314. #include "Gui/Objects/MenuBar.h"
  315. #include "Gui/Objects/ComboBox.h"
  316. #include "Gui/Objects/Window.h"
  317. #include "Gui/Objects/Window IO.h"
  318. #include "Gui/Objects/Desktop.h"
  319. #include "Gui/Objects/Property.h"
  320. #include "Gui/Objects/Color Picker.h"
  321. /******************************************************************************/
  322. // GAME
  323. /******************************************************************************/
  324. #include "Game/Obj.h"
  325. #include "Game/Objects/Static.h"
  326. #include "Game/Objects/Kinematic.h"
  327. #include "Game/Objects/Animatable.h"
  328. #include "Game/Objects/Destructible.h"
  329. #include "Game/Objects/Door.h"
  330. #include "Game/Objects/Item.h"
  331. #include "Game/Objects/Character.h"
  332. #include "Game/Objects/Obj Light Point.h"
  333. #include "Game/Objects/Obj Light Cone.h"
  334. #include "Game/Objects/Obj Particles.h"
  335. #include "Game/Objects/Obj Decal.h"
  336. #include "Game/Waypoint.h"
  337. #include "Game/Area.h"
  338. #include "Game/Mini Map.h"
  339. #include "Game/World.h"
  340. /******************************************************************************/
  341. // NET
  342. /******************************************************************************/
  343. #include "Net/Interpolator.h"
  344. #include "Net/Socket.h"
  345. #include "Net/Download.h"
  346. #include "Net/Patcher.h"
  347. #include "Net/Ftp.h"
  348. #include "Net/Connection.h"
  349. #include "Net/Net Object.h"
  350. #include "Net/Net World.h"
  351. #include "Net/Sql.h"
  352. #include "Net/Esenthel Store.h"
  353. #include "Net/Advertisement.h"
  354. #include "Net/Facebook.h"
  355. #include "Net/Store.h"
  356. #include "Net/Steam.h"
  357. #include "Net/Internet Cache.h"
  358. #include "Net/Game Analytics.h"
  359. /******************************************************************************/
  360. // EDIT
  361. /******************************************************************************/
  362. #include "Edit/Save Changes.h"
  363. #include "Edit/Viewport4.h"
  364. #include "Edit/Version.h"
  365. #include "Edit/Undo.h"
  366. /******************************************************************************/
  367. // CODE
  368. /******************************************************************************/
  369. #include "Code/CE Shared.h"
  370. #include "Code/CE Symbol.h"
  371. #include "Code/CE Token.h"
  372. #include "Code/CE Macro.h"
  373. #include "Code/CE Parser.h"
  374. #include "Code/CE Code Col Line.h"
  375. #include "Code/CE Source.h"
  376. #include "Code/CE Environment.h"
  377. #include "Code/CE Expression.h"
  378. #include "Code/CE Compiler.h"
  379. #include "Code/CE Item.h"
  380. #include "Code/CE Find.h"
  381. #include "Code/CE.h"
  382. /******************************************************************************/
  383. #include "Edit/Editor Interface.h"
  384. #include "Graphics/Renderer Instancing.h"
  385. #include "Input/Touch.h"
  386. #include "_/inline.h"
  387. /******************************************************************************/
  388. #pragma pack(pop)
  389. /******************************************************************************/
  390. } // namespace
  391. /******************************************************************************/
  392. using namespace EE;
  393. /******************************************************************************/
  394. // DECLARATIONS FOR USER PROVIDED MAIN FUNCTIONS
  395. /******************************************************************************/
  396. Bool Preload(); // this method is called only on Web platform, it is called before InitPre, it will be called continuously as long as you're returning 'true' inside it. You should use this method to optionally download necessary files, like "Engine.pak". Once you've finished downloading files, return 'false' so that the application can continue, and proceed to 'InitPre'. After that, 'Preload' will never be called again.
  397. void InitPre(); // init before engine, in this function you can modify things like: applications settings (App), Display options (D), Renderer options (Renderer), camera parameters (Cam), file path settings (DataPath), loading data paks (Paks.add), etc. In this stage the engine is not yet fully initialized, so creating GPU (Images, Meshes, ..) and Sound data will fail, this data should be processed later, for example in Init().
  398. Bool Init (); // init after engine
  399. void Shut (); // shut at exit
  400. Bool Update (); // update
  401. void Draw (); // draw
  402. /******************************************************************************/