adds CS folder persistence and a menu for selecting seeds

This commit is contained in:
duncathan 2019-09-11 20:51:48 -06:00
parent cd55e26160
commit cec5cc5199
6 changed files with 102 additions and 16 deletions

View file

@ -29,15 +29,31 @@ function love.load()
else
Screen:setStatus("Drag and drop your Cave Story folder here.")
end
Screen:draw()
end
local function recursiveWrite(path, name)
local filesTable = lf.getDirectoryItems(path)
lf.createDirectory(name)
for i,v in ipairs(filesTable) do
local file = path..'/'..v
if lf.isFile(file) then
local n
lf.write(name..'/'..v, lf.read(file))
elseif lf.isDirectory(file) then
recursiveWrite(file, name..'/'..v)
end
end
end
function love.directorydropped(path)
local success = Randomizer:_mountDirectory(path)
Randomizer:_unmountDirectory(path)
--Randomizer:_unmountDirectory(path)
if success then
Settings.settings.csdirectory = path
recursiveWrite('mounted-data', 'csdata')
Settings.settings.csdirectory = 'csdata'
Settings:update()
Randomizer:setPath(path)
Randomizer:setPath('csdata')
Screen:setStatus("Cave Story folder updated!")
else
Screen:setStatus("Could not find \"data\" subfolder.\n\nMaybe try dropping your Cave Story \"data\" folder in directly?")

View file

@ -32,6 +32,7 @@ function C:new()
self._isCaveStoryPlus = false
self.itemDeck = Items()
self.worldGraph = WorldGraph(self.itemDeck)
self.customseed = nil
end
function C:setPath(path)
@ -50,7 +51,7 @@ function C:randomize()
return "Could not find \"data\" subfolder.\n\nMaybe try dropping your Cave Story \"data\" folder in directly?"
end
self:_seedRngesus()
local seed = self:_seedRngesus()
local tscFiles = self:_createTscFiles(dirStage)
-- self:_writePlaintext(tscFiles)
self:_shuffleItems(tscFiles)
@ -58,7 +59,7 @@ function C:randomize()
self:_writePlaintext(tscFiles)
self:_writeLog()
self:_unmountDirectory(csdirectory)
return self:_getStatusMessage()
return self:_getStatusMessage(seed)
end
function C:_mountDirectory(path)
@ -92,6 +93,8 @@ function C:_mountDirectory(path)
end
function C:_seedRngesus()
local seed = self.customseed or tostring(os.time())
--[[
local seed = io.open(lf.getSourceBaseDirectory() .. "/seed.txt")
if seed == nil then
logNotice('Seed from file doesnt exists, generate a new')
@ -107,8 +110,10 @@ function C:_seedRngesus()
logWarning('Seed is too short, generate a new')
seed = tostring(os.time())
end
]]
love.math.setRandomSeed(seed)
logNotice(('Offering seed "%s" to RNGesus' ):format(seed))
return seed
end
function C:_createTscFiles(dirStage)
@ -229,11 +234,11 @@ function C:_unmountDirectory(path)
assert(lf.unmount(path))
end
function C:_getStatusMessage()
function C:_getStatusMessage(seed)
local warnings, errors = countLogWarningsAndErrors()
local line1
if warnings == 0 and errors == 0 then
line1 = "Randomized data successfully created!"
line1 = ("Randomized data successfully created!\nSeed: %d"):format(seed)
elseif warnings ~= 0 and errors == 0 then
line1 = ("Randomized data was created with %d warning(s)."):format(warnings)
else
@ -241,7 +246,7 @@ function C:_getStatusMessage()
end
local line2 = "Next overwrite the files in your copy of Cave Story with the versions in the newly created \"data\" folder. Don't forget to save a backup of the originals!"
local line3 = "Then play and have a fun!"
local status = ("%s\n\n%s\n\n%s"):format(line1, line2, line3)
local status = ("%s\n%s\n\n%s"):format(line1, line2, line3)
return status
end

