From 9425b047e2eb4f398bb0e2b6b09fc1afc89308f5 Mon Sep 17 00:00:00 2001 From: "Squishy (C6H12O6+NaCl+H2O)" <106439598+SweetSea-ButImNotSweet@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:21:52 +0700 Subject: [PATCH] Do some preparation for touch config screen --- funcs.lua | 40 ++++++++++++++----- main.lua | 91 +++++++++++++++++++++--------------------- scene/input_config.lua | 4 +- scene/touch_config.lua | 31 ++++++++++---- settings.lua | 6 +++ 5 files changed, 107 insertions(+), 65 deletions(-) diff --git a/funcs.lua b/funcs.lua index 6342986..9f98666 100644 --- a/funcs.lua +++ b/funcs.lua @@ -68,16 +68,43 @@ function formatBigNum(number) else return end - local pos = Mod1(string.len(s), 3) + local pos = math.mod1(string.len(s), 3) return string.sub(s, 1, pos) .. string.gsub(string.sub(s, pos+1), "(...)", ",%1") end -function Mod1(n, m) - -- returns a number congruent to n modulo m in the range [1;m] (as opposed to [0;m-1]) +function math.clamp(x, min, max) + if max < min then + min, max = max, min + end + return x < min and min or (x > max and max or x) +end + +-- Returns a number congruent to n modulo m in the range [1;m] (as opposed to [0;m-1]) +function math.mod1(n, m) return ((n-1) % m) + 1 end +---Round a number with specified unit +---@param n number +---@param u number # Default: 10 +---@return number +function math.roundUnit(n,u) + local u = u or 10 + return math.floor(n/u+.5)*u +end + +---@param t1 table +---@param t2 table +---@return table t +---Merge 2 tables into one
(**WARNING**: t2 can **overwrite** some value of t1 if both tables have some same keys!) +function table.merge(t1,t2) + local t + for k, v in pairs(t1) do t[k] = v end + for k, v in pairs(t2) do t[k] = v end + return t +end + function table.contains(table, element) for _, value in pairs(table) do if value == element then @@ -107,13 +134,6 @@ function table.lowest(table) return lowest end -function math.clamp(x, min, max) - if max < min then - min, max = max, min - end - return x < min and min or (x > max and max or x) -end - function drawText(text, x, y, size, orientation, color) if color == nil then color = {1, 1, 1, 1} end love.graphics.setFont(FONT_tromi) diff --git a/main.lua b/main.lua index 1c9875b..c184221 100644 --- a/main.lua +++ b/main.lua @@ -7,10 +7,9 @@ else end require 'funcs' -DEBUG_showKey=false +DEBUG_showKey = false PENTO_MODE = false - SAVE_DIR = 'saves/' REPLAY_DIR = 'saves/replays/' if not love.filesystem.getInfo(REPLAY_DIR) then @@ -19,6 +18,33 @@ end CONFIG_FILE = 'config.sav' HIscoreFILE = 'hiscores.sav' +-- Text "LOADING..." +local loaded = {} +local last_loading +local loadedCounter = 0 +--- Show the loading text while we are loading resources
+--- **WARNING**: should only be used while loading the game! +function ShowLoadingText(thing) + if last_loading then table.insert(loaded, last_loading) end + last_loading = thing + loadedCounter = loadedCounter + 1 + + love.graphics.replaceTransform(GLOBAL_TRANSFORM) + love.graphics.setFont(love.graphics.newFont(20)) + love.graphics.clear() + + drawText( + "Loading Tromi... ["..loadedCounter.." / 3]\nPlease wait, don't touch anywhere or press any key!\n\nLoading: "..thing, + 10,0,1e99,"left" + ) + for i, t in pairs(loaded) do + drawText("Loaded "..t,10,80+20*i,1e99,"left") + end + + love.graphics.flushBatch() + love.graphics.present() +end + function love.load() math.randomseed(os.time()) require "settings" @@ -32,33 +58,6 @@ function love.load() GLOBAL_TRANSFORM = love.math.newTransform() love.resize(love.graphics.getWidth(), love.graphics.getHeight()) - -- Text "LOADING..." - local loaded = {} - local prev_thing - local loadedCounter = 0 - --- Show the loading text while we are loading resources
- --- **WARNING**: should only be used while loading the game! - function ShowLoadingText(thing) - if prev_thing then table.insert(loaded, prev_thing) end - prev_thing = thing - loadedCounter = loadedCounter + 1 - - love.graphics.replaceTransform(GLOBAL_TRANSFORM) - love.graphics.setFont(love.graphics.newFont(20)) - love.graphics.clear() - - drawText( - "Loading Tromi... ["..loadedCounter.." / 3]\nPlease wait, don't touch anywhere or press any key!\n\nLoading: "..thing, - 10,0,1e99,"left" - ) - for i, t in pairs(loaded) do - drawText("Loaded "..t,10,80+20*i,1e99,"left") - end - - love.graphics.flushBatch() - love.graphics.present() - end - -- Now it's real time to load all stuffs! highscores = {} require "load" -- Most game's resources are loaded in here @@ -66,24 +65,24 @@ function love.load() require "game.vctrl" -- VCTRL SCENE = SETTINGS.firstTime and InputConfigScene(true) or TitleScene() - VCTRL.toggle(love.system.getOS()=='Android') + VCTRL.toggle(love.system.getOS()=='Android' or true) VCTRL.new{ - -- {type='button',x= 100,y=320,key= 'up',icon= 'up',r=35,iconSize=60,alpha=1}, - -- {type='button',x= 160,y=380,key='right',icon= 'right',r=35,iconSize=60,alpha=1}, - -- {type='button',x= 100,y=440,key= 'down',icon= 'down',r=35,iconSize=60,alpha=1}, - -- {type='button',x= 40,y=380,key= 'left',icon= 'left',r=35,iconSize=60,alpha=1}, - -- {type='button',x=640-100,y=320,key= 'f16',icon='rotate_right2',r=35,iconSize=60,alpha=1}, - -- {type='button',x=640-160,y=380,key= 'f14',icon= 'rotate_left2',r=35,iconSize=60,alpha=1}, - -- {type='button',x=640-100,y=440,key= 'f15',icon= 'rotate_right',r=35,iconSize=60,alpha=1}, - -- {type='button',x=640- 40,y=380,key= 'f13',icon= 'rotate_left',r=35,iconSize=60,alpha=1}, - {type='button',x= 70,y=280,key= 'up',icon= 'up',r=45,iconSize=60,alpha=1}, - {type='button',x= 145,y=355,key='right',icon= 'right',r=45,iconSize=60,alpha=1}, - {type='button',x= 70,y=430,key= 'down',icon= 'down',r=45,iconSize=60,alpha=1}, - {type='button',x= -5,y=355,key= 'left',icon= 'left',r=45,iconSize=60,alpha=1}, - {type='button',x=640- 70,y=280,key= 'f16',icon='rotate_right2',r=45,iconSize=60,alpha=1}, - {type='button',x=640-145,y=355,key= 'f14',icon= 'rotate_left2',r=45,iconSize=60,alpha=1}, - {type='button',x=640- 70,y=430,key= 'f15',icon= 'rotate_right',r=45,iconSize=60,alpha=1}, - {type='button',x=640- -5,y=355,key= 'f13',icon= 'rotate_left',r=45,iconSize=60,alpha=1}, + -- {type='button',x= 100,y=320,key= 'up',icon= 'up',r=35,iconSize=60,alpha=0.75}, + -- {type='button',x= 160,y=380,key='right',icon= 'right',r=35,iconSize=60,alpha=0.75}, + -- {type='button',x= 100,y=440,key= 'down',icon= 'down',r=35,iconSize=60,alpha=0.75}, + -- {type='button',x= 40,y=380,key= 'left',icon= 'left',r=35,iconSize=60,alpha=0.75}, + -- {type='button',x=640-100,y=320,key= 'f16',icon='rotate_right2',r=35,iconSize=60,alpha=0.75}, + -- {type='button',x=640-160,y=380,key= 'f14',icon= 'rotate_left2',r=35,iconSize=60,alpha=0.75}, + -- {type='button',x=640-100,y=440,key= 'f15',icon= 'rotate_right',r=35,iconSize=60,alpha=0.75}, + -- {type='button',x=640- 40,y=380,key= 'f13',icon= 'rotate_left',r=35,iconSize=60,alpha=0.75}, + {type='button',x= 70,y=280,key= 'up',icon= 'up',r=45,iconSize=60,alpha=0.75}, + {type='button',x= 145,y=355,key='right',icon= 'right',r=45,iconSize=60,alpha=0.75}, + {type='button',x= 70,y=430,key= 'down',icon= 'down',r=45,iconSize=60,alpha=0.75}, + {type='button',x= -5,y=355,key= 'left',icon= 'left',r=45,iconSize=60,alpha=0.75}, + {type='button',x=640- 70,y=280,key= 'f16',icon='rotate_right2',r=45,iconSize=60,alpha=0.75}, + {type='button',x=640-145,y=355,key= 'f14',icon= 'rotate_left2',r=45,iconSize=60,alpha=0.75}, + {type='button',x=640- 70,y=430,key= 'f15',icon= 'rotate_right',r=45,iconSize=60,alpha=0.75}, + {type='button',x=640- -5,y=355,key= 'f13',icon= 'rotate_left',r=45,iconSize=60,alpha=0.75}, } end diff --git a/scene/input_config.lua b/scene/input_config.lua index a382a10..da66dbc 100644 --- a/scene/input_config.lua +++ b/scene/input_config.lua @@ -28,11 +28,11 @@ function ConfigScene:render() end love.graphics.setColor(1, 1, 1, 0.5) - love.graphics.rectangle("fill", 75, 118 + 50 * self.menu_state, 300, 35) + love.graphics.rectangle("fill", 75, 118 + 50 * self.menu_state, 400, 35) love.graphics.setColor(1, 1, 1, 1) for i, screen in pairs(menu_screens) do - drawText(screen.title, 80, 120 + 50 * i, 300, "left") + drawText(screen.title, 80, 120 + 50 * i, 400, "left") end end diff --git a/scene/touch_config.lua b/scene/touch_config.lua index 0e2de23..ca75f86 100644 --- a/scene/touch_config.lua +++ b/scene/touch_config.lua @@ -1,21 +1,38 @@ local TouchConfigScene = SCENE:extend() -TouchConfigScene.title = "Touchscreen config\n(you can tap anywhere to select this)" +TouchConfigScene.title = "Touchscreen config\n(you can tap anywhere on touch screen to select this)" + +local origin_touchPressed, origin_touchReleased, origin_touchMoved +local function onPressed(id, x, y) + if not VCTRL.press(x, y, id) then + -- TODO + end +end +local function onMoved(id, _, _, dx, dy) + VCTRL.drag(dx, dy, id) +end +local function onReleased(id) + if not VCTRL.release(id) then + -- TODO + end +end function TouchConfigScene:new() -- TODO + -- Temproraily hijacking game's touch-related functions + origin_touchPressed, origin_touchReleased, origin_touchMoved = love.touchpressed, love.touchreleased, love.touchmoved + + SETTINGS.input.keys = table.merge(SETTINGS.input.keys, SETTINGS.input.touch) end function TouchConfigScene:update() -- TODO end -function TouchConfigScene:onInputPress(e) -end - -function TouchConfigScene:onInputRelease(e) -end - function TouchConfigScene:render() MainBackground() end +function TouchConfigScene:onQuit() + love.touchpressed, love.touchreleased, love.touchmoved = origin_touchPressed, origin_touchReleased, origin_touchMoved +end + return TouchConfigScene \ No newline at end of file diff --git a/settings.lua b/settings.lua index 5b67dba..45f5297 100644 --- a/settings.lua +++ b/settings.lua @@ -8,10 +8,16 @@ local _defaultSettings = { fullscreen = false, music = true, + ---@class input + ---@field keys table + ---@field joysticks table + ---@field mobile table input = { keys = {}, + joysticks = {}, mobile = { -- Should not be changed for any reason, used for mobile only enter = 'menu_decide', + acback = 'menu_back', f13 = 'up', f14 = 'down', f15 = 'left',