SNKRX/engine/init.lua

170 lines
6.1 KiB
Lua
Raw Normal View History

2021-02-18 05:11:25 +01:00
local path = ...
if not path:find("init") then
require(path .. ".datastructures.string")
require(path .. ".datastructures.table")
require(path .. ".external")
require(path .. ".graphics.graphics")
require(path .. ".game.object")
require(path .. ".system")
require(path .. ".datastructures.graph")
require(path .. ".datastructures.grid")
require(path .. ".game.gameobject")
require(path .. ".game.group")
require(path .. ".game.state")
require(path .. ".game.physics")
require(path .. ".game.steering")
require(path .. ".graphics.animation")
require(path .. ".graphics.camera")
require(path .. ".graphics.canvas")
require(path .. ".graphics.color")
require(path .. ".graphics.font")
require(path .. ".graphics.image")
require(path .. ".graphics.shader")
require(path .. ".graphics.text")
require(path .. ".graphics.tileset")
require(path .. ".map.solid")
require(path .. ".map.tilemap")
require(path .. ".math.polygon")
require(path .. ".math.chain")
require(path .. ".math.circle")
require(path .. ".math.line")
require(path .. ".math.math")
require(path .. ".math.random")
require(path .. ".math.rectangle")
require(path .. ".math.spring")
require(path .. ".math.triangle")
require(path .. ".math.vector")
require(path .. ".game.trigger")
require(path .. ".game.input")
require(path .. ".sound")
require(path .. ".game.parent")
require(path .. ".game.springs")
require(path .. ".game.flashes")
require(path .. ".game.hitfx")
end
function engine_run(config)
if not web then
love.filesystem.setIdentity(config.game_name)
2021-03-29 20:26:10 +02:00
steam.init()
2021-05-17 10:05:48 +02:00
system.load_state()
2021-02-18 05:11:25 +01:00
local _, _, flags = love.window.getMode()
local window_width, window_height = love.window.getDesktopDimensions(flags.display)
if config.window_width ~= 'max' then window_width = config.window_width end
if config.window_height ~= 'max' then window_height = config.window_height end
local limits = love.graphics.getSystemLimits()
local anisotropy = limits.anisotropy
msaa = limits.canvasmsaa
if config.msaa ~= 'max' then msaa = config.msaa end
if config.anisotropy ~= 'max' then anisotropy = config.anisotropy end
gw, gh = config.game_width or 480, config.game_height or 270
sx, sy = window_width/(config.game_width or 480), window_height/(config.game_height or 270)
ww, wh = window_width, window_height
2021-05-17 10:05:48 +02:00
if state.sx and state.sy then
sx, sy = state.sx, state.sy
2021-06-23 05:53:37 +02:00
love.window.setMode(state.sx*gw, state.sy*gh, {vsync = config.vsync, msaa = msaa or 0, display = config.display})
2021-05-17 10:05:48 +02:00
else
2021-05-21 08:17:31 +02:00
state.sx, state.sy = sx, sy
2021-06-23 05:53:37 +02:00
love.window.setMode(window_width, window_height, {vsync = config.vsync, msaa = msaa or 0, display = config.display})
2021-05-17 10:05:48 +02:00
end
2021-02-18 05:11:25 +01:00
love.window.setTitle(config.game_name)
else
gw, gh = config.game_width or 480, config.game_height or 270
sx, sy = 2, 2
ww, wh = 960, 540
end
2021-05-17 10:05:48 +02:00
love.window.setIcon(love.image.newImageData('assets/images/icon.png'))
2021-02-18 05:11:25 +01:00
love.graphics.setBackgroundColor(0, 0, 0, 1)
love.graphics.setColor(1, 1, 1, 1)
love.joystick.loadGamepadMappings("engine/gamecontrollerdb.txt")
graphics.set_line_style(config.line_style or "rough")
graphics.set_default_filter(config.default_filter or "nearest", config.default_filter or "nearest", anisotropy or 0)
combine = Shader("default.vert", "combine.frag")
replace = Shader("default.vert", "replace.frag")
full_combine = Shader("default.vert", "full_combine.frag")
input = Input()
input:bind_all()
for k, v in pairs(config.input or {}) do input:bind(k, v) end
random = Random()
trigger = Trigger()
camera = Camera(gw/2, gh/2)
mouse = Vector(0, 0)
last_mouse = Vector(0, 0)
mouse_dt = Vector(0, 0)
init()
if love.timer then love.timer.step() end
if not web then
_, _, flags = love.window.getMode()
fixed_dt = 1/flags.refreshrate
else fixed_dt = 1/60 end
local accumulator = fixed_dt
local dt = 0
frame, time = 0, 0
if not web then refresh_rate = flags.refreshrate
else refresh_rate = 60 end
return function()
if love.event then
love.event.pump()
for name, a, b, c, d, e, f in love.event.poll() do
if name == "quit" then
if not love.quit or not love.quit() then
2021-04-25 06:09:43 +02:00
system.save_state()
2021-03-29 20:26:10 +02:00
steam.shutdown()
2021-02-18 05:11:25 +01:00
return a or 0
end
elseif name == "keypressed" then input.keyboard_state[a] = true; input.last_key_pressed = a
elseif name == "keyreleased" then input.keyboard_state[a] = false
elseif name == "mousepressed" then input.mouse_state[input.mouse_buttons[c]] = true; input.last_key_pressed = input.mouse_buttons[c]
elseif name == "mousereleased" then input.mouse_state[input.mouse_buttons[c]] = false
elseif name == "wheelmoved" then if b == 1 then input.mouse_state.wheel_up = true elseif b == -1 then input.mouse_state.wheel_down = true end
elseif name == "gamepadpressed" then input.gamepad_state[input.index_to_gamepad_button[b]] = true; input.last_key_pressed = input.index_to_gamepad_button[b]
elseif name == "gamepadreleased" then input.gamepad_state[input.index_to_gamepad_button[b]] = false
elseif name == "gamepadaxis" then input.gamepad_axis[input.index_to_gamepad_axis[b]] = c
elseif name == "textinput" then input:textinput(a) end
end
end
if love.timer then dt = love.timer.step() end
2021-03-29 20:26:10 +02:00
steam.runCallbacks()
2021-02-18 05:11:25 +01:00
accumulator = accumulator + dt
while accumulator >= fixed_dt do
frame = frame + 1
input:update(fixed_dt)
trigger:update(fixed_dt)
camera:update(fixed_dt)
local mx, my = love.mouse.getPosition()
mouse:set(mx/sx, my/sy)
mouse_dt:set(mouse.x - last_mouse.x, mouse.y - last_mouse.y)
2021-02-20 02:54:54 +01:00
update(fixed_dt)
2021-02-18 05:11:25 +01:00
system.update()
input.last_key_pressed = nil
last_mouse:set(mouse.x, mouse.y)
accumulator = accumulator - fixed_dt
time = time + fixed_dt
end
if love.graphics and love.graphics.isActive() then
love.graphics.origin()
love.graphics.clear(love.graphics.getBackgroundColor())
draw()
love.graphics.present()
end
if love.timer then love.timer.sleep(0.001) end
end
end