main.lua 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. require "core/game/camera"
  2. Game = Game or {}
  3. Game = {
  4. pw = nil,
  5. rw = nil,
  6. sg = nil,
  7. sm = nil,
  8. camera = nil,
  9. player = nil,
  10. players = {},
  11. player_i = 1,
  12. }
  13. GameBase.game = Game
  14. GameBase.game_level = "game"
  15. function Game.level_loaded()
  16. Device.enable_resource_autoload(true)
  17. Game.pw = World.physics_world(GameBase.world)
  18. Game.rw = World.render_world(GameBase.world)
  19. Game.sg = World.scene_graph(GameBase.world)
  20. Game.sm = World.animation_state_machine(GameBase.world)
  21. -- Spawn camera
  22. local camera_unit = World.spawn_unit(GameBase.world, "core/units/camera")
  23. World.camera_set_orthographic_size(GameBase.world, camera_unit, 4)
  24. World.camera_set_projection_type(GameBase.world, camera_unit, "orthographic")
  25. SceneGraph.set_local_position(Game.sg, camera_unit, Vector3(0, 8, -6))
  26. SceneGraph.set_local_rotation(Game.sg, camera_unit, Quaternion.from_axis_angle(Vector3.right(), 45*(math.pi/180.0)))
  27. GameBase.game_camera = camera_unit
  28. Game.camera = FPSCamera(GameBase.world, camera_unit)
  29. -- Spawn characters
  30. Game.players[1] = World.spawn_unit(GameBase.world, "units/soldier", Vector3(-2, 0, 0))
  31. Game.players[2] = World.spawn_unit(GameBase.world, "units/princess", Vector3(2, 0, 0))
  32. Game.player = Game.players[1]
  33. end
  34. function Game.update(dt)
  35. -- Stop the engine when the 'ESC' key is released
  36. if Keyboard.released(Keyboard.button_id("escape")) then
  37. Device.quit()
  38. end
  39. -- Cycle through characters
  40. if Pad1.pressed(Pad1.button_id("shoulder_right")) then
  41. AnimationStateMachine.trigger(Game.sm, Game.player, "idle")
  42. Game.player_i = Game.player_i % #Game.players + 1
  43. Game.player = Game.players[Game.player_i]
  44. end
  45. -- Player movement
  46. local function swap_yz(vector3_xy)
  47. return Vector3(vector3_xy.x, 0, vector3_xy.y)
  48. end
  49. local player_speed = 4
  50. local pad_dir = Pad1.axis(Pad1.axis_id("left"))
  51. local player_pos = SceneGraph.local_position(Game.sg, Game.player)
  52. SceneGraph.set_local_position(Game.sg, Game.player, player_pos + swap_yz(pad_dir)*player_speed*dt)
  53. if pad_dir.x ~= 0.0 or pad_dir.y ~= 0.0 then
  54. local speed_x = AnimationStateMachine.variable_id(Game.sm, Game.player, "speed_x")
  55. local speed_y = AnimationStateMachine.variable_id(Game.sm, Game.player, "speed_y")
  56. local speed = AnimationStateMachine.variable_id(Game.sm, Game.player, "speed")
  57. AnimationStateMachine.set_variable(Game.sm, Game.player, speed_x, pad_dir.x)
  58. AnimationStateMachine.set_variable(Game.sm, Game.player, speed_y, pad_dir.y)
  59. AnimationStateMachine.set_variable(Game.sm, Game.player, speed, math.max(0.2, Vector3.length(pad_dir)))
  60. AnimationStateMachine.trigger(Game.sm, Game.player, "run")
  61. else
  62. AnimationStateMachine.trigger(Game.sm, Game.player, "idle")
  63. end
  64. end
  65. function Game.render(dt)
  66. end
  67. function Game.shutdown()
  68. end