117 lines
3.4 KiB
Lua
117 lines
3.4 KiB
Lua
local musicFilename = "/sounds/startup"
|
|
local musicChannel = g_sounds.getChannel(1)
|
|
|
|
function setMusic(filename)
|
|
musicFilename = filename
|
|
|
|
if not g_game.isOnline() then
|
|
musicChannel:stop()
|
|
musicChannel:enqueue(musicFilename, 3)
|
|
end
|
|
end
|
|
|
|
function reloadScripts()
|
|
g_textures.clearCache()
|
|
g_modules.reloadModules()
|
|
|
|
local script = '/' .. g_app.getCompactName() .. 'rc'
|
|
if g_resources.fileExists(script) then
|
|
dofile(script)
|
|
end
|
|
|
|
local message = tr('All modules and scripts were reloaded.')
|
|
|
|
modules.game_textmessage.displayGameMessage(message)
|
|
print(message)
|
|
end
|
|
|
|
function startup()
|
|
-- Play startup music (The Silver Tree, by Mattias Westlund)
|
|
musicChannel:enqueue(musicFilename, 3)
|
|
connect(g_game, { onGameStart = function() musicChannel:stop(3) end })
|
|
connect(g_game, { onGameEnd = function()
|
|
g_sounds.stopAll()
|
|
musicChannel:enqueue(musicFilename, 3)
|
|
end })
|
|
|
|
-- Check for startup errors
|
|
local errtitle = nil
|
|
local errmsg = nil
|
|
|
|
if g_graphics.getRenderer():lower():match('gdi generic') then
|
|
errtitle = tr('Graphics card driver not detected')
|
|
errmsg = tr('No graphics card detected, everything will be drawn using the CPU,\nthus the performance will be really bad.\nPlease update your graphics driver to have a better performance.')
|
|
end
|
|
|
|
-- Show entergame
|
|
if errmsg or errtitle then
|
|
local msgbox = displayErrorBox(errtitle, errmsg)
|
|
msgbox.onOk = function() EnterGame.firstShow() end
|
|
else
|
|
EnterGame.firstShow()
|
|
end
|
|
end
|
|
|
|
function init()
|
|
connect(g_app, { onRun = startup,
|
|
onExit = exit })
|
|
|
|
g_window.setMinimumSize({ width = 600, height = 480 })
|
|
g_sounds.preload(musicFilename)
|
|
|
|
-- initialize in fullscreen mode on mobile devices
|
|
if g_window.getPlatformType() == "X11-EGL" then
|
|
g_window.setFullscreen(true)
|
|
else
|
|
-- window size
|
|
local size = { width = 800, height = 600 }
|
|
size = g_settings.getSize('window-size', size)
|
|
g_window.resize(size)
|
|
|
|
-- window position, default is the screen center
|
|
local displaySize = g_window.getDisplaySize()
|
|
local defaultPos = { x = (displaySize.width - size.width)/2,
|
|
y = (displaySize.height - size.height)/2 }
|
|
local pos = g_settings.getPoint('window-pos', defaultPos)
|
|
pos.x = math.max(pos.x, 0)
|
|
pos.y = math.max(pos.y, 0)
|
|
g_window.move(pos)
|
|
|
|
-- window maximized?
|
|
local maximized = g_settings.getBoolean('window-maximized', false)
|
|
if maximized then g_window.maximize() end
|
|
end
|
|
|
|
g_window.setTitle(g_app.getName())
|
|
g_window.setIcon('/images/clienticon')
|
|
|
|
-- poll resize events
|
|
g_window.poll()
|
|
|
|
g_keyboard.bindKeyDown('Ctrl+Shift+R', reloadScripts)
|
|
|
|
-- generate machine uuid, this is a security measure for storing passwords
|
|
if not g_crypt.setMachineUUID(g_configs.get('uuid')) then
|
|
g_configs.set('uuid', g_crypt.getMachineUUID())
|
|
g_configs.save()
|
|
end
|
|
end
|
|
|
|
function terminate()
|
|
disconnect(g_app, { onRun = startup,
|
|
onExit = exit })
|
|
-- save window configs
|
|
g_settings.set('window-size', g_window.getUnmaximizedSize())
|
|
g_settings.set('window-pos', g_window.getUnmaximizedPos())
|
|
g_settings.set('window-maximized', g_window.isMaximized())
|
|
|
|
local protocolVersion = g_game.getProtocolVersion()
|
|
if protocolVersion ~= 0 then
|
|
g_settings.set('protocol-version', protocolVersion)
|
|
end
|
|
end
|
|
|
|
function exit()
|
|
g_logger.info("Exiting application..")
|
|
end
|