game.lua 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. if TEST then
  13. Device.enable_resource_autoload(true)
  14. end
  15. -- Create world
  16. GameBase.world = Device.create_world()
  17. -- Craete default camera
  18. local camera_unit = World.spawn_unit(GameBase.world, "core/units/camera")
  19. local scene_graph = World.scene_graph(GameBase.world)
  20. SceneGraph.set_local_position(scene_graph, camera_unit, Vector3(0, 6.5, -30))
  21. GameBase.camera = FPSCamera(GameBase.world, camera_unit)
  22. local level = TEST and "_level_editor_test" or GameBase.game_level
  23. if level then
  24. World.load_level(GameBase.world, level)
  25. end
  26. if GameBase.game and GameBase.game.level_loaded then
  27. GameBase.game.level_loaded()
  28. end
  29. end
  30. function GameBase.update(dt)
  31. -- Update world
  32. World.update(GameBase.world, dt)
  33. if TEST then
  34. -- Stop the engine when the 'ESC' key is released
  35. if Keyboard.released(Keyboard.button_id("escape")) then
  36. Device.quit()
  37. end
  38. end
  39. if not GameBase.game_camera then
  40. local delta = Vector3.zero()
  41. if Mouse.pressed(Mouse.button_id("right")) then move = true end
  42. if Mouse.released(Mouse.button_id("right")) then move = false end
  43. if move then delta = Mouse.axis(Mouse.axis_id("cursor_delta")) end
  44. GameBase.camera:update(dt, delta.x, delta.y)
  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.game_camera or 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. end