game.lua 2.2 KB

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