193 lines
4.7 KiB
Lua
193 lines
4.7 KiB
Lua
local Textbox = {}
|
|
|
|
local Input = require "util.input"
|
|
local Memory = require "util.memory"
|
|
local Menu = require "util.menu"
|
|
|
|
local alphabet_upper = "ABCDEF .GHIJKL ,MNOPQRS TUVWXYZ "
|
|
local alphabet_lower = "abcdef .ghijkl ,mnopqrs tuvwxyz "
|
|
local alphabet_number = "01234 56789 !?<>/- _{}[] "
|
|
-- < = male symbol
|
|
-- > = female symbol
|
|
-- { or } = "
|
|
-- [ or ] = '
|
|
|
|
local TableNumber = 1
|
|
local ActualUpper = 1
|
|
|
|
local function getIndexForLetter(letter, Mode)
|
|
if Mode == "Upper" then
|
|
return alphabet_upper:find(letter, 1, true)
|
|
elseif Mode == "Lower" then
|
|
return alphabet_lower:find(letter, 1, true)
|
|
elseif Mode == "Number" then
|
|
return alphabet_number:find(letter, 1, true)
|
|
end
|
|
end
|
|
|
|
function Textbox.name(letter, randomize)
|
|
local inputting = Memory.value("menu", "text_input")
|
|
if inputting then
|
|
-- Set vars
|
|
local lidx
|
|
local drow
|
|
local dcol
|
|
local NameTable = {}
|
|
local ColumnMax
|
|
--Get values
|
|
local crow = Memory.value("text_inputing", "row")
|
|
local ccol = Memory.value("text_inputing", "column")
|
|
local mode = Memory.value("text_inputing", "mode")
|
|
|
|
--if letter then
|
|
local StringLenght = string.len(letter)
|
|
letter:gsub(".",function(letter2)
|
|
table.insert(NameTable,letter2)
|
|
|
|
if NameTable[TableNumber] then
|
|
local Mode = "Upper"
|
|
|
|
--its a letter
|
|
if string.match(NameTable[TableNumber], '%a') then
|
|
if string.match(NameTable[TableNumber], '%u') then
|
|
Mode = "Upper"
|
|
elseif string.match(NameTable[TableNumber], '%l') then
|
|
Mode = "Lower"
|
|
end
|
|
--its a number
|
|
elseif string.match(NameTable[TableNumber], '%d') then
|
|
Mode = "Number"
|
|
--its anything but not a letter or a number
|
|
else
|
|
if string.find(alphabet_upper, NameTable[TableNumber]) ~= nil then
|
|
Mode = "Upper"
|
|
elseif string.find(alphabet_lower, NameTable[TableNumber]) ~= nil then
|
|
Mode = "Lower"
|
|
elseif string.find(alphabet_number, NameTable[TableNumber]) ~= nil then
|
|
Mode = "Number"
|
|
end
|
|
end
|
|
|
|
--Set lidx
|
|
lidx = getIndexForLetter(NameTable[TableNumber], Mode)
|
|
|
|
local Waiting = Input.isWaiting()
|
|
|
|
--Proceed
|
|
if not Waiting then
|
|
--Get/set Lower/Upper
|
|
if Mode == "Upper" and mode ~= 0 or Mode == "Lower" and mode ~= 1 or Mode == "Number" and mode ~= 2 then
|
|
if mode == 2 then
|
|
ColumnMax = 6
|
|
else
|
|
ColumnMax = 8
|
|
end
|
|
if crow ~= 0 then
|
|
Input.press("Up", 2)
|
|
elseif crow == 0 then
|
|
if ccol < ColumnMax then
|
|
Input.press("Right", 2)
|
|
else
|
|
Input.press("A", 2)
|
|
end
|
|
end
|
|
--Get/Set Letter
|
|
else
|
|
if mode == 2 then
|
|
ColumnMax = 6
|
|
else
|
|
ColumnMax = 8
|
|
end
|
|
dcol = math.fmod(lidx - 1, ColumnMax)
|
|
if ccol < dcol then
|
|
Input.press("Right", 2)
|
|
elseif ccol > dcol then
|
|
Input.press("Left", 2)
|
|
elseif ccol == dcol then
|
|
drow = math.ceil(lidx/ColumnMax)-1
|
|
if crow < drow then
|
|
Input.press("Down", 2)
|
|
elseif crow > drow then
|
|
Input.press("Up", 2)
|
|
elseif crow == drow then
|
|
Input.press("A", 2)
|
|
TableNumber = TableNumber + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
local Waiting = Input.isWaiting()
|
|
|
|
if TableNumber > StringLenght and not Waiting then
|
|
if Memory.value("menu", "text_length")-7 > 0 then
|
|
if mode == 2 then
|
|
ColumnMax = 6
|
|
else
|
|
ColumnMax = 8
|
|
end
|
|
--get column/row
|
|
if crow ~= 2 and ccol ~= ColumnMax then
|
|
Input.press("Start", 2)
|
|
elseif crow == 2 and ccol == ColumnMax then
|
|
Input.press("A", 2)
|
|
TableNumber = 1
|
|
ActualUpper = 1
|
|
NameTable = {}
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
--[[else
|
|
if Memory.value("menu", "text_length")-7 > 0 then
|
|
Input.press("Start")
|
|
return true
|
|
end
|
|
|
|
lidx = nidoIdx
|
|
|
|
crow = Memory.value("menu", "input_row")
|
|
drow = math.ceil(lidx / 9)
|
|
if Menu.balance(crow, drow, true, 6, true) then
|
|
ccol = math.floor(Memory.value("menu", "column") / 2)
|
|
dcol = math.fmod(lidx - 1, 9)
|
|
if Menu.sidle(ccol, dcol, 9, true) then
|
|
Input.press("A")
|
|
end
|
|
end]]
|
|
--end
|
|
else
|
|
--Reset Values
|
|
TableNumber = 1
|
|
ActualUpper = 1
|
|
NameTable = {}
|
|
|
|
if randomize then
|
|
Input.press("A", math.random(1, 5))
|
|
else
|
|
Input.press("A", 2)
|
|
--Input.cancel()
|
|
end
|
|
end
|
|
end
|
|
|
|
function Textbox.isActive()
|
|
local Active = false
|
|
--if Memory.value("game", "textbox") == 1 or Memory.value("game", "textboxing") == 1 then
|
|
if Memory.value("game", "textbox") > 0 then
|
|
Active = true
|
|
end
|
|
return Active
|
|
end
|
|
|
|
function Textbox.handle()
|
|
if not Textbox.isActive() then
|
|
return true
|
|
end
|
|
Input.cancel()
|
|
end
|
|
|
|
return Textbox
|