local NameEntryScene = SCENE:extend() local Grid = require 'game.grid' local bitser = require 'libs.bitser' require 'settings' NameEntryScene.title = "Game Start" function NameEntryScene:new() self.chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890." self.char_pos = 1 self.name_entry = {'A','A','A'} self.entry_pos = 1 self.entry_chars = self.name_entry[1]..self.name_entry[2]..self.name_entry[3] self.grid = Grid(10, 20) self.repeat_limit = 10 self.repeat_counter = self.repeat_limit-1 self.direction = nil self.grade = 0 self.wins = 0 self.plays = 0 self.delete_confirm = false self.delete_input_count = 0 self.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" } if SETTINGS['last_entry'] ~= nil then self.name_entry = {SETTINGS['last_entry']:sub(1,1),SETTINGS['last_entry']:sub(2,2),SETTINGS['last_entry']:sub(3,3)} self.entry_pos = 3 end if love.filesystem.getInfo(HIscoreFILE) then self.hi_scores = bitser.loadLoveFile(HIscoreFILE) else self.hi_scores = {"TRO",0,"MIT",0,"ROM",0,"ITR",0,"OMI",0} end end function NameEntryScene:drawGradeList(left, top) love.graphics.setColor(0,0,0,0.5) love.graphics.rectangle("fill", left+3, top+3, 200, 240, 10, 10) love.graphics.setColor(0.05,0.05,0.05,1) love.graphics.rectangle("fill", left, top, 200, 240, 10, 10) drawText("Grade list:", left+15, top+10, 1000, "left") drawText("Beginner\n19 kyu\n18 kyu\n17 kyu\n16 kyu\n15 kyu\n14 kyu\n13 kyu\n12 kyu\n11 kyu\n10 kyu", left+15, top+25, 1000, "left") drawText("Intermed.\n9 kyu\n8 kyu\n7 kyu\n6 kyu\n5 kyu\n4 kyu\n3 kyu\n2 kyu\n1 kyu", left+80, top+25, 1000, "left") drawText("Expert\n1 Dan\n2 Dan\n3 Dan\n4 Dan\n5 Dan\n6 Dan\n7 Dan\n8 Dan\n9 Dan", left+145, top+25, 1000, "left") end function NameEntryScene:render() MainBackground() love.graphics.setColor(1, 1, 1, 1) love.graphics.line(216,80,216,80+(16*self.grid.height)) love.graphics.line(216+(16*self.grid.width),80,216+(16*self.grid.width),80+(16*self.grid.height)) love.graphics.line(216,80+(16*self.grid.height),216+(16*self.grid.width),80+(16*self.grid.height)) love.graphics.line(216,80,216+(16*self.grid.width),80) love.graphics.setColor(0, 0, 0, 1) love.graphics.rectangle( "fill", 216, 80, 16 * self.grid.width, 16 * self.grid.height ) love.graphics.setColor(1, 1, 1, 1) drawText('Enter your initials:', 227, 180, 200, "left") drawBigText(self.entry_chars, 272, 200, 200, "left") drawText('o', 262+(self.entry_pos*14), 225, 200, "left") self:drawGradeList(397, 40) love.graphics.setColor(0,0,0,0.5) love.graphics.rectangle("fill", 400, 295, 130, 130, 10, 10) love.graphics.setColor(0.05,0.05,0.05,1) love.graphics.rectangle("fill", 397, 292, 130, 130, 10, 10) drawText("Best scores:", 410, 297, 1000, "left") i = 2 while i <= 10 do drawText(self.hi_scores[i-1]..' - '..self.hi_scores[i], 410, 297+(i*10), 1000, "left") i = i + 2 end if self.entry_pos == 4 then drawText('Press confirm\nto play', 255, 290, 1000) end if self.grade > 0 then drawText(string.format('Games: %s', self.plays), 255, 250, 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 function NameEntryScene:update() if self.direction == "left" then if self.repeat_counter >= self.repeat_limit then self.char_pos = self.char_pos - 1 if self.char_pos < 1 then self.char_pos = 37 end self.name_entry[self.entry_pos] = self.chars:sub(self.char_pos, self.char_pos) self.repeat_counter = 0 end self.repeat_counter = self.repeat_counter + 1 elseif self.direction == "right" then if self.repeat_counter >= self.repeat_limit then self.char_pos = self.char_pos + 1 if self.char_pos > 37 then self.char_pos = 1 end self.name_entry[self.entry_pos] = self.chars:sub(self.char_pos, self.char_pos) self.repeat_counter = 0 end self.repeat_counter = self.repeat_counter + 1 end self.entry_chars = self.name_entry[1]..self.name_entry[2]..self.name_entry[3] end function NameEntryScene:onInputPress(e) if 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 SETTINGS['last_entry'] = name:upper() SCENE = GameScene(name:lower()) else if self.entry_pos == 3 then name = string.lower(self.name_entry[1]..self.name_entry[2]..self.name_entry[3]) if love.filesystem.getInfo((SAVE_DIR..name.."_grade_history.sav")) then grade_history = bitser.loadLoveFile(SAVE_DIR..name.."_grade_history.sav") self.grade = grade_history[1] self.wins = grade_history[2] self.plays = grade_history[4] end end if self.entry_pos < 3 then self.name_entry[self.entry_pos] = self.chars:sub(self.char_pos, self.char_pos) self.name_entry[self.entry_pos+1] = self.chars:sub(self.char_pos, self.char_pos) end self.entry_pos = self.entry_pos + 1 end elseif e.input == "left" or e.scancode == "left" then self.delete_confirm = false self.delete_input_count = 0 self.direction = "left" elseif e.input == "right" or e.scancode == "right" then self.delete_confirm = false self.delete_input_count = 0 self.direction = "right" 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 SCENE = TitleScene() else self.name_entry[self.entry_pos] = 'A' self.name_entry[self.entry_pos-1] = 'A' self.char_pos = 1 self.entry_pos = self.entry_pos - 1 self.grade = 0 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 function NameEntryScene:onInputRelease(e) if e.input == "left" or e.scancode == "left" or e.input == "right" or e.scancode == "right" then self.direction = nil self.repeat_counter = self.repeat_limit-1 end end return NameEntryScene