mirror of
https://gitea.com/SweetSea-ButImNotSweet/tromi_mobile.git
synced 2025-01-08 17:33:09 +08:00
Add buttons for Replay, add MENU to go out after finishing game or in 20G Training mode
This commit is contained in:
@@ -4,16 +4,14 @@ local lualzw = require 'libs.lualzw'
|
|||||||
local bitser = require 'libs.bitser'
|
local bitser = require 'libs.bitser'
|
||||||
|
|
||||||
local playedReadySE = false
|
local playedReadySE = false
|
||||||
local playedGoSE = false
|
|
||||||
|
|
||||||
local Grid = require 'game.grid'
|
local Grid = require 'game.grid'
|
||||||
local Randomizer = require 'game.randomizer'
|
local Randomizer = require 'game.randomizer'
|
||||||
local Piece = require 'game.piece'
|
|
||||||
|
|
||||||
local GameMode = Object:extend()
|
local GameMode = Object:extend()
|
||||||
|
|
||||||
function GameMode:new(player_name, input_file, replay_grade)
|
function GameMode:new(player_name, input_file, replay_grade)
|
||||||
VCTRL.toggle(true)
|
VCTRL.toggle(MOBILE and not input_file)
|
||||||
|
|
||||||
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
|
if input_file ~= nil then
|
||||||
@@ -507,10 +505,10 @@ function GameMode:detectHoles(x, y)
|
|||||||
table.insert(self.visited, x..'.'..y)
|
table.insert(self.visited, x..'.'..y)
|
||||||
end
|
end
|
||||||
if cell.colour ~= "" or cell.oob then return false end
|
if cell.colour ~= "" or cell.oob then return false end
|
||||||
if self:detectHoles(x+1, y, attempt_num) then return true end
|
if self:detectHoles(x+1, y) then return true end
|
||||||
if self:detectHoles(x-1, y, attempt_num) then return true end
|
if self:detectHoles(x-1, y) then return true end
|
||||||
if self:detectHoles(x, y+1, attempt_num) then return true end
|
if self:detectHoles(x, y+1) then return true end
|
||||||
if self:detectHoles(x, y-1, attempt_num) then return true end
|
if self:detectHoles(x, y-1) then return true end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -520,7 +518,7 @@ function GameMode:stackQualityCheck()
|
|||||||
for x=1, 10 do
|
for x=1, 10 do
|
||||||
for y = 1, 20 do
|
for y = 1, 20 do
|
||||||
if self.grid:getCell(x, y).colour == "" and not table.contains(self.visited, x..'.'..y) then
|
if self.grid:getCell(x, y).colour == "" and not table.contains(self.visited, x..'.'..y) then
|
||||||
stack_clean = self:detectHoles(x, y)
|
local stack_clean = self:detectHoles(x, y)
|
||||||
if not stack_clean then
|
if not stack_clean then
|
||||||
hole_num = hole_num + 1
|
hole_num = hole_num + 1
|
||||||
end
|
end
|
||||||
@@ -993,7 +991,7 @@ function GameMode:drawScoringInfo()
|
|||||||
love.graphics.rectangle("fill", 68, 270, 140, 190, 10, 10)
|
love.graphics.rectangle("fill", 68, 270, 140, 190, 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", 65, 267, 140, 190, 10, 10)
|
love.graphics.rectangle("fill", 65, 267, 140, 190, 10, 10)
|
||||||
drawText(string.format("Replay in progress\nRotate Left:\n Pause/Frame Step\nRotate Right:\n Unpause\nLeft:\n Rewind 5 sec\nRight:\n FF 10 secs\n%s", formatTime(self.frames)), 70, 275, 1000, "left")
|
drawText(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")
|
drawBigText(string.format("%s", self.grade), 100, 143, 1000, "left")
|
||||||
self:drawInputDisplay(103,185)
|
self:drawInputDisplay(103,185)
|
||||||
elseif not PENTO_MODE then
|
elseif not PENTO_MODE then
|
||||||
@@ -1069,11 +1067,7 @@ function GameMode:drawBackground()
|
|||||||
end
|
end
|
||||||
if bg == 0 or bg == 8 or bg == 9 or bg == 3 then brightness = 0.7 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)
|
love.graphics.setColor(brightness, brightness, brightness, 1)
|
||||||
love.graphics.draw(
|
love.graphics.draw(BACKGROUNDS[bg])
|
||||||
BACKGROUNDS[bg],
|
|
||||||
0, 0, 0,
|
|
||||||
1,1
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function GameMode:drawFrame()
|
function GameMode:drawFrame()
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ function button:press(x, y, touchID)
|
|||||||
|
|
||||||
self._touchID = touchID
|
self._touchID = touchID
|
||||||
self._pressed = true
|
self._pressed = true
|
||||||
|
self:draw()
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|||||||
3
main.lua
3
main.lua
@@ -15,6 +15,9 @@ end
|
|||||||
CONFIG_FILE = 'config.sav'
|
CONFIG_FILE = 'config.sav'
|
||||||
HIscoreFILE = 'hiscores.sav'
|
HIscoreFILE = 'hiscores.sav'
|
||||||
|
|
||||||
|
CURRENT_OS = love.system.getOS()
|
||||||
|
MOBILE = CURRENT_OS == "Android" or CURRENT_OS == "iOS"
|
||||||
|
|
||||||
LOADING_IMAGE_FILE = love.graphics.newImage('res/loading.png')
|
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!
|
||||||
|
|||||||
@@ -3,10 +3,59 @@ GameScene.title = "Game"
|
|||||||
|
|
||||||
local tas = false
|
local tas = false
|
||||||
|
|
||||||
function GameScene:new(player_name, replay_file, replay_grade)
|
-- 70 295
|
||||||
game_mode = require 'game.gamemode'
|
local buttonList = {
|
||||||
|
BUTTON.new{
|
||||||
|
text = "Rotate Left\n Pause/Frame Step",
|
||||||
|
x = 67, y = 289, h = 40, w = 140,
|
||||||
|
backgroundColor = {0, 0, 0, 0},
|
||||||
|
borderColor = {0, 0, 0, 0},
|
||||||
|
hoverColor = { 1, 1, 1, 0.2},
|
||||||
|
textOrientation = "left",
|
||||||
|
codeWhenPressed = function() SCENE:onInputPress{input = "rotate_left"} end
|
||||||
|
},
|
||||||
|
BUTTON.new{
|
||||||
|
text = "Rotate Right\n Unpause",
|
||||||
|
x = 67, y = 323, h = 40, w = 140,
|
||||||
|
backgroundColor = {0, 0, 0, 0},
|
||||||
|
borderColor = {0, 0, 0, 0},
|
||||||
|
hoverColor = { 1, 1, 1, 0.2},
|
||||||
|
textOrientation = "left",
|
||||||
|
codeWhenPressed = function() SCENE:onInputPress{input = "rotate_right"} end
|
||||||
|
},
|
||||||
|
BUTTON.new{
|
||||||
|
text = "Left\n Rewind 5 sec",
|
||||||
|
x = 67, y = 357, h = 40, w = 140,
|
||||||
|
backgroundColor = {0, 0, 0, 0},
|
||||||
|
borderColor = {0, 0, 0, 0},
|
||||||
|
hoverColor = { 1, 1, 1, 0.2},
|
||||||
|
textOrientation = "left",
|
||||||
|
codeWhenPressed = function() SCENE:onInputPress{input = "left"} end
|
||||||
|
},
|
||||||
|
BUTTON.new{
|
||||||
|
text = "Right\n FF 10 sec",
|
||||||
|
x = 67, y = 391, h = 40, w = 140,
|
||||||
|
backgroundColor = {0, 0, 0, 0},
|
||||||
|
borderColor = {0, 0, 0, 0},
|
||||||
|
hoverColor = { 1, 1, 1, 0.2},
|
||||||
|
textOrientation = "left",
|
||||||
|
codeWhenPressed = function() SCENE:onInputPress{input = "right"} end
|
||||||
|
},
|
||||||
|
}
|
||||||
|
local menuKey -- MENU key used to go main menu XD
|
||||||
|
|
||||||
VCTRL[9].show = false; VCTRL[10].show = false -- Hide SELECT and QUIT button
|
function GameScene:new(player_name, replay_file, replay_grade)
|
||||||
|
menuKey = BUTTON.new{
|
||||||
|
text = "MENU",
|
||||||
|
x = 270, y = 5, w = 50, h = 20,
|
||||||
|
codeWhenReleased = function()
|
||||||
|
if self.game.input_playback or self.game.game_over or self.game.completed then
|
||||||
|
SCENE = TitleScene()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
game_mode = require 'game.gamemode'
|
||||||
if PENTO_MODE then
|
if PENTO_MODE then
|
||||||
ruleset = require 'game.rotation_pent'
|
ruleset = require 'game.rotation_pent'
|
||||||
else
|
else
|
||||||
@@ -46,7 +95,7 @@ function GameScene:update(nosound, tas_update)
|
|||||||
for input, value in pairs(self.inputs) do
|
for input, value in pairs(self.inputs) do
|
||||||
inputs[input] = value
|
inputs[input] = value
|
||||||
end
|
end
|
||||||
if tas and tas_update then
|
if tas and tas_update then
|
||||||
self.paused = false
|
self.paused = false
|
||||||
self.game:update(inputs, self.ruleset)
|
self.game:update(inputs, self.ruleset)
|
||||||
self.paused = true
|
self.paused = true
|
||||||
@@ -62,19 +111,25 @@ function GameScene:update(nosound, tas_update)
|
|||||||
if not self.paused then
|
if not self.paused then
|
||||||
self.game:update(inputs, self.ruleset)
|
self.game:update(inputs, self.ruleset)
|
||||||
end
|
end
|
||||||
if self.game.input_playback or self.game.game_over or self.game.game_completed then
|
-- if self.game.input_playback or self.game.game_over or self.game.game_completed then
|
||||||
VCTRL[9].show = true; VCTRL[10].show = true
|
-- VCTRL[9].show = true; VCTRL[10].show = true
|
||||||
end
|
-- end
|
||||||
end
|
end
|
||||||
|
|
||||||
function GameScene:render()
|
function GameScene:render()
|
||||||
self.game:draw(self.paused)
|
self.game:draw(self.paused)
|
||||||
VCTRL.draw()
|
if self.game.input_playback then
|
||||||
|
BUTTON.draw(buttonList)
|
||||||
|
end
|
||||||
|
if self.game.input_playback or self.game.game_over or self.game.completed then
|
||||||
|
menuKey:draw()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function GameScene:onInputPress(e)
|
function GameScene:onInputPress(e)
|
||||||
if e.type == "touch" then VCTRL.press(e.x, e.y, e.id)
|
if e.type == "mouse" or (e.type == "touch" and not VCTRL.press(e.x, e.y, e.id)) then
|
||||||
|
BUTTON.press(buttonList, e.x, e.y, e.id)
|
||||||
|
menuKey:press(e.x, e.y, e.id)
|
||||||
elseif (self.game.game_over or self.game.completed) and (e.input == "menu_decide" or e.input == "menu_back" or e.input == "rotate_right") and self.game.game_over_frames > 50 then
|
elseif (self.game.game_over or self.game.completed) and (e.input == "menu_decide" or e.input == "menu_back" or e.input == "rotate_right") and self.game.game_over_frames > 50 then
|
||||||
SCENE = TitleScene()
|
SCENE = TitleScene()
|
||||||
elseif tas and e.input == "menu_decide" then
|
elseif tas and e.input == "menu_decide" then
|
||||||
@@ -113,11 +168,17 @@ function GameScene:onInputPress(e)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function GameScene:onInputRelease(e)
|
function GameScene:onInputRelease(e)
|
||||||
if e.type == "touch" then
|
if e.type == "touch" or (e.type == "mouse" and not VCTRL.release(e.id)) then
|
||||||
VCTRL.release(e.id)
|
BUTTON.release(buttonList, e.x, e.y, e.id)
|
||||||
|
menuKey:release(e.x, e.y, e.id)
|
||||||
elseif e.input and string.sub(e.input, 1, 5) ~= "menu_" then
|
elseif e.input and string.sub(e.input, 1, 5) ~= "menu_" then
|
||||||
self.inputs[e.input] = false
|
self.inputs[e.input] = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function GameScene:onInputMove(e)
|
||||||
|
if e.type == "mouse" then BUTTON.checkHovering(buttonList, e.x, e.y) end
|
||||||
|
menuKey._hovering = menuKey:isHovering(e.x, e.y)
|
||||||
|
end
|
||||||
|
|
||||||
return GameScene
|
return GameScene
|
||||||
|
|||||||
@@ -46,8 +46,6 @@ function NameEntryScene:new()
|
|||||||
self.grade = 0
|
self.grade = 0
|
||||||
self.wins = 0
|
self.wins = 0
|
||||||
self.plays = 0
|
self.plays = 0
|
||||||
self.delete_confirm = false
|
|
||||||
self.delete_input_count = 0
|
|
||||||
self.gradeNames = {
|
self.gradeNames = {
|
||||||
"19k", "18k", "17k", "16k", "15k", "14k", "13k", "12k", "11k",
|
"19k", "18k", "17k", "16k", "15k", "14k", "13k", "12k", "11k",
|
||||||
"10k", "9k", "8k", "7k", "6k", "5k", "4k", "3k", "2k", "1k",
|
"10k", "9k", "8k", "7k", "6k", "5k", "4k", "3k", "2k", "1k",
|
||||||
@@ -110,11 +108,6 @@ function NameEntryScene:render()
|
|||||||
if self.grade > 0 then
|
if self.grade > 0 then
|
||||||
drawText(string.format('Games: %s', self.plays), 255, 250, 1000)
|
drawText(string.format('Games: %s', self.plays), 255, 250, 1000)
|
||||||
drawText(string.format('Grade: %s', self.gradeNames[self.grade]), 255, 270, 1000)
|
drawText(string.format('Grade: %s', self.gradeNames[self.grade]), 255, 270, 1000)
|
||||||
--if not self.delete_confirm then
|
|
||||||
-- drawText('Press up\nthree times\nto delete', 255, 330, 1000)
|
|
||||||
--else
|
|
||||||
-- drawText('Are you sure?\nPress down\nthree times\nto confirm', 255, 330, 1000)
|
|
||||||
--end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -149,8 +142,6 @@ function NameEntryScene:onInputPress(e)
|
|||||||
if e.type == "mouse" or e.type == "touch" then
|
if e.type == "mouse" or e.type == "touch" then
|
||||||
BUTTON.press(buttonList, e.x, e.y, e.id)
|
BUTTON.press(buttonList, e.x, e.y, e.id)
|
||||||
elseif e.input == "menu_decide" or e.input == "rotate_left" or e.scancode == "return" then
|
elseif e.input == "menu_decide" or e.input == "rotate_left" or e.scancode == "return" then
|
||||||
self.delete_confirm = false
|
|
||||||
self.delete_input_count = 0
|
|
||||||
if self.entry_pos == 4 then
|
if self.entry_pos == 4 then
|
||||||
BUTTON.release(buttonList, e.x, e.y, e.id)
|
BUTTON.release(buttonList, e.x, e.y, e.id)
|
||||||
SETTINGS['last_entry'] = name:upper()
|
SETTINGS['last_entry'] = name:upper()
|
||||||
@@ -172,16 +163,10 @@ function NameEntryScene:onInputPress(e)
|
|||||||
self.entry_pos = self.entry_pos + 1
|
self.entry_pos = self.entry_pos + 1
|
||||||
end
|
end
|
||||||
elseif e.input == "left" or e.scancode == "left" then
|
elseif e.input == "left" or e.scancode == "left" then
|
||||||
self.delete_confirm = false
|
|
||||||
self.delete_input_count = 0
|
|
||||||
self.direction = "left"
|
self.direction = "left"
|
||||||
elseif e.input == "right" or e.scancode == "right" then
|
elseif e.input == "right" or e.scancode == "right" then
|
||||||
self.delete_confirm = false
|
|
||||||
self.delete_input_count = 0
|
|
||||||
self.direction = "right"
|
self.direction = "right"
|
||||||
elseif e.input == "menu_back" or e.input == "rotate_right" or e.scancode == "delete" or e.scancode == "backspace" then
|
elseif e.input == "menu_back" or e.input == "rotate_right" or e.scancode == "delete" or e.scancode == "backspace" then
|
||||||
self.delete_confirm = false
|
|
||||||
self.delete_input_count = 0
|
|
||||||
if self.entry_pos == 1 then
|
if self.entry_pos == 1 then
|
||||||
BUTTON.release(buttonList, true)
|
BUTTON.release(buttonList, true)
|
||||||
SCENE = TitleScene()
|
SCENE = TitleScene()
|
||||||
@@ -193,28 +178,6 @@ function NameEntryScene:onInputPress(e)
|
|||||||
self.grade = 0
|
self.grade = 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
--elseif e.input == "up" or e.scancode == "up" then
|
|
||||||
-- if self.delete_confirm then
|
|
||||||
-- self.delete_confirm = false
|
|
||||||
-- self.delete_input_count = 0
|
|
||||||
-- end
|
|
||||||
-- if self.entry_pos == 4 and self.grade > 0 and not self.delete_confirm then
|
|
||||||
-- self.delete_input_count = self.delete_input_count + 1
|
|
||||||
-- if self.delete_input_count >= 3 then
|
|
||||||
-- self.delete_input_count = 0
|
|
||||||
-- self.delete_confirm = true
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
--elseif e.input == "down" or e.scancode == "down" then
|
|
||||||
-- if not self.delete_confirm then self.delete_input_count = 0 end
|
|
||||||
-- if self.entry_pos == 4 and self.delete_confirm then
|
|
||||||
-- self.delete_input_count = self.delete_input_count + 1
|
|
||||||
-- if self.delete_input_count >= 3 then
|
|
||||||
-- love.filesystem.remove(string.lower(self.name_entry[1]..self.name_entry[2]..self.name_entry[3]).."_grade_history.sav")
|
|
||||||
-- scene = TitleScene()
|
|
||||||
-- end
|
|
||||||
-- end
|
|
||||||
--end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function NameEntryScene:onInputRelease(e)
|
function NameEntryScene:onInputRelease(e)
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
local TrainingScene = SCENE:extend()
|
local TrainingScene = SCENE:extend()
|
||||||
TrainingScene.title = "20G Training"
|
TrainingScene.title = "20G Training"
|
||||||
|
|
||||||
|
local menuKey
|
||||||
|
|
||||||
function TrainingScene:new()
|
function TrainingScene:new()
|
||||||
|
menuKey = BUTTON.new{
|
||||||
|
text = "MENU",
|
||||||
|
x = 270, y = 5, w = 50, h = 20,
|
||||||
|
codeWhenReleased = function() SCENE = TitleScene() end
|
||||||
|
}
|
||||||
|
|
||||||
game_mode = require 'game.gamemode'
|
game_mode = require 'game.gamemode'
|
||||||
if PENTO_MODE then
|
if PENTO_MODE then
|
||||||
ruleset = require 'game.rotation_pent'
|
ruleset = require 'game.rotation_pent'
|
||||||
@@ -38,11 +46,13 @@ end
|
|||||||
|
|
||||||
function TrainingScene:render()
|
function TrainingScene:render()
|
||||||
self.game:draw(self.paused)
|
self.game:draw(self.paused)
|
||||||
|
menuKey:draw()
|
||||||
VCTRL.draw()
|
VCTRL.draw()
|
||||||
end
|
end
|
||||||
|
|
||||||
function TrainingScene:onInputPress(e)
|
function TrainingScene:onInputPress(e)
|
||||||
if e.type == "touch" then VCTRL.press(e.x, e.y, e.id)
|
if e.type == "mouse" or (e.type == "touch" and not VCTRL.press(e.x, e.y, e.id)) then
|
||||||
|
menuKey:press(e.x, e.y, e.id)
|
||||||
elseif (self.game.game_over or self.game.completed) and (e.input == "menu_decide" or e.input == "menu_back" or e.input == "rotate_right") and self.game.game_over_frames > 50 then
|
elseif (self.game.game_over or self.game.completed) and (e.input == "menu_decide" or e.input == "menu_back" or e.input == "rotate_right") and self.game.game_over_frames > 50 then
|
||||||
SCENE = TitleScene()
|
SCENE = TitleScene()
|
||||||
elseif (e.input == "menu_back") then
|
elseif (e.input == "menu_back") then
|
||||||
@@ -53,10 +63,15 @@ function TrainingScene:onInputPress(e)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function TrainingScene:onInputRelease(e)
|
function TrainingScene:onInputRelease(e)
|
||||||
if e.type == "touch" then VCTRL.release(e.id)
|
if e.type == "mouse" or (e.type == "touch" and not VCTRL.release(e.id)) then
|
||||||
|
menuKey:release(e.x, e.y, e.id)
|
||||||
elseif e.input and string.sub(e.input, 1, 5) ~= "menu_" then
|
elseif e.input and string.sub(e.input, 1, 5) ~= "menu_" then
|
||||||
self.inputs[e.input] = false
|
self.inputs[e.input] = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function TrainingScene:onInputMove(e)
|
||||||
|
menuKey._hovering = menuKey:isHovering(e.x, e.y)
|
||||||
|
end
|
||||||
|
|
||||||
return TrainingScene
|
return TrainingScene
|
||||||
|
|||||||
Reference in New Issue
Block a user