diff --git a/data/scripts.lua b/data/scripts.lua index 176c3b7..61fc55d 100644 --- a/data/scripts.lua +++ b/data/scripts.lua @@ -18,3 +18,5 @@ require "data/scripts/objects" require "data/scripts/debug" require "data/scripts/keybind" require "data/scripts/pause" +-- game loop +require "data/scripts/game" diff --git a/data/scripts/camera.lua b/data/scripts/camera.lua index 000a58e..c0cf5d0 100644 --- a/data/scripts/camera.lua +++ b/data/scripts/camera.lua @@ -4,7 +4,7 @@ Camera = { height = 0 } -function Camera:CenterAt(x,y,cx,cy) +function Camera:positionCenterAt(x,y,cx,cy) self.pos.x = x-self.width/game.scale/2 self.pos.y = y-self.height/game.scale/2 if not (cx == nil or cy == nil) then @@ -19,7 +19,7 @@ function Camera:CenterAt(x,y,cx,cy) self.pos.y = math.floor(self.pos.y) end -function Camera:ScreenAt(x,y) +function Camera:positionAt(x,y) self.pos.x = math.floor(x/self.width)*self.width self.pos.y = math.floor(y/self.height)*self.height end diff --git a/data/scripts/game.lua b/data/scripts/game.lua new file mode 100644 index 0000000..28d7a6b --- /dev/null +++ b/data/scripts/game.lua @@ -0,0 +1,87 @@ +function stepEditor() + AnimateTiles() +end + +function stepGame() + -- GAME STEP + if not do_pause then + SetCollisionFlags(main_Player) + for _, enty in pairs(LoadedEntities) do + enty:Smart() + enty:DoPhysics() + end + AnimateTiles() + Camera:positionCenterAt(main_Player.pos.x, main_Player.pos.y) + --camera:positionAt(main_Player.pos.x, main_Player.pos.y,game.width,game.height) + end +end + +function drawEditor() + if game.width ~= love.graphics.getWidth() or game.height ~= love.graphics.getHeight() then + Camera.height = game.height + Camera.width = game.width + Canvas.Darkness:release() + Canvas.Darkness = CreateDarkness() + love.graphics.setCanvas(Canvas.Darkness) + SetDarkness() + love.graphics.setCanvas() + end + + gameworldDraw() +end + +function drawGame() + -- saveproof to game resize + if game.width ~= love.graphics.getWidth() or game.height ~= love.graphics.getHeight() then + Camera.height = game.height + Camera.width = game.width + Canvas.Darkness:release() + Canvas.Darkness = CreateDarkness() + love.graphics.setCanvas(Canvas.Darkness) + SetDarkness() + love.graphics.setCanvas() + end + + gameworldDraw() + gameworldLighting() + + -- HUD + textScale = 0.5 + + --debug + if debug then DebugUI() end + if debug_collision then + DebugColisions() + DebugEntities() + end + + -- reset color + if do_pause then PauseUI() end +end + +function gameworldDraw() + local pcr, pcg, pcb, pca = love.graphics.getColor() + + love.graphics.scale(game.scale,game.scale) + love.graphics.setColor(1,1,1,1) + LevelDisplayBackground() + for _, enty in pairs(LoadedEntities) do + enty:HandleAnimation() + end + LevelDisplayForeground() + + love.graphics.setColor(pcr, pcg, pcb, pca) +end + +function gameworldLighting() + -- work on lighting canvas + love.graphics.setCanvas(Canvas.Darkness) + SetDarkness() + DoLights() + DoBorder() + -- apply to game canvas + love.graphics.setColor(1,1,1,1) + love.graphics.setCanvas() + love.graphics.scale(1,1) + DrawDarkness() +end diff --git a/main.lua b/main.lua index c112a4b..8eedf9f 100644 --- a/main.lua +++ b/main.lua @@ -65,21 +65,9 @@ function love.update(dt) if editor_mode then - - - AnimateTiles() + stepEditor() else - -- GAME STEP - if not do_pause then - SetCollisionFlags(main_Player) - for _, enty in pairs(LoadedEntities) do - enty:Smart() - enty:DoPhysics() - end - AnimateTiles() - Camera:CenterAt(main_Player.pos.x, main_Player.pos.y) - --camera:ScreenAt(main_Player.pos.x, main_Player.pos.y,game.width,game.height) - end + stepGame() end end @@ -96,7 +84,6 @@ function love.wheelmoved(_, y) end function love.keypressed(key) - if key == "escape" then if do_pause then do_pause = false @@ -139,60 +126,13 @@ function love.keypressed(key) end function love.draw() - - -- saveproof to game resize - if game.width ~= love.graphics.getWidth() or game.height ~= love.graphics.getHeight() then - game.width = love.graphics.getWidth() - game.height = love.graphics.getHeight() - Camera.height = game.height - Camera.width = game.width - Canvas.Darkness:release() - Canvas.Darkness = CreateDarkness() - love.graphics.setCanvas(Canvas.Darkness) - SetDarkness() - love.graphics.setCanvas() - end - - -- GAME WORLD - love.graphics.scale(game.scale,game.scale) - love.graphics.setColor(1,1,1,1) - LevelDisplayBackground() - for _, enty in pairs(LoadedEntities) do - enty:HandleAnimation() + if game.width ~= love.graphics.getWidth() or game.height ~= love.graphics.getHeight() then + game.width = love.graphics.getWidth() + game.height = love.graphics.getHeight() end - LevelDisplayForeground() - - -- Save color - local pcr, pcg, pcb, pca = love.graphics.getColor() - - love.graphics.setCanvas(Canvas.Darkness) - SetDarkness() - DoLights() - DoBorder() - - -- reset to screen - love.graphics.setColor(1,1,1,1) - love.graphics.setCanvas() - love.graphics.scale(1,1) - DrawDarkness() - -- HUD - -- Scale control - textScale = 0.5 - - --debug - if debug then DebugUI() end - if debug_collision then - love.graphics.setCanvas(Canvas.Darkness) - SetDarkness() - love.graphics.setCanvas() - --DrawDarkness() - DebugColisions() - DebugEntities() + if editor_mode then + drawEditor() + else + drawGame() end - - -- reset color - love.graphics.setColor(pcr,pcg,pcb,pca) - local pcr, pcg, pcb, pca = love.graphics.getColor() - if do_pause then PauseUI() end - love.graphics.setColor(pcr,pcg,pcb,pca) end diff --git a/to_do.txt b/to_do.txt index 3703d00..0dbd9eb 100644 --- a/to_do.txt +++ b/to_do.txt @@ -2,6 +2,9 @@ (X) REHANDLE ANIMATIONS (X) 3 COLOR PALETTE (GOLD) (X) MASKS FUNCTIONALITY +(X) MAKE PHYSICS CONSISTENT +(X) MAKE HITBOXES +(X) PHYSICS BY FRAME ( ) MAKE ARROW CANVAS SO THAT ARROWS WHEN STUCK CAN BE STORED AS IMAGE AND NOT ENTITIES!!! @@ -10,6 +13,3 @@ AS IMAGE AND NOT ENTITIES!!! (~) DO FAIRY ( ) DO FLIES ( ) DO UI -> (X) MAKE PHYSICS CONSISTENT -> > (X) MAKE HITBOXES -> > (X) PHYSICS BY FRAME