Moved game loop from main.lua to specific script, sliced it into parts

This commit is contained in:
lustlion 2022-01-18 13:53:58 +01:00
parent d0e849bf3d
commit 0b18fcd369
5 changed files with 103 additions and 74 deletions

View File

@ -18,3 +18,5 @@ require "data/scripts/objects"
require "data/scripts/debug" require "data/scripts/debug"
require "data/scripts/keybind" require "data/scripts/keybind"
require "data/scripts/pause" require "data/scripts/pause"
-- game loop
require "data/scripts/game"

View File

@ -4,7 +4,7 @@ Camera = {
height = 0 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.x = x-self.width/game.scale/2
self.pos.y = y-self.height/game.scale/2 self.pos.y = y-self.height/game.scale/2
if not (cx == nil or cy == nil) then 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) self.pos.y = math.floor(self.pos.y)
end end
function Camera:ScreenAt(x,y) function Camera:positionAt(x,y)
self.pos.x = math.floor(x/self.width)*self.width self.pos.x = math.floor(x/self.width)*self.width
self.pos.y = math.floor(y/self.height)*self.height self.pos.y = math.floor(y/self.height)*self.height
end end

87
data/scripts/game.lua Normal file
View File

@ -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

View File

@ -65,21 +65,9 @@ function love.update(dt)
if editor_mode then if editor_mode then
stepEditor()
AnimateTiles()
else else
-- GAME STEP stepGame()
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
end end
end end
@ -96,7 +84,6 @@ function love.wheelmoved(_, y)
end end
function love.keypressed(key) function love.keypressed(key)
if key == "escape" then if key == "escape" then
if do_pause then if do_pause then
do_pause = false do_pause = false
@ -139,60 +126,13 @@ function love.keypressed(key)
end end
function love.draw() function love.draw()
if game.width ~= love.graphics.getWidth() or game.height ~= love.graphics.getHeight() then
-- saveproof to game resize game.width = love.graphics.getWidth()
if game.width ~= love.graphics.getWidth() or game.height ~= love.graphics.getHeight() then game.height = love.graphics.getHeight()
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()
end end
LevelDisplayForeground() if editor_mode then
drawEditor()
-- Save color else
local pcr, pcg, pcb, pca = love.graphics.getColor() drawGame()
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()
end 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 end

View File

@ -2,6 +2,9 @@
(X) REHANDLE ANIMATIONS (X) REHANDLE ANIMATIONS
(X) 3 COLOR PALETTE (GOLD) (X) 3 COLOR PALETTE (GOLD)
(X) MASKS FUNCTIONALITY (X) MASKS FUNCTIONALITY
(X) MAKE PHYSICS CONSISTENT
(X) MAKE HITBOXES
(X) PHYSICS BY FRAME
( ) MAKE ARROW CANVAS SO THAT ( ) MAKE ARROW CANVAS SO THAT
ARROWS WHEN STUCK CAN BE STORED ARROWS WHEN STUCK CAN BE STORED
AS IMAGE AND NOT ENTITIES!!! AS IMAGE AND NOT ENTITIES!!!
@ -10,6 +13,3 @@ AS IMAGE AND NOT ENTITIES!!!
(~) DO FAIRY (~) DO FAIRY
( ) DO FLIES ( ) DO FLIES
( ) DO UI ( ) DO UI
> (X) MAKE PHYSICS CONSISTENT
> > (X) MAKE HITBOXES
> > (X) PHYSICS BY FRAME