Hey, found your library. Looks good, saved me the trouble to design the states mechanism. Though it needed some tweaking.
Here's my version of it:
Changes:
- lovelyMoon.lua & stateManager.lua are now merged in one module "lovelyMoon".
- All "lovelyMoon.*" functions (update, draw, etc.) are moved to "lovelyMoon.events.*".
- All the functions that were in a global scope (from stateManager) were moved to "lovelyMoon.*"
- Simplified adding state procedure.
- Added a "switchState(currentID, nextID)", which basically calls "disableState(id)" and then "enableState(id)".
- Added a "lovelyMoon.new(self)" function.
- Simplified "state:new()" function. all you have to do now is: "return lovelyMoon.new(self)"
Reference:
Code: Select all
lovelyMoon.event.update(dt)
lovelyMoon.event.draw()
lovelyMoon.event.keypressed(key, unicode)
lovelyMoon.event.keyreleased(key, unicode)
lovelyMoon.event.mousepressed(x, y, button)
lovelyMoon.event.mousereleased(x, y, button)
lovelyMoon.new(self) -- Initializes a new state; call from: function state:new()
lovelyMoon.addState(file, id) -- return state; file argument is used for require.
lovelyMoon.isStateEnabled(id) -- return bool
lovelyMoon.getState(id) -- return state
lovelyMoon.enableState(id)
lovelyMoon.disableState(id)
lovelyMoon.switchState(currentID, nextID)
lovelyMoon.toggleState(id)
lovelyMoon.destroyState(id)
Usage:
0. Place "lovelyMoon.lua" library somewhere in source folder (e.g. "/lib/lovelyMoon.lua")
1. In main.lua add a variable to require the lovelyMoon library and preferable create a table for states:
Code: Select all
lovelyMoon = require("lib.lovelyMoon")
states = {}
2. In function love.load() add states and enable first one:
Code: Select all
function love.load()
states.menu = lovelyMoon.addState("states.menu", "menu") -- Argument 1 is file path for require
states.game = lovelyMoon.addState("states.game", "game")
lovelyMoon.enableState("menu")
end
3. Replace love event states by lovelyMoon ones:
Code: Select all
function love.update(dt)
lovelyMoon.event.update(dt)
end
function love.draw()
lovelyMoon.event.draw()
end
function love.keypressed(key, unicode)
lovelyMoon.event.keypressed(key, unicode)
end
function love.keyreleased(key, unicode)
lovelyMoon.event.keyreleased(key, unicode)
end
function love.mousepressed(x, y, button)
lovelyMoon.event.mousepressed(x, y, button)
end
function love.mousereleased(x, y, button)
lovelyMoon.event.mousereleased(x, y, button)
end
4. Create the state script (e.g. "/states/menu.lua"):
Code: Select all
local state = {}
function state:new()
return lovelyMoon.new(self)
end
function state:load()
end
function state:close()
end
function state:enable()
end
function state:disable()
end
function state:update(dt)
end
function state:draw()
end
function state:keypressed(key, unicode)
end
function state:keyreleased(key, unicode)
end
function state:mousepressed(x, y, button)
end
function state:mousereleased(x, y, button)
end
return state
5.That's all. Add game code to states' functions.
---
Check the example for more info. It also includes a state template in "states" folder (the one in step 3).
P.S. Tell me if you find any bugs.