View file

@ -5,12 +5,16 @@ local background
local C = Class:extend()
local layout = Luigi(require 'ui.main')
--local settings = Luigi(require 'ui.settings')
local settings = Luigi(require 'ui.settings')
layout:setStyle(require 'ui.style')
--settings:setStyle(require 'ui.style')
settings:setStyle(require 'ui.style')
layout:setTheme(require 'lib.luigi.theme.dark')
settings:setTheme(require 'lib.luigi.theme.dark')
function C:setup()
background = lg.newImage('assets/background.png')
self:draw()
layout:show()
end
layout.version.text = 'Cave Story Randomizer [Open Mode] v' .. VERSION
@ -21,6 +25,9 @@ layout.footer.text = 'Original randomizer:\r\nshru.itch.io/cave-story-randomizer
layout.go:onPress(function()
if Randomizer:ready() then
if settings.seedselect.value and settings.customseed.value ~= "" then
Randomizer.customseed = settings.customseed.value
end
C:setStatus(Randomizer:randomize())
Randomizer:new()
else
@ -28,9 +35,19 @@ layout.go:onPress(function()
end
end)
layout.settings:onPress(function()
settings:show()
layout:hide()
end)
settings.closeButton:onPress(function()
settings:hide()
layout:show()
end)
function C:draw()
lg.draw(background, 0, 0)
layout:show()
--layout:show()
end
function C:setStatus(text)

View file

@ -4,7 +4,7 @@ return { id = 'window',
type = 'panel',
id = 'header',
height = 100,
style = 'panel',
style = 'transpanel',
align = 'top center',
{ height = 10 },
{ id = 'version', text = "" },
@ -16,7 +16,7 @@ return { id = 'window',
type = 'panel',
id = 'status',
height = 260,
style = 'panel',
style = 'transpanel',
align = 'top center',
margin = 24,
wrap = true,
@ -27,6 +27,7 @@ return { id = 'window',
{ width = false },
{
type = 'button',
style = 'button',
id = 'settings',
text = 'Settings',
width = 100,
@ -34,6 +35,7 @@ return { id = 'window',
},
{
type = 'button',
style = 'button',
id = 'go',
text = 'Randomize',
width = 100,
@ -48,7 +50,7 @@ return { id = 'window',
type = 'panel',
id = 'footer',
height = 80,
style = 'panel',
style = 'transpanel',
align = 'centre left',
}
}

14
src/ui/settings.lua Normal file
View file

@ -0,0 +1,14 @@
return { style = 'dialog',
{ style = 'dialogHead', text = 'Settings' },
{ style = 'dialogBody', padding = 24,
{ type = 'label', text = 'Seed' },
{
{ type = 'radio', group = 'seed', text = 'Use random seed', value = true },
{ flow = 'y', { type = 'radio', group = 'seed', text = 'Use custom seed', id = 'seedselect'}, { type = 'text', id = 'customseed', width = 150 }, {height = false} }
},
},
{ style = 'dialogFoot',
{},
{ style = 'dialogButton', id = 'closeButton', text = 'Close' }
}
}

View file

@ -1,11 +1,43 @@
return {
panel = {
transpanel = {
background = {0,0,0,0},
font = 'assets/monogram_extended.ttf',
size = 32,
color = {255,255,255},
},
button = {
align = 'centre middle'
align = 'center middle',
size = 16,
font = 'assets/monogram_extended.ttf'
},
-- dialog styles
dialog = {
type = 'submenu',
width = 600,
height = 400,
},
dialogHead = {
align = 'middle center',
height = 36,
size = 16,
type = 'panel',
},
dialogBody = {
align = 'left middle',
font = 'assets/monogram_extended.ttf',
size = 24,
padding = 4,
wrap = true,
},
dialogFoot = {
flow = 'x',
height = 'auto',
type = 'panel',
},
dialogButton = {
type = 'button',
font = 'assets/monogram_extended.ttf',
size = 16,
width = 100,
}
}