Mercurial > vanillian
changeset 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 |
| files | level01.tmx main.lua |
| diffstat | 2 files changed, 46 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- a/level01.tmx Sat Dec 15 13:58:27 2012 +0100 +++ b/level01.tmx Sat Dec 15 14:30:07 2012 +0100 @@ -20,7 +20,12 @@ </layer> <objectgroup name="mobs" width="21" height="16"> <object name="villain" x="480" y="336"/> - <object x="672" y="528"/> - <object x="864" y="384"/> + <object x="672" y="528" width="48" height="48"/> + <object x="864" y="384" width="48" height="48"/> + <object x="576" y="384" width="48" height="48"> + <properties> + <property name="cells" value="1-2,1"/> + </properties> + </object> </objectgroup> </map>
--- a/main.lua Sat Dec 15 13:58:27 2012 +0100 +++ b/main.lua Sat Dec 15 14:30:07 2012 +0100 @@ -2,33 +2,43 @@ local anim8 = require("anim8") local sprite = require("sprite") -local sprites = {} -local shadows = {} -local map +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 newVillain(x, y, image) - local grid = anim8.newGrid(64, 64, 128, 128) - local villain = sprite.newSprite( - x, y, - image, - anim8.newAnimation('loop', grid('1-2,1'), 0.25) + +function newMob(x, y, cells) + local mob = {} + mob.sprite = sprite.newSprite( + x - 32, y - 60, MOBS_IMAGE, + anim8.newAnimation('loop', GRID(cells), 0.25) ) - function villain:walk(dt, dir) + 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) + 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:update(dt) - local scroll_speed = 250 - local scroll_margin = 64 + 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 @@ -53,31 +63,17 @@ return villain end -function newCivilian(x, y, image) - local grid = anim8.newGrid(64, 64, 128, 128) - local civilian = sprite.newSprite( - x, y, - image, - anim8.newAnimation('loop', grid('1-2,1'), 0.25) - ) - return civilian -end - function love.load() - local shadow_image = love.graphics.newImage('shadow.png') - local civilian_image = love.graphics.newImage('civilian.png') - local villain_image = love.graphics.newImage('villain.png') - map = ATL.Loader.load('level01.tmx') - map.drawObjects = false - for i, mob in pairs(map.layers['mobs'].objects) do - if mob.name == 'villain' then - local villain = newVillain(mob.x - 32, mob.y - 60, villain_image) - table.insert(sprites, villain) - table.insert(shadows, sprite.newShadow(shadow_image, villain)) + 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 civilian = newCivilian(mob.x - 32, mob.y - 60, civilian_image) - table.insert(sprites, civilian) - table.insert(shadows, sprite.newShadow(shadow_image, civilian)) + local mob = newMob(data.x, data.y, data.properties.cells or '1-2,2') end end end @@ -85,20 +81,20 @@ 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 + 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 + for k, sprite in pairs(SPRITES) do sprite:draw() end end function love.update(dt) - for k, sprite in pairs(sprites) do + for k, sprite in pairs(SPRITES) do sprite:update(dt) end - table.sort(sprites, function (a, b) return a.y < b.y end) + table.sort(SPRITES, function (a, b) return a.y < b.y end) end
