summaryrefslogtreecommitdiff
path: root/main.lua
blob: 5ac09d01f93abb3dc5d78a017a2500a61811d0ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
require "config"
require "utils.utils"
require "render.sprite"
require "render.speaker"
local audio = require "utils.audio"
local map = require "logic.map"
local controller = require "logic.controller"
local translator = require "i18n.translator"

function love.load()
    G = {}
    -- load font
    local myFont = love.graphics.newFont("resources/fonts/MZPXflat.ttf", 17)
    love.graphics.setFont(myFont)

    -- load sprite and initialize renderer
    sprite.load()
    local Renderer = require "render.renderer"
    RenderManager = Renderer.init()

    -- load audio
    audio.load()

    -- initialize game state
    initGame()

    speaker.speak(translator.T("welcome"), 2, true)
end

function love.draw()
    RenderManager:draw()
end

function love.update(dt)
    -- game state updates
    local gameStates = { G.BodyLifeCycleManager, G.world, G.currentRoom, G.player }
    for _, state in ipairs(gameStates) do
        state:update(dt)
    end

    -- game logic updates
    local updates = { map, controller, speaker }
    for _, entity in ipairs(updates) do
        entity.update(dt)
    end

    -- check if game has ended
    if not G.player:isAlive() then
        initGame()
    end

    -- time update
    G.time = G.time + dt
end

function love.keypressed(key)
    controller.keypressed(key)
end

function love.mousereleased(x, y, button)
    controller.mousereleased(x, y, button)
end

function onContact(a, b, contact)
    local objectA = utils.whoseBody(a:getBody())
    local objectB = utils.whoseBody(b:getBody())
    if objectA and objectB then
        if objectA.onContact then
            objectA:onContact(objectB, contact)
        end
        if objectB.onContact then
            objectB:onContact(objectA, contact)
        end
    end
end