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',