8 Commits

Author SHA1 Message Date
Squishy (C6H12O6+NaCl+H2O)
c9a97856fd Update virtual control scene 2024-05-29 22:24:48 +07:00
Squishy (C6H12O6+NaCl+H2O)
8f902caa22 Update virtual control texture 2024-05-29 20:32:29 +07:00
Squishy (C6H12O6+NaCl+H2O)
4e0815e13a Updating README file 2024-05-29 15:53:29 +07:00
Squishy (C6H12O6+NaCl+H2O)
c555e98081 Replace font 2024-05-29 15:33:46 +07:00
Squishy (C6H12O6+NaCl+H2O)
fbfd9ee0db Update font related stuff 2024-05-29 10:34:57 +07:00
Squishy (C6H12O6+NaCl+H2O)
3c473fd5f3 convert indents to spaces 2024-05-29 10:01:34 +07:00
Squishy (C6H12O6+NaCl+H2O)
dd55171204 Replacing font, to avoid license issue 2024-05-29 09:56:59 +07:00
Squishy (C6H12O6+NaCl+H2O)
6beacc51f5 Update conf.lua 2024-05-29 00:27:15 +07:00
20 changed files with 307 additions and 288 deletions

View File

@@ -36,22 +36,22 @@ Ported to Android (mobile and TV) by SweetSea with on-screen control (with some
Navigate to where you put ``tromi_mobile.love`` in the File manager (the one you downloaded from the link in Install for TV section), just opening and Tromi should be launched.
# Differences from original Tromi
> This is required, to follow the used license (GNU GPL v3)
> I must make this list to follow the used license (GNU GPL v3)<br>
> :no_entry: There are ***very much*** breaking changes right now, and I can't always finish this list. I may try hard to do it.
* No differences in gameplay
* Files will be saved into ``Android/data/org.love2d.android/tromi_mobile`` instead the location where the game files in
* Add ``simple-button`` module, made by SweetSea
* Add ``simple-button`` module, made by me (SweetSea)
* All UIs are touch-able
* Add on-screen buttons
* Replaced icons for 3 direction buttons (Left, Down, Right)
* Replaced icons for 3 direction buttons (Left, Down, Right), using from Techmino's font (outdated image)
<img src="https://gitea.com/SweetSea-ButImNotSweet/tromi_mobile/raw/branch/main/screenshot/Replay_screen_differences.png">
* Add a special pre-made keybind for Android TV (only supports TV models have their remote has numerical area (0-9))<img src="https://gitea.com/SweetSea-ButImNotSweet/tromi_mobile/raw/branch/main/screenshot/SPOILER_tv_code.png">
* <details><summary>Changes the way to input secret code to activate Pentominoes mode</summary><img src="https://gitea.com/SweetSea-ButImNotSweet/tromi_mobile/raw/branch/main/screenshot/SPOILER_pento_code.png">To insert the left arrow, tap on the left, so does to right arrow.</details>
* Add a loading screen (this need to be updated later)
* Add a loading screen ~~(this need to be updated later)~~
* Update ``binser`` library, this fixes some weird bugs related to saving
* Replaced old Cambridge's ``config`` module with the new one inspired by "the sequel of Techmino"s ``SETTINGS`` module
# TODO
- [ ] Add a way to export ~~replay~~ data for Android > 11
- [x] Revert ``bitser`` with ``binser`` (if and only if I can make it works)
- [x] Design a new on-screen buttons skin (the current one is come from [C₂₉H₂₅N₃O₅](https://github.com/C29H25N3O5), I am aware that it's not fit to Tromi's design language)
@@ -70,8 +70,8 @@ A small note about the music:
# Special thanks
* mycophobia for writing the original Tromi
* MrZ_26 for the base of ``VCTRL`` module (yea I stole from him his code ;-;)
* C₂₉H₂₅N₃O₅ for his virtual key design (used while during inital development), and icon font (actually I extracted and re-pack as a new font from his orginal production file)
* MrZ_26 for the base of ``VCTRL`` module (yea I stole from him his code ;-; )
* C₂₉H₂₅N₃O₅ for his virtual key design (used while during inital development), and icon font (from Techmino).
# Don't forget to check
* [Original Tromi](https://mycophobia.org/tromi)

View File

@@ -412,4 +412,4 @@ for _,pack in next,L do
end
end
return L
return L

View File

@@ -1,5 +1,5 @@
function love.conf(t)
t.identity = "tromi_ver3"
t.identity = "tromi_mobile"
t.externalstorage=true
t.console = true

View File

@@ -143,6 +143,15 @@ function drawText(text, x, y, size, orientation, color)
love.graphics.printf(text, x, y, size*2, orientation, nil, 0.5)
end
function drawBoldText(text, x, y, size, orientation, color)
if color == nil then color = {1, 1, 1, 1} end
love.graphics.setFont(FONT_bold)
love.graphics.setColor(0, 0, 0, 0.8)
love.graphics.printf(text, x+1, y+1, size*2, orientation, nil, 0.50)
love.graphics.setColor(color)
love.graphics.printf(text, x, y, size*2, orientation, nil, 0.5)
end
function drawBigText(text, x, y, size, orientation, color)
if color == nil then color = {1, 1, 1, 1} end
love.graphics.setFont(FONT_big)

View File

@@ -13,7 +13,7 @@ local GameMode = Object:extend()
function GameMode:new(player_name, input_file, replay_grade)
VCTRL.toggle(MOBILE and not input_file and not SETTINGS.tvMode)
if player_name == nil then self.training = true else self.training = false end
if player_name == nil then self.training = true else self.training = false end
if input_file ~= nil then
input_file = love.filesystem.read(REPLAY_DIR..input_file)
input_file = lualzw.decompress(input_file)
@@ -23,10 +23,10 @@ function GameMode:new(player_name, input_file, replay_grade)
self.input_playback = true
self.grade = replay_grade
self.frames = 1
elseif self.training then
player_name = 'TRN'
replay_grade = 'N/A'
self.randomizer = Randomizer(false, nil)
elseif self.training then
player_name = 'TRN'
replay_grade = 'N/A'
self.randomizer = Randomizer(false, nil)
self.input_playback = false
self.frames = 0
else
@@ -64,22 +64,22 @@ function GameMode:new(player_name, input_file, replay_grade)
"9k", "8k", "7k", "6k", "5k", "4k", "3k", "2k", "1k",
"1D", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D"
}
self.promo_table = {
self.promo_table = {
26666, 53333, 79999, 106666, 133333, 159999, 186666, 213333, 239999, 266666,
293333, 319999, 346666, 373333, 399999, 426666, 453333, 479999, 506666,
533333, 559999, 586666, 613333, 639999, 666666, 693333, 719999, 719999
}
self.autopromo_table = {
self.autopromo_table = {
79999, 106666, 133333, 159999, 186666, 213333, 239999, 266666, 293333, 319999,
346666, 373333, 399999, 426666, 453333, 479999, 506666, 533333, 559999,
586666, 613333, 639999, 666666, 693333, 719999, 746666, 773333, 1000000
}
self.demo_table = {
}
self.demo_table = {
-1, 13332, 25000, 40000, 50000, 60000, 60000, 120000, 120000, 120000,
180000, 180000, 240000, 240000, 300000, 300000, 360000, 360000, 360000,
420000, 420000, 480000, 480000, 480000, 480000, 540000, 540000, 540000
}
self.speed_divisor = 10000
self.speed_divisor = 10000
self.line_clear_flash = 0
self.lines_cleared = 0
SOUNDS['bgm_firsthalf']:setVolume(0.3)
@@ -89,7 +89,7 @@ function GameMode:new(player_name, input_file, replay_grade)
self.input_saved = false
self.end_grid_clear = false
self.last_active = 0
self.move_count = 0
self.move_count = 0
self.target = 0
self.last_percent = 0
self.total_speed_loss = 0
@@ -162,15 +162,15 @@ end
function GameMode:updateGradeHistory()
if self.grade_score >= self.promo_table[self.grade] then
if (self.grade == 28 and self.grade_history[2] < 4) or self.grade < 28 then self.grade_history[2] = self.grade_history[2] + 1 end
self.point_flash = 60
self.point_flash_color = {0,1,0,1}
elseif self.grade_score <= self.demo_table[self.grade] then
if (self.grade == 1 and self.grade_history[2] > 0) or self.grade > 1 then self.grade_history[2] = self.grade_history[2] - 1 end
self.point_flash = 60
self.point_flash_color = {1,0,0,1}
end
local auto_flag = false
if (self.grade == 28 and self.grade_history[2] < 4) or self.grade < 28 then self.grade_history[2] = self.grade_history[2] + 1 end
self.point_flash = 60
self.point_flash_color = {0,1,0,1}
elseif self.grade_score <= self.demo_table[self.grade] then
if (self.grade == 1 and self.grade_history[2] > 0) or self.grade > 1 then self.grade_history[2] = self.grade_history[2] - 1 end
self.point_flash = 60
self.point_flash_color = {1,0,0,1}
end
local auto_flag = false
while self.grade_score >= self.autopromo_table[self.grade] and self.grade < 28 do
self.grade = self.grade + 1
self.point_flash = 1
@@ -178,7 +178,7 @@ function GameMode:updateGradeHistory()
self.grade_change_color = {0,0,1,1}
self.end_game_sound = "autopromote"
auto_flag = true
end
end
if self.grade_history[2] >= 5 and self.grade < 28 and auto_flag == false then
self.grade = self.grade + 1
self.point_flash = 1
@@ -194,7 +194,7 @@ function GameMode:updateGradeHistory()
end
if self.starting_grade ~= self.grade then
self.grade_history[1] = self.grade
self.grade_history[2] = 2
self.grade_history[2] = 2
end
self.grade_history[4] = self.grade_history[4] + 1
end
@@ -227,31 +227,31 @@ end
function GameMode:getARR() return 1 end
function GameMode:getDropSpeed() return 1 end
function GameMode:getARE()
if self.training then return 20 end
if self.speed_level <= #self.delay_table then return self.delay_table[self.speed_level][2]
if self.training then return 20 end
if self.speed_level <= #self.delay_table then return self.delay_table[self.speed_level][2]
else return self.delay_table[#self.delay_table][2] end
end
function GameMode:getLineARE() return self:getARE() end
function GameMode:getLockDelay()
if self.training then return 99999999999 end
if self.speed_level <= #self.delay_table then return self.delay_table[self.speed_level][3]
if self.training then return 99999999999 end
if self.speed_level <= #self.delay_table then return self.delay_table[self.speed_level][3]
else return self.delay_table[#self.delay_table][3] end
end
function GameMode:getLineClearDelay() return self:getARE() end
function GameMode:getDasLimit()
if self.training then return 8 end
if self.speed_level <= #self.delay_table then return self.delay_table[self.speed_level][4]
if self.training then return 8 end
if self.speed_level <= #self.delay_table then return self.delay_table[self.speed_level][4]
else return self.delay_table[#self.delay_table][4] end
end
function GameMode:getDasCutDelay() return 0 end
function GameMode:getGravity()
if self.training then return 20 end
if self.speed_level <= #self.delay_table then return self.delay_table[self.speed_level][1]
if self.training then return 20 end
if self.speed_level <= #self.delay_table then return self.delay_table[self.speed_level][1]
else return self.delay_table[#self.delay_table][1] end
end
@@ -346,8 +346,8 @@ function GameMode:update(inputs, ruleset)
if self.grade_change_flash > 0 and self.game_over_frames >= 2 then self.grade_change_flash = self.grade_change_flash - 1 end
if self.point_flash > 0 and self.game_over_frames >= 2 then self.point_flash = self.point_flash - 1 end
if self.game_over_frames == 2 then
PlaySEOnce(self.end_game_sound)
end
PlaySEOnce(self.end_game_sound)
end
if self.game_over or self.completed then
self.game_over_frames = self.game_over_frames + 1
if self.game_over_frames == 1 then self:storeInput(inputs) end
@@ -369,24 +369,24 @@ function GameMode:update(inputs, ruleset)
self.up_lock = true
end
if not inputs["up"] then self.up_lock = false end
local dir_list = {"down", "left", "right"}
for i = 1, #dir_list do
if inputs[dir_list[i]] and not table.contains(self.directions_pressed, dir_list[i]) then
table.insert(self.directions_pressed, dir_list[i])
elseif not inputs[dir_list[i]] then
for j=1, #self.directions_pressed do
if self.directions_pressed[j] == dir_list[i] then table.remove(self.directions_pressed, j) end
end
end
end
if #self.directions_pressed > 0 then
for i=1, #self.directions_pressed-1 do
inputs[self.directions_pressed[i]] = false
end
inputs[self.directions_pressed[#self.directions_pressed]] = true
if inputs['left'] then self.lastdir = -1
elseif inputs['right'] then self.lastdir = 1 end
end
local dir_list = {"down", "left", "right"}
for i = 1, #dir_list do
if inputs[dir_list[i]] and not table.contains(self.directions_pressed, dir_list[i]) then
table.insert(self.directions_pressed, dir_list[i])
elseif not inputs[dir_list[i]] then
for j=1, #self.directions_pressed do
if self.directions_pressed[j] == dir_list[i] then table.remove(self.directions_pressed, j) end
end
end
end
if #self.directions_pressed > 0 then
for i=1, #self.directions_pressed-1 do
inputs[self.directions_pressed[i]] = false
end
inputs[self.directions_pressed[#self.directions_pressed]] = true
if inputs['left'] then self.lastdir = -1
elseif inputs['right'] then self.lastdir = 1 end
end
-- advance one frame
@@ -521,7 +521,7 @@ function GameMode:stackQualityCheck()
local stack_clean = self:detectHoles(x, y)
if not stack_clean then
hole_num = hole_num + 1
end
end
end
end
end
@@ -541,26 +541,26 @@ function GameMode:doStackQuality()
if total_speed <= 0 then total_speed = 0.001 end
self.total_speed_loss = total_speed / #self.speed_table
if #self.speed_table == 0 then self.total_speed_loss = 0 end
self.last_holes = contiguous_holes
self.last_holes = contiguous_holes
end
function GameMode:doSpeedCheck()
self.target = self.move_count
local speed = (self.target/self.active_frames)
if speed > 1 then speed = 1 end
table.insert(self.speed_table, 1, speed)
self.target = self.move_count
local speed = (self.target/self.active_frames)
if speed > 1 then speed = 1 end
table.insert(self.speed_table, 1, speed)
while #self.speed_table > 50 do
table.remove(self.speed_table, #self.speed_table)
end
local total_speed = 0
for i=1, #self.speed_table do
total_speed = total_speed + self.speed_table[i]
end
local total_speed = 0
for i=1, #self.speed_table do
total_speed = total_speed + self.speed_table[i]
end
if total_speed <= 0 then total_speed = 0.001 end
self.total_speed_loss = total_speed / #self.speed_table
self.total_speed_loss = total_speed / #self.speed_table
if #self.speed_table == 0 then self.total_speed_loss = 0 end
self.last_active = self.active_frames
self.last_percent = speed
self.last_active = self.active_frames
self.last_percent = speed
self.active_frames = 0
self.move_count = 0
end
@@ -571,7 +571,7 @@ function GameMode:updateScore(cleared_lines)
while cleared_lines+self.total_lines > 300 do
cleared_lines = cleared_lines - 1
end
self.last_speed = math.ceil(self.total_speed_loss * self.bonus_components['speed'] * cleared_lines)
self.last_speed = math.ceil(self.total_speed_loss * self.bonus_components['speed'] * cleared_lines)
self.line_clear_flash = 240
self.lines_cleared = cleared_lines
self.score_to_add = self.lineClearPoints[cleared_lines] + self.last_speed
@@ -590,25 +590,25 @@ function GameMode:advanceOneFrame()
love.audio.stop()
self.audio_stopped = true
end
end
end
if self.training and not SOUNDS['bgm_title']:isPlaying() and SETTINGS["music"] then SOUNDS['bgm_title']:play() end
if not self.training then
if self.nextbgmflag and SOUNDS['bgm_firsthalf']:isPlaying() then
if SOUNDS['bgm_firsthalf']:getVolume() > 0.1 then
SOUNDS['bgm_firsthalf']:setVolume(SOUNDS['bgm_firsthalf']:getVolume()-0.01)
else
SOUNDS['bgm_firsthalf']:stop()
end
end
if self.ready_frames < 1 and not SOUNDS['bgm_firsthalf']:isPlaying() and not SOUNDS['bgm_secondhalf']:isPlaying() and SETTINGS["music"] then
if not self.nextbgmflag then SOUNDS['bgm_firsthalf']:play()
elseif self.total_lines < 296 then SOUNDS['bgm_secondhalf']:play() end
end
if self.total_lines >= 296 then
SOUNDS['bgm_firsthalf']:stop()
SOUNDS['bgm_secondhalf']:stop()
end
end
if not self.training then
if self.nextbgmflag and SOUNDS['bgm_firsthalf']:isPlaying() then
if SOUNDS['bgm_firsthalf']:getVolume() > 0.1 then
SOUNDS['bgm_firsthalf']:setVolume(SOUNDS['bgm_firsthalf']:getVolume()-0.01)
else
SOUNDS['bgm_firsthalf']:stop()
end
end
if self.ready_frames < 1 and not SOUNDS['bgm_firsthalf']:isPlaying() and not SOUNDS['bgm_secondhalf']:isPlaying() and SETTINGS["music"] then
if not self.nextbgmflag then SOUNDS['bgm_firsthalf']:play()
elseif self.total_lines < 296 then SOUNDS['bgm_secondhalf']:play() end
end
if self.total_lines >= 296 then
SOUNDS['bgm_firsthalf']:stop()
SOUNDS['bgm_secondhalf']:stop()
end
end
if self.clear then
self.completed = true
end
@@ -637,29 +637,29 @@ end
function GameMode:onAttemptPieceMove(piece, grid) end
function GameMode:onAttemptPieceRotate(piece, grid) end
function GameMode:onPieceMove(piece, grid, dx)
if not self.moved then
self.move_count = self.move_count + 1
self.moved = true
end
if not self.moved then
self.move_count = self.move_count + 1
self.moved = true
end
end
function GameMode:onPieceRotate(piece, grid, drot)
if not self.moved then
self.move_count = self.move_count + 1
self.moved = true
end
if not self.moved then
self.move_count = self.move_count + 1
self.moved = true
end
end
function GameMode:onPieceDrop(piece, grid, dy)
if not self.moved then
self.move_count = self.move_count + 1
self.moved = true
end
if not self.moved then
self.move_count = self.move_count + 1
self.moved = true
end
end
function GameMode:onPieceLock(piece, cleared_row_count)
if not self.moved then
self.move_count = self.move_count + 1
self.moved = true
end
self.lastdir = 0
if not self.moved then
self.move_count = self.move_count + 1
self.moved = true
end
self.lastdir = 0
PlaySE("lock")
end
@@ -680,7 +680,7 @@ function GameMode:onGameOver()
if not self.training then VCTRL.toggle(false) end
if not self.input_playback and not self.training and not PENTO_MODE then
if not self.did_grades then
self.grade_score = self.grade_score + self.speed_level
self.grade_score = self.grade_score + self.speed_level
if #self.speed_table >= 49 then
self:updateGradeHistory()
end
@@ -690,16 +690,16 @@ function GameMode:onGameOver()
end
self:drawEndScoringInfo()
elseif not self.did_grades then
self.grade_score = self.grade_score + self.speed_level
self.did_grades = true
end
self.grade_score = self.grade_score + self.speed_level
self.did_grades = true
end
if PENTO_MODE and not self.training then self:drawEndScoringInfo() end
end
function GameMode:drawEndScoringInfo()
love.graphics.setColor(1, 1, 1, 1)
drawText("Score: ", 247, 135, 1000, "left")
drawBigText(string.format("%s", self.grade_score), 247, 150, 100, "center")
drawText("Score: ", 247, 135, 1000, "left")
drawBigText(string.format("%s", self.grade_score), 247, 150, 100, "center")
if not PENTO_MODE then
drawText("Best scores:", 247, 220, 1000, "left")
@@ -869,10 +869,10 @@ function GameMode:drawLineClearAnimation()
fade_timer = self.lcd/20
love.graphics.setColor(1,1,1,fade_timer)
love.graphics.draw(BLOCKS[block.skin][block.colour..'_d'], real_x, real_y+fall_timer)
if self.lcd > self:getLineClearDelay() - 5 then
love.graphics.setColor(1,1,1,fade_timer*0.3)
love.graphics.draw(BLOCKS[block.skin]['W'], real_x, real_y+fall_timer)
end
if self.lcd > self:getLineClearDelay() - 5 then
love.graphics.setColor(1,1,1,fade_timer*0.3)
love.graphics.draw(BLOCKS[block.skin]['W'], real_x, real_y+fall_timer)
end
end
end
end
@@ -921,61 +921,61 @@ function GameMode:drawGrid()
end
function GameMode:drawInputDisplay(left, top)
if self.replay_inputs[self.frames] ~= nil then
drawText("+", left+10, top+8, 1000, "left")
drawText("", left+10, top+18, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['down']),1,1-boolToInt(self.replay_inputs[self.frames]['down']),1})
drawText("", left, top+8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['left']),1,1-boolToInt(self.replay_inputs[self.frames]['left']),1})
drawText("", left+20, top+8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['right']),1,1-boolToInt(self.replay_inputs[self.frames]['right']),1})
drawText("L", left+35, top+8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['rotate_left']),1,1-boolToInt(self.replay_inputs[self.frames]['rotate_left']),1})
drawText("R", left+50, top+8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['rotate_right']),1,1-boolToInt(self.replay_inputs[self.frames]['rotate_right']),1})
drawText("L", left+65, top+8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['rotate_left2']),1,1-boolToInt(self.replay_inputs[self.frames]['rotate_left2']),1})
drawText("R", left+80, top+8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['rotate_right2']),1,1-boolToInt(self.replay_inputs[self.frames]['rotate_right2']),1})
else
drawText("+", left+10, top+8, 1000, "left")
drawText("", left+10, top+18, 1000, "left")
drawText("", left, top+8, 1000, "left")
drawText("", left+20, top+8, 1000, "left")
drawText("L", left+35, top+8, 1000, "left")
drawText("R", left+50, top+8, 1000, "left")
drawText("L", left+65, top+8, 1000, "left")
drawText("R", left+80, top+8, 1000, "left")
end
if self.replay_inputs[self.frames] ~= nil then
drawText("", left+7.5, top+ 8, 1000, "left")
drawText(CHAR.key.down , left+ 5, top+18, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['down']),1,1-boolToInt(self.replay_inputs[self.frames]['down']),1})
drawText(CHAR.key.left , left- 5, top+ 8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['left']),1,1-boolToInt(self.replay_inputs[self.frames]['left']),1})
drawText(CHAR.key.right, left+ 15, top+ 8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['right']),1,1-boolToInt(self.replay_inputs[self.frames]['right']),1})
drawText("L", left+ 35, top+ 8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['rotate_left']),1,1-boolToInt(self.replay_inputs[self.frames]['rotate_left']),1})
drawText("R", left+ 50, top+ 8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['rotate_right']),1,1-boolToInt(self.replay_inputs[self.frames]['rotate_right']),1})
drawText("L", left+ 65, top+ 8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['rotate_left2']),1,1-boolToInt(self.replay_inputs[self.frames]['rotate_left2']),1})
drawText("R", left+ 80, top+ 8, 1000, "left",{1-boolToInt(self.replay_inputs[self.frames]['rotate_right2']),1,1-boolToInt(self.replay_inputs[self.frames]['rotate_right2']),1})
else
drawText("" , left+7.5, top+ 8, 1000, "left")
drawText(CHAR.key.down , left+ 5, top+18, 1000)
drawText(CHAR.key.left , left- 5, top+ 8, 1000)
drawText(CHAR.key.right, left+ 15, top+ 8, 1000)
drawText("L" , left+ 35, top+ 8, 1000, "left")
drawText("R" , left+ 50, top+ 8, 1000, "left")
drawText("L" , left+ 65, top+ 8, 1000, "left")
drawText("R" , left+ 80, top+ 8, 1000, "left")
end
end
function GameMode:drawSpeedStats(left, top)
love.graphics.setColor(0,0,0,0.5)
love.graphics.rectangle("fill", left+3, top+3, 190, 145, 10, 10)
love.graphics.setColor(0.05,0.05,0.05,1)
love.graphics.rectangle("fill", left, top, 190, 145, 10, 10)
drawText("Efficiency Bonus: ", left+15, top+10, 1000, "left")
love.graphics.setColor(0,0,0,0.5)
love.graphics.rectangle("fill", left+3, top+3, 190, 145, 10, 10)
love.graphics.setColor(0.05,0.05,0.05,1)
love.graphics.rectangle("fill", left, top, 190, 145, 10, 10)
drawText("Efficiency Bonus: ", left+15, top+5, 1000, "left")
local lines = self.total_lines
if lines == 0 then lines = 1 end
if self.move_count == 0 then
drawText(string.format(" %4d Num. of Moves", self.target), left+15, top+25, 1000, "left")
else
drawText(string.format(" %4d Num. of Moves", self.move_count), left+15, top+25, 1000, "left")
end
drawText(string.format("/ %4d Active Frames", self.last_active), left+15, top+40, 1000, "left")
drawText(string.format("= %1.2f\n (0 added for hole)\n %1.2f %dpc Average\nx %s x Lines\n+ %4d", self.last_percent, self.total_speed_loss, #self.speed_table, self.bonus_components['speed'], self.last_speed), left+15, top+55, 1000, "left")
if lines == 0 then lines = 1 end
if self.move_count == 0 then
drawText(string.format(" %4d Num. of Moves", self.target), left+15, top+20, 1000, "left")
else
drawText(string.format(" %4d Num. of Moves", self.move_count), left+15, top+20, 1000, "left")
end
drawText(string.format("/ %4d Active Frames", self.last_active), left+15, top+35, 1000, "left")
drawText(string.format("= %1.2f\n (0 added for hole)\n %1.2f %dpc Average\nx %s x Lines\n+ %4d", self.last_percent, self.total_speed_loss, #self.speed_table, self.bonus_components['speed'], self.last_speed), left+15, top+50, 1000, "left")
end
function GameMode:drawLinesStats(left, top)
love.graphics.setColor(0,0,0,0.5)
love.graphics.rectangle("fill", left+3, top+3, 190, 90, 10, 10)
love.graphics.setColor(0.05,0.05,0.05,1)
love.graphics.rectangle("fill", left, top, 190, 90, 10, 10)
love.graphics.setColor(0,0,0,0.5)
love.graphics.rectangle("fill", left+3, top+3, 190, 90, 10, 10)
love.graphics.setColor(0.05,0.05,0.05,1)
love.graphics.rectangle("fill", left, top, 190, 90, 10, 10)
local lines = self.total_lines
if lines == 0 then lines = 1 end
if lines == 0 then lines = 1 end
drawText("Lines Bonus: ", left+15, top+10, 1000, "left")
-- drawText(string.format("+ %4d %3d%%", self.lineClearPoints[self.lines_cleared], (self.score_totals['lines']/(self.lineClearPoints[4]*math.ceil(lines/4)))*100), left+15, top+25, 1000, "left")
drawText(string.format("2 x Lines = %d\n3 x Lines = %d\n4 x Lines = %d", self.lineClearPoints[2], self.lineClearPoints[3], self.lineClearPoints[4]), left+15, top+25, 1000, "left")
-- drawText(string.format("+ %4d %3d%%", self.lineClearPoints[self.lines_cleared], (self.score_totals['lines']/(self.lineClearPoints[4]*math.ceil(lines/4)))*100), left+15, top+25, 1000, "left")
drawText(string.format("2 x Lines = %d\n3 x Lines = %d\n4 x Lines = %d", self.lineClearPoints[2], self.lineClearPoints[3], self.lineClearPoints[4]), left+15, top+25, 1000, "left")
end
function GameMode:drawScoringInfo()
-- Name & Grade
love.graphics.setColor(0,0,0,0.5)
love.graphics.rectangle("fill", 98, 83, 110, 180, 10, 10)
love.graphics.setColor(0.05,0.05,0.05,1)
love.graphics.setColor(0.05,0.05,0.05,1)
love.graphics.rectangle("fill", 95, 80, 110, 180, 10, 10)
if not PENTO_MODE then drawText("Grade:", 100, 128, 1000, "left") end
-- Line & Level
@@ -988,46 +988,46 @@ function GameMode:drawScoringInfo()
end
-- REPLAY
if self.input_playback then
love.graphics.setColor(0,0,0,0.5)
love.graphics.rectangle("fill", 68, 270, 140, 190, 10, 10)
love.graphics.setColor(0.05,0.05,0.05,1)
love.graphics.rectangle("fill", 65, 267, 140, 190, 10, 10)
drawText(string.format("Replay in progress\n\n\n\n\n\n\n\n\n%s", formatTime(self.frames)), 70, 275, 1000, "left")
love.graphics.setColor(0,0,0,0.5)
love.graphics.rectangle("fill", 68, 270, 140, 190, 10, 10)
love.graphics.setColor(0.05,0.05,0.05,1)
love.graphics.rectangle("fill", 65, 267, 140, 190, 10, 10)
drawBoldText(string.format("REPLAY IN PROGRESS\n\n\n\n\n\n\n\n\n%s", formatTime(self.frames)), 70, 275, 1000, "left")
drawBigText(string.format("%s", self.grade), 100, 143, 1000, "left")
self:drawInputDisplay(103,185)
elseif not PENTO_MODE then
if math.mod(self.grade_change_flash, 5) ~= 0 then
drawBigText(string.format("%s", self.gradeNames[self.grade]), 100, 143, 1000, "left", self.grade_change_color)
else
drawBigText(string.format("%s", self.gradeNames[self.grade]), 100, 143, 1000, "left")
end
local points_text = nil
elseif not PENTO_MODE then
if math.mod(self.grade_change_flash, 5) ~= 0 then
drawBigText(string.format("%s", self.gradeNames[self.grade]), 100, 143, 1000, "left", self.grade_change_color)
else
drawBigText(string.format("%s", self.gradeNames[self.grade]), 100, 143, 1000, "left")
end
local points_text = nil
if self.grade == 1 and self.grade_history[2] == 2 then
points_text = " |.."
elseif self.grade == 1 and self.grade_history[2] == 3 then
points_text = " .|."
elseif self.grade == 1 and self.grade_history[2] == 4 then
points_text = " ..|"
elseif self.grade_history[2] == 0 then
points_text = "|...."
elseif self.grade_history[2] == 1 then
points_text = ".|..."
elseif self.grade_history[2] == 2 then
points_text = "..|.."
elseif self.grade_history[2] == 3 then
points_text = "...|."
elseif self.grade_history[2] == 4 then
points_text = "....|"
end
if self.grade > 1 then points_text = '-'..points_text
else points_text = ' '..points_text end
if self.grade < 28 then points_text = points_text..'+' end
drawText("Promotion\nMeter:", 100, 174, 1000, "left")
if self.point_flash > 0 then
drawBigText(points_text, 100, 208, 1000, "left", self.point_flash_color)
else
drawBigText(points_text, 100, 208, 1000, "left")
end
elseif self.grade_history[2] == 0 then
points_text = "|...."
elseif self.grade_history[2] == 1 then
points_text = ".|..."
elseif self.grade_history[2] == 2 then
points_text = "..|.."
elseif self.grade_history[2] == 3 then
points_text = "...|."
elseif self.grade_history[2] == 4 then
points_text = "....|"
end
if self.grade > 1 then points_text = '-'..points_text
else points_text = ' '..points_text end
if self.grade < 28 then points_text = points_text..'+' end
drawText("Promotion\nMeter:", 100, 174, 1000, "left")
if self.point_flash > 0 then
drawBigText(points_text, 100, 208, 1000, "left", self.point_flash_color)
else
drawBigText(points_text, 100, 208, 1000, "left")
end
end
if (self.game_over or self.completed) and self.game_over_frames <= 50 and not self.input_playback and not self.training and not PENTO_MODE then
drawText("SAVING, PLEASE WAIT", 232, 460, 1000, "left")
@@ -1036,8 +1036,8 @@ function GameMode:drawScoringInfo()
drawBigText(self.player_name:upper(), 100, 98, 1000, "left")
drawText("Ver. 2", 550, 435, 1000, "left")
if self.input_playback then
self:drawSpeedStats(385, 99)
self:drawLinesStats(385, 251)
self:drawSpeedStats(385, 99)
self:drawLinesStats(385, 251)
love.graphics.setColor(0,0,0,0.5)
love.graphics.rectangle("fill", 385+3, 348+3, 190, 50, 10, 10)
love.graphics.setColor(0.05,0.05,0.05,1)
@@ -1066,17 +1066,17 @@ function GameMode:drawBackground()
if BACKGROUNDS[bg]:tell() >= limit then
BACKGROUNDS[bg]:rewind()
end
if bg == 0 or bg == 8 or bg == 9 or bg == 3 then brightness = 0.7 end
love.graphics.setColor(brightness, brightness, brightness, 1)
if bg == 0 or bg == 8 or bg == 9 or bg == 3 then brightness = 0.7 end
love.graphics.setColor(brightness, brightness, brightness, 1)
love.graphics.draw(BACKGROUNDS[bg])
end
function GameMode:drawFrame()
love.graphics.setColor(1, 1, 1, 1)
love.graphics.line(216,80,216,80+(16*self.grid.height))
love.graphics.line(216+(16*self.grid.width),80,216+(16*self.grid.width),80+(16*self.grid.height))
love.graphics.line(216,80+(16*self.grid.height),216+(16*self.grid.width),80+(16*self.grid.height))
love.graphics.line(216,80,216+(16*self.grid.width),80)
love.graphics.setColor(1, 1, 1, 1)
love.graphics.line(216,80,216,80+(16*self.grid.height))
love.graphics.line(216+(16*self.grid.width),80,216+(16*self.grid.width),80+(16*self.grid.height))
love.graphics.line(216,80+(16*self.grid.height),216+(16*self.grid.width),80+(16*self.grid.height))
love.graphics.line(216,80,216+(16*self.grid.width),80)
love.graphics.setColor(0, 0, 0, 1)
love.graphics.rectangle(
"fill", 216, 80,

View File

@@ -64,7 +64,7 @@ function control_type.button:new(data)
r=data.r or 80, -- size
shape=data.shape or 'circle',
key=data.key or 'X',
iconSize=data.iconSize or 80,
iconSize=data.iconSize or 60,
alpha=data.alpha or 0.75,
quad=virtual_quad[data.key]
},self)
@@ -148,6 +148,7 @@ local touches={}
local global_toggle=false
VCTRL={}
VCTRL.focus=nil -- Focusing buttons
VCTRL.hasChanged = false
---@class VCTRL.data
---@field type 'button'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -1,7 +1,8 @@
-- SIMPLE-BUTTON.lua
-- A simple module that aims to help you quickly create buttons
-- It is can be used as a base class to help you quickly creating button
-- This module has type notations so IntelliSense should give you some suggestions
-- SIMPLE-BUTTON.lua<br>
-- A simple module that aims to help you quickly create buttons<br>
-- It is can be used as a base class to help you quickly creating button<br>
-- This module has type notations so IntelliSense should give you some suggestions<br>
local BUTTON = {}
-- MIT License
@@ -174,9 +175,6 @@ function button:release(x, y, touchID)
end
end
local BUTTON = {}
---@param D BUTTON.button|BUTTON.newData
---@param safe? boolean @ Creating widget? If not then ignore accept missing important parameters
---@return nil

View File

@@ -1,9 +1,11 @@
-- Fonts
FONT_tromi = love.graphics.newFont('res/fonts/monofonto rg.otf', 28)
FONT_big = love.graphics.newFont('res/fonts/monofonto rg.otf', 56)
FONT_tromi:setFallbacks(love.graphics.newFont('res/fonts/icon.otf', 28))
FONT_big :setFallbacks(love.graphics.newFont('res/fonts/icon.otf', 56))
FONT_tromi = love.graphics.newFont('res/fonts/Iosevka-Bold.ttf' , 28)
FONT_big = love.graphics.newFont('res/fonts/Iosevka-Heavy.ttf', 56)
FONT_bold = love.graphics.newFont('res/fonts/Iosevka-Heavy.ttf', 28)
-- Icons
FONT_tromi:setFallbacks(love.graphics.newFont('res/fonts/techmino_proportional.otf', 28))
FONT_bold :setFallbacks(love.graphics.newFont('res/fonts/techmino_proportional.otf', 28))
FONT_big :setFallbacks(love.graphics.newFont('res/fonts/techmino_proportional.otf', 56))
CHAR = require("char")
local font_height = FONT_tromi:getHeight() * 0.5
@@ -19,7 +21,7 @@ BUTTON = require "libs.simple-button"
BUTTON.setDefaultOption{
draw = function(self)
local need_big_font = (self.font == FONT_big)
love.graphics.setColor(self.backgroundColor)
love.graphics.rectangle('fill', self.x, self.y, self.w, self.h, self.r)
@@ -35,22 +37,19 @@ BUTTON.setDefaultOption{
local lineAmount
do
local _, t
if need_big_font then
_, t = FONT_big:getWrap(text, (self.w - 5) * 2)
else
_, t = FONT_tromi:getWrap(text, (self.w - 5) * 2)
end
local _, t = self.font:getWrap(text, (self.w - 5) * 2)
lineAmount = #t
end
local _font_height = need_big_font and font_big_height or font_height
local textHeight = _font_height * (lineAmount * 0.5)
local textPos = self.y + (self.h * 0.5) - textHeight
if need_big_font then
if self.font == FONT_big then
drawBigText(text, self.x + 2.5, textPos, self.w - 5, self.textOrientation, self.textColor)
elseif self.font == FONT_bold then
drawBoldText(text, self.x + 2.5, textPos, self.w - 5, self.textOrientation, self.textColor)
else
drawText(text, self.x + 2.5, textPos, self.w - 5, self.textOrientation, self.textColor)
end

BIN
res/fonts/Iosevka-Bold.ttf Normal file

Binary file not shown.

BIN
res/fonts/Iosevka-Heavy.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -47,7 +47,7 @@ local function updateButtonList(self)
if not SETTINGS.firstTime then
menu_screens[4] = TitleScene
buttonList[4] = BUTTON.new{
text = "", font = FONT_big,
text = CHAR.icon.home, font = FONT_big,
x = 75, y = 280, w = 40, h = 40,
codeWhenReleased = function()
if self.menu_state ~= 4 then

View File

@@ -4,37 +4,37 @@ ReplaySelectScene.title = "Replay"
local replay_list
local buttonList = {
BUTTON.new{
text = "\nUP", font = FONT_big,
text = CHAR.key.up.."\nUP", font = FONT_big,
x = 425, y = 80, w = 80, h = 80,
codeWhenPressed = function() SCENE:onInputPress {input = "up"} end,
codeWhenReleased = function() SCENE:onInputRelease{input = "up"} end
},
BUTTON.new{
text = "\nDOWN", font = FONT_big,
text = CHAR.key.down.."\nDOWN", font = FONT_big,
x = 425, y = 240, w = 80, h = 80,
codeWhenPressed = function() SCENE:onInputPress {input = "down"} end,
codeWhenReleased = function() SCENE:onInputRelease{input = "down"} end
},
BUTTON.new{
text = "\nPLAY", font = FONT_big,
text = CHAR.icon.play.."\nPLAY", font = FONT_big,
x = 345, y = 160, w = 80, h = 80,
codeWhenPressed = function() SCENE:onInputPress {input = "menu_decide"} end,
codeWhenReleased = function() SCENE:onInputRelease{input = "menu_decide"} end
},
BUTTON.new{
text = "\nHOME", font = FONT_big,
text = CHAR.icon.home.."\nHOME", font = FONT_big,
x = 505, y = 160, w = 80, h = 80,
codeWhenPressed = function() SCENE:onInputPress {input = "menu_back"} end,
codeWhenReleased = function() SCENE:onInputRelease{input = "menu_back"} end
},
BUTTON.new{
text = CHAR.icon.export.."\nCOPY", font = FONT_big,
text = CHAR.icon.export.."\nEXP.", font = FONT_big,
x = 345, y = 320, w = 80, h = 80,
codeWhenPressed = function() SCENE:onInputPress {input = "rotate_left"} end,
codeWhenReleased = function() SCENE:onInputRelease{input = "rotate_left"} end
},
BUTTON.new{
text = CHAR.icon.import.."\nPASTE", font = FONT_big,
text = CHAR.icon.import.."\nIMP.", font = FONT_big,
x = 505, y = 320, w = 80, h = 80,
codeWhenPressed = function() SCENE:onInputPress {input = "rotate_right"} end,
codeWhenReleased = function() SCENE:onInputRelease{input = "rotate_right"} end

View File

@@ -44,8 +44,8 @@ function ReplayTestScene:render()
end
function ReplayTestScene:onInputRelease()
SCENE = ReplayTestScene()
function ReplayTestScene:onInputPress()
SCENE = ReplaySelectScene()
end
return ReplayTestScene

View File

@@ -5,13 +5,11 @@ TouchConfigScene.title = "Touchscreen config"
local Grid = require 'game.grid'
local buttonList
local sliderList
local sliderList = {}
---@class VCTRL.data
local focusingButton
---@type number
local snapUnit = 1
---@type boolean
local hasChanged
---@type function
local function exitSceneFunc(saved)
@@ -29,23 +27,23 @@ buttonList = {
showToggle = BUTTON.new{
text = function()
if focusingButton then
return focusingButton.show and "[SHOW]\nHide" or "Show\n[HIDE]"
return focusingButton.show and ">SHOW<\nhide" or "show\n>HIDE<"
else
return "Show\nHide"
return "show\nhide"
end
end,
x = 275, y = 5, w = 50, h = 75,
codeWhenReleased = function ()
x = 400, y = 110, w = 60, h = 40,
codeWhenReleased = function()
if focusingButton then
focusingButton.show = not focusingButton.show
hasChanged = true
VCTRL.hasChanged = true
end
end,
update = function(self) self.textColor = focusingButton and {1, 1, 1} or {0.5, 0.5, 0.5} end
},
previewToggle = BUTTON.new{
text = "Preview\nON",
x = 570, y = 35, w = 60, h = 40,
x = 570, y = 60, w = 60, h = 40,
codeWhenReleased = function()
VCTRL.release()
BUTTON.release(buttonList)
@@ -54,7 +52,7 @@ buttonList = {
},
resetAll = BUTTON.new{
text = "RESET\nALL",
x = 570, y = 80, w = 60, h = 40,
x = 500, y = 110, w = 60, h = 40,
codeWhenReleased = function()
local selection = love.window.showMessageBox(
"Save config?", "Are you really sure about RESETTING ALL touchscreen configuration?",
@@ -63,7 +61,7 @@ buttonList = {
)
if selection == 1 then
VCTRL.focus = nil; focusingButton = nil
hasChanged = false
VCTRL.hasChanged = false
VCTRL.clearAll()
VCTRL.new(SETTINGS.__default__.input.virtual)
SETTINGS.input.virtual = SETTINGS.__default__.input.virtual
@@ -72,9 +70,9 @@ buttonList = {
},
menuScreen = BUTTON.new{
text = "MENU",
x = 570, y = 5, w = 60, h = 25,
x = 570, y = 10, w = 60, h = 40,
codeWhenReleased = function()
if hasChanged or SETTINGS.firstTime then
if VCTRL.hasChanged or SETTINGS.firstTime then
local selection = love.window.showMessageBox(
"Save config?", "Do you want to save your changes before exiting?",
{"Save", "Discard", "Keep editing", escapebutton = 3, enterbutton = 1},
@@ -98,45 +96,59 @@ buttonList = {
end
}
}
sliderList = {}
sliderList.buttonSize = newSlider(
200, 30, 120, 0, 0, 120,
function(v)
if focusingButton then
v = math.roundUnit(v, 5)
if focusingButton.r ~= v then
focusingButton.r = v
VCTRL.hasChanged = true
end
sliderList.buttonSize.value = v / 120
end
end,
{width = 40}
)
sliderList.iconSize = newSlider(
480, 30, 120, 0, 0, 100,
function(v)
if focusingButton then
v = math.roundUnit(v, 5)
if focusingButton.iconSize ~= v then
focusingButton.iconSize = v
VCTRL.hasChanged = true
end
sliderList.iconSize.value = v / 100
end
end,
{width = 40}
)
sliderList.opacity = newSlider(
155, 20+5, 120, 100, 0, 100,
200, 80, 120, 0, 0, 1,
function()
local v
if focusingButton then
v = math.roundUnit(sliderList.opacity.value, 0.01)
if focusingButton.alpha~=v then
focusingButton.alpha = v
hasChanged = true
VCTRL.hasChanged = true
end
sliderList.opacity.value = v
end
end,
{width = 30}
)
sliderList.size = newSlider(
155, 60+2.5, 120, 45, 0, 120,
function(v)
if focusingButton then
local v = math.roundUnit(v, 5)
if focusingButton.r ~= v then
focusingButton.r = v
hasChanged = true
end
sliderList.size.value = v / 120
end
end,
{width = 30}
{width = 40}
)
local gridSizeTable = {1, 2, 5, 10, 20, 50, 100}
sliderList.gridSize = newSlider(
405, 50, 100, 1, 1, #gridSizeTable - 1,
480, 80, 120, 1, 1, #gridSizeTable - 1,
function()
local v = math.roundUnit(sliderList.gridSize.value, 1 / 6)
local f = #gridSizeTable - 1
local v = math.roundUnit(sliderList.gridSize.value, 1 / f)
sliderList.gridSize.value = v
snapUnit = gridSizeTable[math.roundUnit(v * (#gridSizeTable - 1) + 1)]
snapUnit = gridSizeTable[math.roundUnit(v * f + 1)]
end,
{width = 30}
{width = 40}
); sliderList.gridSize.forceLight = true
local function sliderList_draw()
@@ -177,13 +189,15 @@ function TouchConfigScene:update()
if VCTRL.focus~=focusingButton then
focusingButton = VCTRL.focus
sliderList.opacity.value = focusingButton.alpha
sliderList.size.value = focusingButton.r / 120
sliderList.buttonSize.value = focusingButton.r / 120
sliderList.iconSize.value = focusingButton.iconSize / 100
end
BUTTON.update(buttonList)
sliderList_update()
end
local string_format = string.format
function TouchConfigScene:render()
MainBackground()
@@ -206,19 +220,16 @@ function TouchConfigScene:render()
end
love.graphics.setColor(0, 0, 0, 0.7)
-- Opacity and Size
love.graphics.rectangle("fill", 10, 5, 267, 75)
-- Snap to grid
love.graphics.rectangle("fill", 330, 5, 150, 75)
love.graphics.rectangle("fill", 5, 5, 560, 100)
-- Button Size
drawText(string_format("Size (buttons)\n%14.1d", focusingButton and focusingButton.r or 0), 10, 13, 100, "left")
-- Icon size
drawText(string_format("Size (icons)\n%13.1d%%", focusingButton and focusingButton.iconSize or 0), 290, 13, 100, "left")
-- Opacity
drawText("Opacity", 20, 15, 100, "left")
drawText(string.format("%3.1d%%", focusingButton and focusingButton.alpha * 100 or 0), 225, 15, 40, "left")
-- Size
drawText("Size", 20, 55, 100, "left")
drawText(string.format("%3.1dpx", focusingButton and focusingButton.r or 0), 225, 55, 40, "left")
drawText(string_format("Opacity\n%13.1d%%", focusingButton and focusingButton.alpha * 100 or 0), 10, 63, 100, "left")
-- Snap to grid
drawText(string.format("Snap to grid: %3s", snapUnit), 345, 15, 140, "left")
drawText(string_format("Snap to grid\n%14.1d", snapUnit), 290, 63, 100, "left")
for _, v in ipairs(VCTRL) do
if v ~= focusingButton then
@@ -245,10 +256,8 @@ end
---@param e SCENE_onInput
function TouchConfigScene:onInputMove(e)
if e.type == "touch" or (e.type == "mouse" and love.mouse.isDown(1)) then
if VCTRL.drag(e.dx, e.dy, e.id or 1) then hasChanged = true end
end
if e.type == "mouse" then
if VCTRL.drag(e.dx, e.dy, e.id or 1) then VCTRL.hasChanged = true end
elseif e.type == "mouse" then
BUTTON.checkHovering(buttonList, e.x, e.y)
end
end
@@ -258,7 +267,8 @@ function TouchConfigScene:onInputPress(e)
if not (
VCTRL.press(e.x, e.y, e.id and e.id or 1, true) or
BUTTON.press(buttonList, e.x, e.y, e.id) or
(e.x >= 80 and e.x <= 230 and e.y >= 10 and e.y <= 77)
(e.x >= 120 and e.x <= 280 and e.y >= 10 and e.y <= 100) or
(e.x >= 400 and e.x <= 560 and e.y >= 10 and e.y <= 100)
) then
VCTRL.focus = nil
focusingButton = nil

View File

@@ -8,7 +8,7 @@ local buttonList
buttonList = {
previewToggle = BUTTON.new{
text = "Preview\nOFF",
x = 570, y = 35, w = 60, h = 40,
x = 570, y = 60, w = 60, h = 40,
codeWhenReleased = function()
VCTRL.release()
BUTTON.release(buttonList)
@@ -16,8 +16,6 @@ buttonList = {
end
},
}
local sliderList = {}
local secret_grade_grid = {}
do
local colour_names = {'R', 'O', 'Y', 'G', 'C', 'B', 'M'}
@@ -80,13 +78,17 @@ end
function TouchConfigPreviewScene:onInputPress(e)
if e.type ~= "virtual" and e.input == 'menu_back' then SCENE = InputConfigScene() end
if e.type == "mouse" or e.type == "touch" then
BUTTON.press(buttonList, e.x, e.y, e.id)
if not BUTTON.press(buttonList, e.x, e.y, e.id) then
VCTRL.press(e.x, e.y, e.id or 1)
end
end
end
---@param e SCENE_onInput
function TouchConfigPreviewScene:onInputRelease(e)
if e.type == "mouse" or e.type == "touch" then
BUTTON.release(buttonList, e.x, e.y, e.id)
if not BUTTON.release(buttonList, e.x, e.y, e.id) then
VCTRL.release(e.id or 1)
end
end
end

View File

@@ -28,7 +28,7 @@ local _defaultSettings = {
{type='button',x=320, y=420,key= 'restart',r=35,iconSize=60,alpha=0.4},
}
},
tvMode = false -- 79338732
tvMode = false
}
SETTINGS = setmetatable(