local ReplaySelectScene = SCENE:extend() ReplaySelectScene.title = "Replay" require 'funcs' function ReplaySelectScene:new() self:initList() PENTO_MODE = false end function ReplaySelectScene:initList() self.replays = {} replay_list = love.filesystem.getDirectoryItems('saves/replays/') table.sort(replay_list, function(a,b) return a > b end) self.replay_text = {} self.page_flip = 16 self.page = 1 gradeNames = { "19k", "18k", "17k", "16k", "15k", "14k", "13k", "12k", "11k", "10k", "9k", "8k", "7k", "6k", "5k", "4k", "3k", "2k", "1k", "1D", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D" } for i=1, #replay_list do replay_found = string.find(replay_list[i], "_replay.sav") if replay_found ~= nil then table.insert(self.replays, replay_list[i]) line_components = {} for str in string.gmatch(replay_list[i], "([^".."_".."]+)") do table.insert(line_components, str) end player_name = line_components[2] player_grade = gradeNames[tonumber(line_components[3])] player_score = line_components[4] if #player_grade == 2 then player_grade = ' '..player_grade end table.insert(self.replay_text, player_name..' - '..player_grade..' - '..string.format('%6d',player_score)) end end self.dialog = false self.dialog_select = 1 self.replay_select = 1 end function ReplaySelectScene:render() MainBackground() love.graphics.setColor(0.4, 1, 1, 0.5) love.graphics.rectangle("fill", 0, 20 + 20 * self.replay_select, 640, 22) drawText('Name - Grade - Score', 40, 20, 1000, "left") drawText(string.format('Page %s', self.page), 20, 440, 1000, "left") j = 1 i = 1 while i <= #self.replay_text do if j > self.page_flip then j = 1 elseif j < 1 then j = self.page_flip end if i > (self.page-1) * self.page_flip and i <= self.page * self.page_flip then drawText(self.replay_text[i], 40, 20 + 20 * j, 1000, "left") end j = j + 1 i = i + 1 end if self.dialog then love.graphics.setColor(0, 0, 0, 0.5) love.graphics.rectangle("fill", 23, 43 + 20 * self.replay_select, 65, 40, 5, 5) love.graphics.setColor(0.3, 0.8, 0.8, 1) love.graphics.rectangle("fill", 20, 40 + 20 * self.replay_select, 65, 40, 5, 5) drawText("Play", 30, 40 + 20 * self.replay_select, 1000, "left") drawText("Delete", 30, 60 + 20 * self.replay_select, 1000, "left") drawText("o", 20, 40+((self.dialog_select-1) * 20) + (20 * self.replay_select), 1000, "left") end if self.replays[1] == nil then drawText('No replays yet!', 40, 40, 1000, "left") end end function ReplaySelectScene:changeOption(rel) local len = #self.replays self.replay_select = self.replay_select + rel if self.replay_select + ((self.page-1) * self.page_flip) > len then self.page = 1 self.replay_select = 1 elseif self.replay_select < 1 and self.page == 1 then self.page = 1+(math.floor(len / self.page_flip)) self.replay_select = len - ((self.page-1) * self.page_flip) end if self.replay_select > self.page_flip then self.page = self.page + 1 self.replay_select = 1 elseif self.replay_select < 1 then self.page = self.page - 1 self.replay_select = self.page_flip end end function ReplaySelectScene:changeDialog(rel) self.dialog_select = self.dialog_select + rel if self.dialog_select > 2 then self.dialog_select = 1 elseif self.dialog_select < 1 then self.dialog_select = 2 end end function ReplaySelectScene:onInputPress(e) selected_replay = self.replays[self.replay_select + ((self.page-1) * self.page_flip)] selected_replay_text = self.replay_text[self.replay_select + ((self.page-1) * self.page_flip)] if e.input == "menu_decide" or e.input == "rotate_left" or e.scancode == "return" then if self.replays[1] == nil then SCENE = TitleScene() --if not self.dialog then -- self.dialog_select = 1 -- self.dialog = true --elseif self.dialog_select == 2 then -- love.filesystem.remove(selected_replay) -- self:initList() --elseif self.dialog_select == 1 then -- line_components = {} -- for str in string.gmatch(selected_replay_text, "([^".."-".."]+)") do -- table.insert(line_components, str) -- end -- player_name = line_components[1] -- player_grade = string.gsub(line_components[2], " ", "") -- scene = GameScene(player_name, selected_replay, player_grade) --end else line_components = {} for str in string.gmatch(selected_replay_text, "([^".."-".."]+)") do table.insert(line_components, str) end player_name = line_components[1] player_grade = string.gsub(line_components[2], " ", "") SCENE = GameScene(player_name, selected_replay, player_grade) end elseif e.input == "up" or e.scancode == "up" then if self.replays[1] == nil then SCENE = TitleScene() end if not self.dialog then self:changeOption(-1) else self:changeDialog(-1) end elseif e.input == "down" or e.scancode == "down" then if self.replays[1] == nil then SCENE = TitleScene() end if not self.dialog then self:changeOption(1) else self:changeDialog(1) end elseif e.input == "menu_back" or e.input == "rotate_right" or e.scancode == "backspace" or e.scancode == "delete" then if self.replays[1] == nil then SCENE = TitleScene() end if not self.dialog then SCENE = TitleScene() else self.dialog = false end end end return ReplaySelectScene