local bump = require 'bump' local bump_debug = require 'bump_debug' io.stdout:setvbuf("no") local instructions = [[ bump.lua simple demo arrows: move tab: toggle debug info delete: run garbage collector ]] local cols_len = 0 -- how many collisions are happening -- World creation local world = bump.newWorld() -- Message/debug functions local function drawMessage() local msg = instructions:format(tostring(shouldDrawDebug)) jin.graphics.setColor(255, 255, 255) -- jin.graphics.print(msg, 550, 10) end local function drawDebug() bump_debug.draw(world) local statistics = ("fps: %d, mem: %dKB, collisions: %d, items: %d"):format(love.timer.getFPS(), collectgarbage("count"), cols_len, world:countItems()) jin.graphics.setColor(255, 255, 255) -- jin.graphics.printf(statistics, 0, 580, 790, 'right') end local consoleBuffer = {} local consoleBufferSize = 15 for i=1,consoleBufferSize do consoleBuffer[i] = "" end local function consolePrint(msg) table.remove(consoleBuffer,1) consoleBuffer[consoleBufferSize] = msg end local function drawConsole() local str = table.concat(consoleBuffer, "\n") for i=1,consoleBufferSize do jin.graphics.setColor(255,255,255, i*255/consoleBufferSize) -- love.graphics.printf(consoleBuffer[i], 10, 580-(consoleBufferSize - i)*12, 790, "left") end end -- helper function local function drawBox(box, r,g,b) jin.graphics.setColor(r,g,b,70) jin.graphics.rect("fill", box.x, box.y, box.w, box.h) jin.graphics.setColor(r,g,b) jin.graphics.rect("line", box.x, box.y, box.w, box.h) end -- Player functions local player = { x=50,y=50,w=20,h=20, speed = 80, onGround = false} vx = 0 vy = 0 local function updatePlayer(dt) local speed = player.speed if jin.keyboard.isDown('Right') then vx = speed elseif jin.keyboard.isDown('Left') then vx = -speed end if jin.keyboard.isDown('Down') then vy = vy elseif jin.keyboard.isDown('Up') then vy = vy elseif jin.keyboard.isDown('Space') and player.onGround then vy = vy - 12000 * dt print("jump") print("on sky") player.onGround = false end if not player.onGround then vy = vy + 200 * dt end if vx ~= 0 or vy ~= 0 then local cols local py = player.y player.x, player.y, cols, cols_len = world:move(player, player.x + vx * dt, player.y + vy * dt) if py == player.y then player.onGround = true vy = 0 print("on ground") end for i=1, cols_len do local col = cols[i] consolePrint(("col.other = %s, col.type = %s, col.normal = %d,%d"):format(col.other, col.type, col.normal.x, col.normal.y)) end end vx = 0 end local function drawPlayer() drawBox(player, 0, 255, 0) end -- Block functions local blocks = {} local function addBlock(x,y,w,h) local block = {x=x,y=y,w=w,h=h} blocks[#blocks+1] = block world:add(block, x,y,w,h) end local function drawBlocks() for _,block in ipairs(blocks) do drawBox(block, 255,0,0) end end function jin.core.onEvent(e) if e.type == "quit" then jin.core.stop() end if e.type == "keydown" then if e.key == "Escape" then jin.core.stop() end end end -- Main LÖVE functions function jin.core.onLoad() world:add(player, player.x, player.y, player.w, player.h) addBlock(0, 0, 800, 32) addBlock(0, 32, 32, 600-32*2) addBlock(800-32, 32, 32, 600-32*2) addBlock(0, 600-32, 800, 32) for i=1,30 do addBlock( math.random(100, 600), math.random(100, 400), math.random(10, 100), math.random(10, 100) ) end end function jin.core.onUpdate(dt) cols_len = 0 updatePlayer(dt) end function jin.core.onDraw() drawBlocks() drawPlayer() if shouldDrawDebug then drawDebug() drawConsole() end drawMessage() end