mirror of
https://gitea.com/SweetSea-ButImNotSweet/tromi_mobile.git
synced 2025-01-08 17:33:09 +08:00
Design a error screen
This commit is contained in:
129
main.lua
129
main.lua
@@ -22,6 +22,7 @@ LOADING_IMAGE_FILE = love.graphics.newImage('res/loading.png')
|
|||||||
--- Show the loading text while we are loading resources<br>
|
--- Show the loading text while we are loading resources<br>
|
||||||
--- **WARNING**: should only be used while loading the game!
|
--- **WARNING**: should only be used while loading the game!
|
||||||
function ShowLoadingText(thing)
|
function ShowLoadingText(thing)
|
||||||
|
love.resize(love.graphics.getDimensions())
|
||||||
love.graphics.replaceTransform(GLOBAL_TRANSFORM)
|
love.graphics.replaceTransform(GLOBAL_TRANSFORM)
|
||||||
love.graphics.setFont(love.graphics.newFont(20))
|
love.graphics.setFont(love.graphics.newFont(20))
|
||||||
love.graphics.clear()
|
love.graphics.clear()
|
||||||
@@ -161,6 +162,7 @@ function love.keypressed(key, scancode)
|
|||||||
elseif scancode == "f2" and SCENE.title ~= "Input Config" and SCENE.title ~= "Game" then
|
elseif scancode == "f2" and SCENE.title ~= "Input Config" and SCENE.title ~= "Game" then
|
||||||
SCENE = InputConfigScene()
|
SCENE = InputConfigScene()
|
||||||
elseif scancode == "f12" then REQUEST_BREAK()
|
elseif scancode == "f12" then REQUEST_BREAK()
|
||||||
|
elseif scancode == "f11" then error("TEST")
|
||||||
-- function keys are reserved
|
-- function keys are reserved
|
||||||
elseif string.match(scancode, "^f[1-9]$") or string.match(scancode, "^f1[0-2]+$") then
|
elseif string.match(scancode, "^f[1-9]$") or string.match(scancode, "^f1[0-2]+$") then
|
||||||
return
|
return
|
||||||
@@ -368,6 +370,133 @@ function love.run()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function love.errorhandler(msg)
|
||||||
|
local showScreenshot = false
|
||||||
|
local errorCopied = false
|
||||||
|
|
||||||
|
-- Reset audio.
|
||||||
|
if love.audio then love.audio.stop() end
|
||||||
|
|
||||||
|
-- Render everything again in a canva
|
||||||
|
love.graphics.origin()
|
||||||
|
local screenshot_canva, screenshot_canva_scale
|
||||||
|
local ok, _ = pcall(function()
|
||||||
|
if love.graphics.getSystemLimits().texturesize >= 1280 then
|
||||||
|
screenshot_canva = love.graphics.newCanvas(1280, 960)
|
||||||
|
screenshot_canva_scale = 0.5
|
||||||
|
else
|
||||||
|
error()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
if not ok then
|
||||||
|
screenshot_canva = love.graphics.newCanvas(640, 480)
|
||||||
|
screenshot_canva_scale = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
love.graphics.setCanvas(screenshot_canva)
|
||||||
|
pcall(
|
||||||
|
function()
|
||||||
|
love.graphics.origin()
|
||||||
|
local transformer = love.math.newTransform(0, 0, 0, 2, 2)
|
||||||
|
love.graphics.replaceTransform(transformer)
|
||||||
|
SCENE:render()
|
||||||
|
end
|
||||||
|
)
|
||||||
|
love.graphics.setCanvas()
|
||||||
|
|
||||||
|
-- Handling the error
|
||||||
|
local err={"Error:"..msg}
|
||||||
|
local c=2
|
||||||
|
for l in debug.traceback("",2):gmatch("(.-)\n") do
|
||||||
|
if c>2 then
|
||||||
|
if not l:find("boot") then
|
||||||
|
err[c]=l:gsub("^\t*","")
|
||||||
|
c=c+1
|
||||||
|
end
|
||||||
|
else
|
||||||
|
err[2]="Traceback"
|
||||||
|
c=3
|
||||||
|
end
|
||||||
|
end
|
||||||
|
print("\n"..table.concat(err,"\n",1,c-2))
|
||||||
|
local p = table.concat(err,"\n", 4)
|
||||||
|
|
||||||
|
local function draw()
|
||||||
|
love.graphics.origin()
|
||||||
|
love.graphics.replaceTransform(GLOBAL_TRANSFORM)
|
||||||
|
love.graphics.clear()
|
||||||
|
|
||||||
|
love.graphics.setColor(1, 1, 1)
|
||||||
|
love.graphics.draw(screenshot_canva, 0, 0, 0, screenshot_canva_scale)
|
||||||
|
|
||||||
|
if not showScreenshot then
|
||||||
|
love.graphics.setColor(0, 0, 0, 0.75)
|
||||||
|
love.graphics.rectangle("fill", 0, 0, 640, 480)
|
||||||
|
drawText([[
|
||||||
|
OH NO! Tromi has crashed.
|
||||||
|
Since this is not the official port, please do not report any bugs to mycophobia.
|
||||||
|
Instead, report this to me via my Discord ``sweetsea`` with a screenshot of this.
|
||||||
|
|
||||||
|
REMEMBER TO SCREENSHOT BECAUSE ERROR INFO IS NOT SAVED!
|
||||||
|
|
||||||
|
Ctrl + C: copy the error info | If you click or tap, a window appear with 4 options:
|
||||||
|
Space : show/hide screenshot | OK: Quit Copy: copy error info
|
||||||
|
Escape : Quit | Cancel: Go back Show: show/hide screenshot
|
||||||
|
|
||||||
|
Traceback:]]..(errorCopied and " (Copied to clipboard)" or ""),
|
||||||
|
20, 10, 620, "left")
|
||||||
|
drawText(p, 40, 200, 600, "left")
|
||||||
|
end
|
||||||
|
|
||||||
|
love.graphics.present()
|
||||||
|
end
|
||||||
|
|
||||||
|
local fullErrorText = p
|
||||||
|
local function copyToClipboard()
|
||||||
|
love.system.setClipboardText(fullErrorText)
|
||||||
|
errorCopied = true
|
||||||
|
end
|
||||||
|
|
||||||
|
local buttons = {"OK", "Cancel", "Copy", "Show"}
|
||||||
|
|
||||||
|
return function()
|
||||||
|
love.event.pump()
|
||||||
|
|
||||||
|
for e, a, b, c in love.event.poll() do
|
||||||
|
if e == "quit" then
|
||||||
|
return 1
|
||||||
|
elseif e == "keypressed" and a == "escape" then
|
||||||
|
return 1
|
||||||
|
elseif e == "keypressed" and a == "c" and love.keyboard.isDown("lctrl", "rctrl") then
|
||||||
|
copyToClipboard()
|
||||||
|
elseif e == "keypressed" and a == "space" then
|
||||||
|
showScreenshot = not showScreenshot
|
||||||
|
elseif e == "keypressed" and a == "f4" then
|
||||||
|
SETTINGS["fullscreen"] = not SETTINGS["fullscreen"]
|
||||||
|
love.window.setFullscreen(SETTINGS["fullscreen"])
|
||||||
|
elseif e == "touchpressed" or e == "mousepressed" then
|
||||||
|
local pressed = love.window.showMessageBox("Quit Tromi?", "Remember to save a copy of screenshot, since they are not saved!", buttons)
|
||||||
|
if pressed == 1 then
|
||||||
|
return 1
|
||||||
|
elseif pressed == 3 then
|
||||||
|
copyToClipboard()
|
||||||
|
elseif pressed == 4 then
|
||||||
|
showScreenshot = not showScreenshot
|
||||||
|
end
|
||||||
|
elseif e == "resize" then
|
||||||
|
love.resize(love.graphics.getDimensions())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
draw()
|
||||||
|
|
||||||
|
if love.timer then
|
||||||
|
love.timer.sleep(0.1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
local minos = {'R_d', 'O_d', 'Y_d', 'G_d', 'C_d', 'B_d', 'M_d'}
|
local minos = {'R_d', 'O_d', 'Y_d', 'G_d', 'C_d', 'B_d', 'M_d'}
|
||||||
local main_bg_grid = {}
|
local main_bg_grid = {}
|
||||||
for x=1, 40 do
|
for x=1, 40 do
|
||||||
|
|||||||
@@ -4,8 +4,7 @@ GameScene.title = "Game"
|
|||||||
local tas = false
|
local tas = false
|
||||||
|
|
||||||
function GameScene:new(player_name, replay_file, replay_grade)
|
function GameScene:new(player_name, replay_file, replay_grade)
|
||||||
local game_mode = require 'game.gamemode'
|
game_mode = require 'game.gamemode'
|
||||||
local ruleset
|
|
||||||
|
|
||||||
VCTRL[9].show = false; VCTRL[10].show = false -- Hide SELECT and QUIT button
|
VCTRL[9].show = false; VCTRL[10].show = false -- Hide SELECT and QUIT button
|
||||||
if PENTO_MODE then
|
if PENTO_MODE then
|
||||||
|
|||||||
Reference in New Issue
Block a user