game.lua 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. }
  11. function GameBase.init()
  12. Device.enable_resource_autoload(true)
  13. -- Create world
  14. GameBase.world = Device.create_world()
  15. -- Craete 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. local level = TEST and "_level_editor_test" or GameBase.game_level
  21. if level then
  22. World.load_level(GameBase.world, level)
  23. end
  24. if GameBase.game and GameBase.game.level_loaded then
  25. GameBase.game.level_loaded()
  26. end
  27. end
  28. function GameBase.update(dt)
  29. -- Update world
  30. World.update(GameBase.world, dt)
  31. if TEST then
  32. -- Stop the engine when the 'ESC' key is released
  33. if Keyboard.released(Keyboard.button_id("escape")) then
  34. Device.quit()
  35. end
  36. end
  37. if not GameBase.game_camera then
  38. local delta = Vector3.zero()
  39. if Mouse.pressed(Mouse.button_id("right")) then move = true end
  40. if Mouse.released(Mouse.button_id("right")) then move = false end
  41. if move then delta = Mouse.axis(Mouse.axis_id("cursor_delta")) end
  42. GameBase.camera:update(dt, delta.x, delta.y)
  43. end
  44. if GameBase.game and GameBase.game.update then
  45. GameBase.game.update(dt)
  46. end
  47. end
  48. function GameBase.render(dt)
  49. if GameBase.game and GameBase.game.render then
  50. GameBase.game.render(dt)
  51. end
  52. Device.render(GameBase.world, GameBase.game_camera or GameBase.camera:unit())
  53. end
  54. function GameBase.shutdown()
  55. if GameBase.game and GameBase.game.shutdown then
  56. GameBase.game.shutdown()
  57. end
  58. Device.destroy_world(GameBase.world)
  59. end