game.lua 2.0 KB

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