mirror of
https://gitea.com/SweetSea-ButImNotSweet/tromi_mobile.git
synced 2025-01-08 17:33:09 +08:00
Make a new FILE API and add a simple error screen in case most thing went down
This commit is contained in:
@@ -140,7 +140,7 @@ end
|
||||
|
||||
function GameMode:readGradeHistory()
|
||||
if love.filesystem.getInfo(SAVE_DIR..self.player_name.."_grade_history.sav") then
|
||||
self.grade_history = bitser.loadLoveFile(SAVE_DIR..self.player_name.."_grade_history.sav")
|
||||
self.grade_history = FILE.read(SAVE_DIR..self.player_name.."_grade_history.sav")
|
||||
else
|
||||
self.grade_history = {1,2,0,0}
|
||||
end
|
||||
@@ -148,13 +148,13 @@ function GameMode:readGradeHistory()
|
||||
self.starting_grade = self.grade
|
||||
if self.grade > 1 then
|
||||
local temp_grade = copy(self.grade_history); temp_grade[2] = 0
|
||||
bitser.dumpLoveFile(SAVE_DIR..self.player_name.."_grade_history.sav", temp_grade)
|
||||
FILE.write(SAVE_DIR..self.player_name.."_grade_history.sav", temp_grade)
|
||||
end
|
||||
end
|
||||
|
||||
function GameMode:readHiScores()
|
||||
if love.filesystem.getInfo(HIscoreFILE) then
|
||||
self.hi_scores = bitser.loadLoveFile(HIscoreFILE)
|
||||
self.hi_scores = FILE.read(HIscoreFILE)
|
||||
else
|
||||
self.hi_scores = {"TRO",0,"MIT",0,"ROM",0,"ITR",0,"OMI",0}
|
||||
end
|
||||
@@ -220,7 +220,7 @@ function GameMode:updateHiScores()
|
||||
self.hi_scores[score_position] = self.grade_score
|
||||
hiscore_pos = {score_position-1, score_position}
|
||||
end
|
||||
bitser.dumpLoveFile(HIscoreFILE, self.hi_scores)
|
||||
FILE.write(HIscoreFILE, self.hi_scores)
|
||||
return hiscore_pos
|
||||
end
|
||||
|
||||
@@ -684,7 +684,7 @@ function GameMode:onGameOver()
|
||||
self:updateGradeHistory()
|
||||
end
|
||||
hiscore_pos = self:updateHiScores()
|
||||
bitser.dumpLoveFile(SAVE_DIR..self.player_name.."_grade_history.sav", self.grade_history)
|
||||
FILE.write(SAVE_DIR..self.player_name.."_grade_history.sav", self.grade_history)
|
||||
self.did_grades = true
|
||||
end
|
||||
self:drawEndScoringInfo()
|
||||
|
||||
11
load.lua
11
load.lua
@@ -1,15 +1,16 @@
|
||||
-- Bigint library
|
||||
bigint = require "libs.bigint.bigint"
|
||||
number_names = require "libs.bigint.named-powers-of-ten"
|
||||
require "libs.simple-slider"
|
||||
|
||||
-- Fonts
|
||||
FONT_tromi = love.graphics.newFont('res/fonts/monofonto rg.otf', 28)
|
||||
FONT_big = love.graphics.newFont('res/fonts/monofonto rg.otf', 56)
|
||||
|
||||
local font_height = FONT_tromi:getHeight() * 0.5
|
||||
local font_big_height = FONT_big:getHeight() * 0.5
|
||||
|
||||
-- Bigint library
|
||||
bigint = require "libs.bigint.bigint"
|
||||
number_names = require "libs.bigint.named-powers-of-ten"
|
||||
|
||||
-- BUTTON library
|
||||
require "libs.simple-slider"
|
||||
BUTTON = require "libs.simple-button"
|
||||
BUTTON.setDefaultOption{
|
||||
draw = function(self)
|
||||
|
||||
94
main.lua
94
main.lua
@@ -2,7 +2,6 @@ if os.getenv("LOCAL_LUA_DEBUGGER_VSCODE")=="1" then
|
||||
LLDEBUGGER=require('lldebugger')
|
||||
LLDEBUGGER.start()
|
||||
end
|
||||
|
||||
require 'funcs'
|
||||
DEBUG_showKey = false
|
||||
|
||||
@@ -36,6 +35,7 @@ end
|
||||
|
||||
function love.load()
|
||||
math.randomseed(os.time())
|
||||
require "modules.file" "binser"
|
||||
require "settings"
|
||||
|
||||
-- Window stuffs
|
||||
@@ -48,8 +48,8 @@ function love.load()
|
||||
|
||||
-- Now it's real time to load all stuffs!
|
||||
require "load" -- Most game's resources are loaded in here
|
||||
require "game.vctrl" -- VCTRL
|
||||
require "modules.scene"
|
||||
require "game.vctrl" -- VCTRL
|
||||
|
||||
function SCENE.update()
|
||||
SCENE = SETTINGS.firstTime and InputConfigScene(true) or TitleScene()
|
||||
@@ -367,35 +367,6 @@ function love.errorhandler(msg)
|
||||
local errorCopied = false
|
||||
local enter_fullscreen = SETTINGS and SETTINGS["fullscreen"] or false
|
||||
|
||||
-- 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()
|
||||
|
||||
love.audio.stop()
|
||||
|
||||
-- Handling the error
|
||||
local err={"Error:"..msg}
|
||||
local c=2
|
||||
@@ -411,7 +382,62 @@ function love.errorhandler(msg)
|
||||
end
|
||||
end
|
||||
print("\n"..table.concat(err,"\n",1,c-2))
|
||||
local p = table.concat(err,"\n", 4)
|
||||
local tracebacks = table.concat(err,"\n", 4)
|
||||
|
||||
if drawText == nil then
|
||||
pcall(function()
|
||||
FONT_tromi = love.graphics.newFont('res/fonts/monofonto rg.otf', 20)
|
||||
require "funcs"
|
||||
end)
|
||||
if drawText == nil then
|
||||
love.window.setMode(640, 480, {resizable = true})
|
||||
return function() -- If "funcs" failed to load, we can only return a more simple version of error screen
|
||||
love.event.pump()
|
||||
for e, a, b, c in love.event.poll() do
|
||||
if e == "quit" then return 1 end
|
||||
end
|
||||
|
||||
love.graphics.origin()
|
||||
love.graphics.clear()
|
||||
love.graphics.setColor(1, 1, 1)
|
||||
love.graphics.setFont(FONT_tromi)
|
||||
love.graphics.printf(
|
||||
err[1]:sub(7).."\nTraceback:\n"..tracebacks,
|
||||
30, 30, love.graphics.getWidth() - 10, "left"
|
||||
)
|
||||
love.graphics.present()
|
||||
if love.timer then love.timer.sleep(0.1) end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Try to create 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
|
||||
-- Then draw everything again
|
||||
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.audio.stop()
|
||||
love.graphics.setCanvas()
|
||||
|
||||
local function draw()
|
||||
love.graphics.origin()
|
||||
@@ -436,7 +462,7 @@ Space : show/hide screenshot | OK : Quit Copy: copy error info
|
||||
Escape : Quit | Cancel: Go back Show: show/hide screenshot
|
||||
]], 20, 10, 620, "left")
|
||||
|
||||
drawText(err[1]:sub(7).."\nTraceback:"..(errorCopied and " (Copied to clipboard)\n" or "\n")..p, 20, 180, 620, "left")
|
||||
drawText(err[1]:sub(7).."\nTraceback:"..(errorCopied and " (Copied to clipboard)\n" or "\n")..tracebacks, 20, 180, 620, "left")
|
||||
else
|
||||
love.graphics.setColor(0, 0, 0, 0.8)
|
||||
love.graphics.rectangle("fill", 15, 450, 400, 25, 5, 5)
|
||||
@@ -446,7 +472,7 @@ Escape : Quit | Cancel: Go back Show: show/hide screensh
|
||||
love.graphics.present()
|
||||
end
|
||||
|
||||
local fullErrorText = p
|
||||
local fullErrorText = tracebacks
|
||||
local function copyToClipboard()
|
||||
love.system.setClipboardText(fullErrorText)
|
||||
errorCopied = true
|
||||
|
||||
41
modules/file.lua
Normal file
41
modules/file.lua
Normal file
@@ -0,0 +1,41 @@
|
||||
local FILE = {}
|
||||
local binser = require "libs.binser"
|
||||
local bitser = require "libs.bitser"
|
||||
|
||||
local serializer_used
|
||||
|
||||
function FILE.serialize(data)
|
||||
if serializer_used == 'bitser' then
|
||||
return bitser.dumps(data)
|
||||
else
|
||||
return binser.serialize(data)
|
||||
end
|
||||
end
|
||||
|
||||
function FILE.deserialize(data)
|
||||
if serializer_used == 'bitser' then
|
||||
return bitser.loads(data)
|
||||
else
|
||||
return binser.deserialize(data)[1]
|
||||
end
|
||||
end
|
||||
|
||||
function FILE.read(path)
|
||||
if love.filesystem.getInfo(path) then
|
||||
return FILE.deserialize(love.filesystem.read(path))
|
||||
else
|
||||
error("No file: "..path)
|
||||
end
|
||||
end
|
||||
|
||||
function FILE.write(path, data)
|
||||
love.filesystem.write(path, FILE.serialize(data))
|
||||
end
|
||||
|
||||
---@param lib_name 'bitser'|'binser'
|
||||
---Init the FILE module with chosen serializer
|
||||
return function(lib_name)
|
||||
assert(lib_name == 'bitser' or lib_name == 'binser', '[lib_name] must be "bitser" or "binser"')
|
||||
serializer_used = lib_name
|
||||
_G.FILE = FILE
|
||||
end
|
||||
@@ -56,7 +56,7 @@ function NameEntryScene:new()
|
||||
self.entry_pos = 3
|
||||
end
|
||||
if love.filesystem.getInfo(HIscoreFILE) then
|
||||
self.hi_scores = bitser.loadLoveFile(HIscoreFILE)
|
||||
self.hi_scores = FILE.read(HIscoreFILE)
|
||||
else
|
||||
self.hi_scores = {"TRO",0,"MIT",0,"ROM",0,"ITR",0,"OMI",0}
|
||||
end
|
||||
@@ -150,7 +150,7 @@ function NameEntryScene:onInputPress(e)
|
||||
if self.entry_pos == 3 then
|
||||
name = string.lower(self.name_entry[1]..self.name_entry[2]..self.name_entry[3])
|
||||
if love.filesystem.getInfo((SAVE_DIR..name.."_grade_history.sav")) then
|
||||
grade_history = bitser.loadLoveFile(SAVE_DIR..name.."_grade_history.sav")
|
||||
grade_history = FILE.read(SAVE_DIR..name.."_grade_history.sav")
|
||||
self.grade = grade_history[1]
|
||||
self.wins = grade_history[2]
|
||||
self.plays = grade_history[4]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local bitser = require 'libs.bitser'
|
||||
local fs = love.filesystem
|
||||
|
||||
local _settings = fs.read(CONFIG_FILE) ~= nil and bitser.loadLoveFile(CONFIG_FILE) or {}
|
||||
local _settings = fs.read(CONFIG_FILE) ~= nil and FILE.read(CONFIG_FILE) or {}
|
||||
local _defaultSettings = {
|
||||
firstTime = true,
|
||||
|
||||
@@ -37,13 +37,13 @@ SETTINGS = setmetatable(
|
||||
__index = function(_, k)
|
||||
if _settings[k] == nil then
|
||||
_settings[k] = _defaultSettings[k]
|
||||
bitser.dumpLoveFile(CONFIG_FILE,_settings)
|
||||
FILE.write(CONFIG_FILE,_settings)
|
||||
end
|
||||
return _settings[k]
|
||||
end,
|
||||
__newindex = function(_, k, v)
|
||||
_settings[k] = v
|
||||
bitser.dumpLoveFile(CONFIG_FILE,_settings)
|
||||
FILE.write(CONFIG_FILE,_settings)
|
||||
end
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user