game.lua 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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
  19. , camera_unit
  20. , Vector3(0, 6.5, -30)
  21. )
  22. GameBase.camera = FPSCamera(GameBase.world, camera_unit)
  23. local level = nil
  24. if TEST then
  25. level = "_level_editor_test"
  26. end
  27. World.load_level(GameBase.world, level or GameBase.game_level)
  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 not GameBase.game_camera then
  42. local delta = Vector3.zero()
  43. if Mouse.pressed(Mouse.button_id("right")) then move = true end
  44. if Mouse.released(Mouse.button_id("right")) then move = false end
  45. if move then delta = Mouse.axis(Mouse.axis_id("cursor_delta")) end
  46. GameBase.camera:update(-delta.x, -delta.y)
  47. end
  48. if GameBase.game and GameBase.game.update then
  49. GameBase.game.update(dt)
  50. end
  51. end
  52. function GameBase.render(dt)
  53. if GameBase.game and GameBase.game.render then
  54. GameBase.game.render(dt)
  55. end
  56. Device.render(GameBase.world, GameBase.game_camera or GameBase.camera:unit())
  57. end
  58. function GameBase.shutdown()
  59. if GameBase.game and GameBase.game.shutdown then
  60. GameBase.game.shutdown()
  61. end
  62. Device.destroy_world(GameBase.world)
  63. end