game.lua 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. require "core/game/camera"
  2. GameBase = GameBase or {
  3. world = nil, -- Default world
  4. camera_unit = nil, -- Default camera
  5. game = nil, -- User Game
  6. game_level = nil,
  7. _test_package = nil,
  8. }
  9. function GameBase.init()
  10. -- Create world
  11. GameBase.world = Device.create_world()
  12. -- Create default camera
  13. GameBase.camera_unit = World.spawn_unit(GameBase.world, "core/units/camera")
  14. local scene_graph = World.scene_graph(GameBase.world)
  15. local camera_transform = SceneGraph.instance(scene_graph, GameBase.camera_unit)
  16. SceneGraph.set_local_position(scene_graph, camera_transform, Vector3(0, 6.5, -30))
  17. -- Load test level if launched from Level Editor.
  18. if TEST then
  19. GameBase._test_package = Device.create_resource_package("_level_editor_test")
  20. ResourcePackage.load(GameBase._test_package)
  21. ResourcePackage.flush(GameBase._test_package)
  22. World.load_level(GameBase.world, "_level_editor_test")
  23. else
  24. if GameBase.game_level then
  25. World.load_level(GameBase.world, GameBase.game_level)
  26. end
  27. end
  28. if GameBase.game and GameBase.game.level_loaded then
  29. GameBase.game.level_loaded()
  30. end
  31. end
  32. function GameBase.update(dt)
  33. -- Update world
  34. World.update(GameBase.world, dt)
  35. if TEST then
  36. -- Stop the engine when the 'ESC' key is released
  37. if Keyboard.released(Keyboard.button_id("escape")) then
  38. Device.quit()
  39. end
  40. end
  41. if GameBase.game and GameBase.game.update then
  42. GameBase.game.update(dt)
  43. end
  44. end
  45. function GameBase.render(dt)
  46. if GameBase.game and GameBase.game.render then
  47. GameBase.game.render(dt)
  48. end
  49. Device.render(GameBase.world, GameBase.camera_unit)
  50. end
  51. function GameBase.shutdown()
  52. if GameBase.game and GameBase.game.shutdown then
  53. GameBase.game.shutdown()
  54. end
  55. Device.destroy_world(GameBase.world)
  56. if GameBase._test_package then
  57. Device.destroy_resource_package(GameBase._test_package)
  58. end
  59. end