From 3da02b2aa5375dc4aea98a82e744599623a6b6cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Sat, 29 Jun 2019 11:21:09 +0300 Subject: [PATCH] Move in one direction by holding down the key --- bundle/main.lua | 88 +++++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 35 deletions(-) diff --git a/bundle/main.lua b/bundle/main.lua index a10b33a..a40e898 100644 --- a/bundle/main.lua +++ b/bundle/main.lua @@ -12,6 +12,10 @@ local player_x = nil local player_y = nil local player_direction = nil +local last_key_pressed = nil +local last_direction_moved = nil +local move_repeat_counter = nil + -- ------------------------------------------------------------------ -- Cavern generation -- ------------------------------------------------------------------ @@ -510,63 +514,77 @@ function movePlayer(direction) end -- ------------------------------------------------------------------ --- Callbacks +-- Gameloop functions -- ------------------------------------------------------------------ - -function love.load() - math.randomseed(os.time()) - +function newGame() generateCavern() spawnPlayer() generateVisibilityMap() initializeRememberedCavern() end +function step(direction) + if last_direction_moved == direction then + -- Repeat faster after the initial threshold for repetition has been met + move_repeat_counter = 0.1 + else + last_direction_moved = direction + move_repeat_counter = 0.3 + end + + rememberVisible() + movePlayer(direction) + generateVisibilityMap() +end + +-- ------------------------------------------------------------------ +-- Callbacks +-- ------------------------------------------------------------------ + +function love.load() + math.randomseed(os.time()) + + newGame() +end + function love.update(dt) + if move_repeat_counter ~= nil and move_repeat_counter > 0 then + move_repeat_counter = move_repeat_counter - dt + if move_repeat_counter <= 0 then + step(last_direction_moved) + end + end end function love.keypressed(key) + last_key_pressed = key if key == 'r' then - generateCavern() - spawnPlayer() - generateVisibilityMap() - initializeRememberedCavern() + newGame() elseif key == 'i' then - rememberVisible() - movePlayer(directions.up) - generateVisibilityMap() + step(directions.up) elseif key == 'j' then - rememberVisible() - movePlayer(directions.left) - generateVisibilityMap() + step(directions.left) elseif key == 'k' then - rememberVisible() - movePlayer(directions.down) - generateVisibilityMap() + step(directions.down) elseif key == 'l' then - rememberVisible() - movePlayer(directions.right) - generateVisibilityMap() + step(directions.right) elseif key == 'u' then - rememberVisible() - movePlayer(directions.upleft) - generateVisibilityMap() + step(directions.upleft) elseif key == 'm' then - rememberVisible() - movePlayer(directions.downleft) - generateVisibilityMap() + step(directions.downleft) elseif key == '.' then - rememberVisible() - movePlayer(directions.downright) - generateVisibilityMap() + step(directions.downright) elseif key == 'o' then - rememberVisible() - movePlayer(directions.upright) - generateVisibilityMap() + step(directions.upright) elseif key == 'q' then love.event.quit() - else - display_inputinfo_counter = 1 + end +end + +function love.keyreleased(key) + if last_key_pressed == key then + last_direction_moved = nil + move_repeat_counter = nil end end