Mercurial > vanillian
view main.lua @ 6:301a5bd338fb
define mob graphics in the map
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sat, 15 Dec 2012 14:30:07 +0100 |
| parents | 98ab870293bc |
| children | dd17a136b402 |
line wrap: on
line source
local ATL = require("AdvTiledLoader") local anim8 = require("anim8") local sprite = require("sprite") local SPRITES = {} local SHADOWS = {} local MAP local tx, ty = 0, 0 local DX = {0, 1, 0, -1} local DY = {-1, 0, 1, 0} local SHADOW_IMAGE local MOBS_IMAGE local GRID = anim8.newGrid(64, 64, 128, 128) local scroll_speed = 250 local scroll_margin = 64 function newMob(x, y, cells) local mob = {} mob.sprite = sprite.newSprite( x - 32, y - 60, MOBS_IMAGE, anim8.newAnimation('loop', GRID(cells), 0.25) ) mob.shadow = sprite.newShadow(SHADOW_IMAGE, mob.sprite) table.insert(SPRITES, mob.sprite) table.insert(SHADOWS, mob.shadow) return mob end function makeVillain(villain) function villain.sprite:walk(dt, dir) local x = self.x + DX[dir] * dt * 250 local y = self.y + DY[dir] * dt * 250 local tx, ty = math.floor((x+32)/48), math.floor((y+60)/48) local cell = MAP.layers['control']:get(tx, ty) if cell and cell.properties and cell.properties.block == 0 then self.x = x self.y = y end end function villain.sprite:update(dt) local villain = self if love.keyboard.isDown("up") then villain:walk(dt, 1) end if love.keyboard.isDown("right") then villain:walk(dt, 2) end if love.keyboard.isDown("down") then villain:walk(dt, 3) end if love.keyboard.isDown("left") then villain:walk(dt, 4) end if villain.x + tx < scroll_margin then tx = tx + dt * scroll_speed else if villain.x + tx > 800 - 64 - scroll_margin then tx = tx - dt * scroll_speed end end if villain.y + ty < scroll_margin then ty = ty + dt * scroll_speed else if villain.y + ty > 600 - 64 - scroll_margin then ty = ty - dt * scroll_speed end end sprite.Sprite.update(self, dt) end return villain end function love.load() SHADOW_IMAGE = love.graphics.newImage('shadow.png') MOBS_IMAGE = love.graphics.newImage('mobs.png') MAP = ATL.Loader.load('level01.tmx') MAP.drawObjects = false for i, data in pairs(MAP.layers['mobs'].objects) do if data.name == 'villain' then local mob = newMob(data.x, data.y, '1-2,1') makeVillain(mob) else local mob = newMob(data.x, data.y, data.properties.cells or '1-2,2') end end end function love.draw() love.graphics.translate(math.floor(tx), math.floor(ty)) MAP:autoDrawRange(math.floor(tx), math.floor(ty), 1, 0) MAP:draw() for k, shadow in pairs(SHADOWS) do shadow:draw() end for k, sprite in pairs(SPRITES) do sprite:draw() end end function love.update(dt) for k, sprite in pairs(SPRITES) do sprite:update(dt) end table.sort(SPRITES, function (a, b) return a.y < b.y end) end
