diff --git a/book.json b/book.json new file mode 100644 index 0000000..c05bf15 --- /dev/null +++ b/book.json @@ -0,0 +1,4 @@ +{ + "total_pages": 500, + "current_page": 0 +} diff --git a/classes.json b/classes.json new file mode 100644 index 0000000..d23890e --- /dev/null +++ b/classes.json @@ -0,0 +1,86 @@ +{ + "Bastard Lunatic":{ + "stats":["constitution"], + "tasks":[ + [6, "Reading the DSM"] + ] + }, + "Battle-Felon":{ + "stats":["strength"] + }, + "Birdrider":{ + "stats":["wisdom"], + "tasks":[ + [10, "Birdwatching"] + ] + }, + "Fighter/Organist":{ + "stats":["charisma","strength"] + }, + "Hunter Strangler":{ + "stats":["dexterity","intelligence"], + "tasks":[ + [10, "Hunting"] + ] + }, + "Inner Mason":{ + "stats":["constitution"], + "tasks":[ + [16, "Meditating"] + ] + }, + "Lowling":{ + "stats":["wisdom"], + "tasks":[ + "Hiding" + ] + }, + "Mage Illusioner":{ + "stats":["intelligence","magic"] + }, + "Mu-Fu Monk":{ + "stats":["dexterity"] + }, + "Puma Burgular":{ + "stats":["dexterity"], + "tasks":[ + [7, "Stalking"] + ] + }, + "Robot Monk":{ + "stats":["strength"], + "tasks":[ + [12, "Recharging"] + ] + }, + "Runeloremaster":{ + "stats":["wisdom"], + "tasks":[ + "Enthusiastically explaining the applications of runes on trains" + ] + }, + "Shiv-Knight":{ + "stats":["dexterity"], + "tasks":[ + "Restocking on shivs" + ] + }, + "Slow Poisoner":{ + "stats":["constitution"] + }, + "Tickle-Mimic":{ + "stats":["intelligence","wisdom"] + }, + "Ur-Paladin":{ + "stats":["constitution","wisdom"] + }, + "Vermineer":{ + "stats":["intelligence"], + "tasks":[ + "Reading capitalist propaganda" + ] + }, + "Voodoo Princess":{ + "stats":["charisma","intelligence"] + } +} diff --git a/races.json b/races.json new file mode 100644 index 0000000..1b7f2c3 --- /dev/null +++ b/races.json @@ -0,0 +1,101 @@ +{ + "Battle-Finch":{ + "stats":["dexterity","intelligence"], + "tasks":[ + "Running from Birdrider" + ] + }, + "Crested Dwarf":{ + "stats":["charisma"] + }, + "Demicanadian":{ + "stats":["constitution"], + "tasks":[ + [2, "Drinking maple syrup"] + ] + }, + "Double Hobbit":{ + "stats":["strength"] + }, + "Double Wookiee":{ + "stats":["strength"] + }, + "Dung Elf":{ + "stats":["wisdom"] + }, + "Eel Man":{ + "stats":["dexterity"] + }, + "Enchanted Motorcycle":{ + "stats":["magic"], + "tasks":[ + [8, "Changing oil"] + ] + }, + "Gyrognome":{ + "stats":["dexterity"], + "tasks":[ + "Spinning" + ] + }, + "Half Halfling":{ + "stats":["dexterity"], + "tasks":[ + "Protesting how someone renamed their race and then copyrighted it" + ] + }, + "Half Man":{ + "stats":["charisma"], + "tasks":[ + "Searching for their other half" + ] + }, + "Half Orc":{ + "stats":["health"] + }, + "Hob-Nobbit":{ + "stats":["charisma","dexterity"], + "tasks":[ + "Protesting how asburd it is for a dead human to own the concept of a race" + ] + }, + "Land Squid":{ + "stats":["health","strength"], + "tasks":[ + "Drinking plenty of water" + ] + }, + "Lesser Dwarf":{ + "stats":["constitution"] + }, + "Low Elf":{ + "stats":["constitution"] + }, + "Panda Man":{ + "stats":["constitution","strength"] + }, + "Skraeling":{ + "stats":["wisdom"], + "tasks":[ + [10, "Fighting for native peoples' rights"] + ] + }, + "Talking Pony":{ + "stats":["intelligence","magic"], + "tasks":[ + [4, "Singing their theme song"] + ] + }, + "Trans-Kobold":{ + "stats":["wisdom"], + "tasks":[ + [10, "#TransRights"] + ] + }, + "Will o' the Wisp":{ + "stats":["wisdom"], + "tasks":[ + "Looking for lamp oil" + ] + } +} diff --git a/src/data/classes.lua b/src/data/classes.lua new file mode 100644 index 0000000..80b7644 --- /dev/null +++ b/src/data/classes.lua @@ -0,0 +1,32 @@ +local constants = require "data.constants" +local utility = require "lib.utility" + +local classes = utility.load_data("classes.json") + +-- TODO abstract out since this is shared between classes and races +for name, data in pairs(classes) do + if type(data.tasks) == "string" then + data.tasks = { data.tasks } + elseif not data.tasks then + data.tasks = {} + end + + local tasks = data.tasks + for index, task in ipairs(tasks) do + if type(task) == "string" then + local time = #task * constants.reading_time_multiplier + -- TODO decide on a random amount of extra time to add + tasks[index] = {time, time, task} + if #task == 1 then + local time = #task[1] * constants.reading_time_multiplier + -- TODO decide on a random amount of extra time to add + tasks[index] = {time, time, task[1]} + elseif #task == 2 then + local time = tasks[1] + -- TODO decide on a random amount of extra time to add + tasks[index] = {time, time, task[2]} + end + end +end + +return classes diff --git a/src/data/constants.lua b/src/data/constants.lua new file mode 100644 index 0000000..a7b14c1 --- /dev/null +++ b/src/data/constants.lua @@ -0,0 +1,4 @@ +return { + progress_bar_height = 30, + reading_time_multiplier = 1 / 12, +} diff --git a/src/data/races.lua b/src/data/races.lua new file mode 100644 index 0000000..04051f1 --- /dev/null +++ b/src/data/races.lua @@ -0,0 +1,32 @@ +local constants = require "data.constants" +local utility = require "lib.utility" + +local races = utility.load_data("races.json") + +-- TODO abstract out since this is shared between classes and races +for name, data in pairs(races) do + if type(data.tasks) == "string" then + data.tasks = { data.tasks } + elseif not data.tasks then + data.tasks = {} + end + + local tasks = data.tasks + for index, task in ipairs(tasks) do + if type(task) == "string" then + local time = #task * constants.reading_time_multiplier + -- TODO decide on a random amount of extra time to add + tasks[index] = {time, time, task} + if #task == 1 then + local time = #task[1] * constants.reading_time_multiplier + -- TODO decide on a random amount of extra time to add + tasks[index] = {time, time, task[1]} + elseif #task == 2 then + local time = tasks[1] + -- TODO decide on a random amount of extra time to add + tasks[index] = {time, time, task[2]} + end + end +end + +return races diff --git a/src/main.lua b/src/main.lua index 96335a6..8f7db60 100644 --- a/src/main.lua +++ b/src/main.lua @@ -10,20 +10,20 @@ log{ testing = true, } --- local json_load_test = utility.load_data("test.json") --- utility.print_table(json_load_test) +local constants = requrie "data.constants" +local classes = require "data.classes" +local races = require "data.races" -- test progress_bar local window_width, window_height = love.graphics.getDimensions() -local progress_bar_height = 30 -- TODO should not be hardcoded -local test_bar = progress_bar(0, window_height - progress_bar_height * 2, window_width, progress_bar_height) +local test_bar = progress_bar(0, window_height - constants.progress_bar_height * 2, window_width, constants.progress_bar_height) local test_message = "This is a test text string of significant length. It exists to test printing over a progress bar." log("testing", #test_message) test_bar:set_text(test_message) -- test:set_progress(math.random()) -local test_timer = timer.every(#test_message / 12, function() log("testing", "The timer completed.") end) -- TODO consider making timer not need a function; cause I don't here! +local test_timer = timer.every(#test_message * constants.reading_time_multiplier, function() log("testing", "The timer completed.") end) -- TODO consider making timer not need a function; cause I don't here! local task_queue task_queue = { @@ -32,34 +32,38 @@ task_queue = { end, } -local total_pages = 500 -local current_page = 0 -local pages_progress_bar = progress_bar(0, window_height - progress_bar_height, window_width, progress_bar_height, total_pages / current_page) -local update_pages_progress_bar = function(increment) - current_page = current_page + (increment or 0) - pages_progress_bar:set_progress(current_page / total_pages) - pages_progress_bar:set_text("Reading: Page " .. current_page .. "/" .. total_pages .. " (" .. math.floor(current_page / total_pages * 100 * 10) / 10 .. "%)") + + +local book = utility.load_data("book.json") +local book_progress = progress_bar(0, window_height - constants.progress_bar_height, window_width, constants.progress_bar_height) +local update_book_progress = function(increment) + book.current_page = book.current_page + (increment or 0) + book_progress:set_progress(book.current_page / book.total_pages) + book_progress:set_text("Reading: Page " .. book.current_page .. "/" .. book.total_pages .. " (" .. math.floor(book.current_page / book.total_pages * 100 * 10) / 10 .. "%)") end -update_pages_progress_bar() +update_book_progress() love.update = function(dt) lovebird.update() timer.update(dt) + test_bar:set_progress(test_timer.run_time / test_timer:get_interval()) end love.draw = function() test_bar:draw() - pages_progress_bar:draw() + + book_progress:draw() end love.keypressed = function(key) if key == "escape" then -- TODO save any remaining log + utility.save_data(book) love.event.quit() elseif key == "left" then - update_pages_progress_bar(-1) + update_book_progress(-1) elseif key == "right" then - update_pages_progress_bar(1) + update_book_progress(1) end end