Add basic level state

This commit is contained in:
Mikko Ahlroth 2014-10-18 14:23:10 +03:00
parent b055603e8b
commit 919acb04b1
4 changed files with 138 additions and 2 deletions

46
level.lua Normal file
View file

@ -0,0 +1,46 @@
Class = require 'hump.class'
require 'settings'
-- A level manages the level datastructure containing static blocks and level
-- specific data like global physics
-- Reset color to this before drawing each object
draw_base_color = {255, 255, 255, 255}
Level = Class{
init = function(self)
self.name = 'Default'
self.entity_list = {}
self.backgroundColor = {135, 206, 250, 255}
self.world = love.physics.newWorld(GRAVITY_X, GRAVITY_Y, true)
end;
delete = function(self)
for key, entity in pairs(self.entity_list) do
entity:delete()
end
self.entity_list = nil
end;
activate = function(self)
end;
drawEntities = function(self)
for key, entity in pairs(self.entity_list) do
love.graphics.setColor(draw_base_color)
entity:draw()
end
love.graphics.setColor(draw_base_color)
end;
updateEntities = function(self, dt)
self.world:update(dt)
for key, entity in pairs(self.entity_list) do
entity:update(dt)
end
end;
}

88
level_state.lua Normal file
View file

@ -0,0 +1,88 @@
Gamestate = require 'hump.gamestate'
require 'level'
level_state = {}
players = {}
level_music = nil
function level_state:init()
end
function level_state:enter(previous, level_file)
entity_id = 1
if level_music == nil then
--level_music = love.audio.newSource("resources/audio/freeze.ogg")
--level_music:setVolume(0.5)
--level_music:setLooping(true)
--level_music:play()
end
love.graphics.setBackgroundColor({0, 0, 0, 255})
current_level = Level()
current_level.world:setCallbacks(begin_contact, end_contact, pre_solve, post_solve)
end
function level_state:draw()
current_level:drawEntities()
end
function level_state:update(dt)
if current_level.reset == true then
resetLevel()
return
end
current_level:updateEntities(dt)
end
function level_state:focus(bool)
end
function level_state:leave(bool)
current_level:delete()
current_level = nil
end
function level_state:keypressed(key, unicode)
-- Ctrl + R restarts current level.
if key == "r"
and ( love.keyboard.isDown("lctrl")
or love.keyboard.isDown("rctrl") ) then
current_level.reset = true
else
-- Do stuff
end
end
function level_state:keyreleased(key, unicode)
player:keyreleased(key)
end
function level_state:mousepressed(x, y, button)
end
function begin_contact(a, b, coll)
end
function end_contact(a, b, coll)
end
function pre_solve(a, b, coll)
end
function end_solve(a, b, coll)
end

View file

@ -1,5 +1,6 @@
Gamestate = require 'hump.gamestate'
require 'menu_state'
require 'level_state'
-- Initialize game global variables and switch to menu state
@ -12,7 +13,7 @@ function love.load()
love.physics.setMeter(30)
Gamestate.registerEvents()
Gamestate.switch(menu_state)
Gamestate.switch(level_state)
end
function love.quit()

View file

@ -3,4 +3,5 @@
PIXELS_PER_METER = 10
GRAVITY_X = 0
GRAVITY_Y = 9.81