diff 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 diff
--- 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