annotate main.lua @ 7:dd17a136b402

overlay layers
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sat, 15 Dec 2012 14:42:10 +0100
parents 301a5bd338fb
children a8111759a5c7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
1 local ATL = require("AdvTiledLoader")
0
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
2 local anim8 = require("anim8")
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
3 local sprite = require("sprite")
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
4
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
5 local SPRITES = {}
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
6 local SHADOWS = {}
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
7 local MAP
2
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
8 local tx, ty = 0, 0
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
9 local DX = {0, 1, 0, -1}
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
10 local DY = {-1, 0, 1, 0}
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
11 local SHADOW_IMAGE
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
12 local MOBS_IMAGE
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
13 local GRID = anim8.newGrid(64, 64, 128, 128)
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
14 local scroll_speed = 250
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
15 local scroll_margin = 64
2
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
16
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
17
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
18 function newMob(x, y, cells)
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
19 local mob = {}
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
20 mob.sprite = sprite.newSprite(
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
21 x - 32, y - 60, MOBS_IMAGE,
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
22 anim8.newAnimation('loop', GRID(cells), 0.25)
2
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
23 )
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
24 mob.shadow = sprite.newShadow(SHADOW_IMAGE, mob.sprite)
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
25 table.insert(SPRITES, mob.sprite)
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
26 table.insert(SHADOWS, mob.shadow)
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
27 return mob
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
28 end
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
29
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
30 function makeVillain(villain)
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
31 function villain.sprite:walk(dt, dir)
3
f5de6c75c4d0 make the walls block
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 2
diff changeset
32 local x = self.x + DX[dir] * dt * 250
f5de6c75c4d0 make the walls block
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 2
diff changeset
33 local y = self.y + DY[dir] * dt * 250
f5de6c75c4d0 make the walls block
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 2
diff changeset
34 local tx, ty = math.floor((x+32)/48), math.floor((y+60)/48)
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
35 local cell = MAP.layers['control']:get(tx, ty)
3
f5de6c75c4d0 make the walls block
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 2
diff changeset
36 if cell and cell.properties and cell.properties.block == 0 then
f5de6c75c4d0 make the walls block
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 2
diff changeset
37 self.x = x
f5de6c75c4d0 make the walls block
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 2
diff changeset
38 self.y = y
f5de6c75c4d0 make the walls block
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 2
diff changeset
39 end
2
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
40 end
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
41 function villain.sprite:update(dt)
5
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
42 local villain = self
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
43 if love.keyboard.isDown("up") then villain:walk(dt, 1) end
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
44 if love.keyboard.isDown("right") then villain:walk(dt, 2) end
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
45 if love.keyboard.isDown("down") then villain:walk(dt, 3) end
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
46 if love.keyboard.isDown("left") then villain:walk(dt, 4) end
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
47 if villain.x + tx < scroll_margin then
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
48 tx = tx + dt * scroll_speed
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
49 else
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
50 if villain.x + tx > 800 - 64 - scroll_margin then
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
51 tx = tx - dt * scroll_speed
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
52 end
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
53 end
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
54 if villain.y + ty < scroll_margin then
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
55 ty = ty + dt * scroll_speed
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
56 else
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
57 if villain.y + ty > 600 - 64 - scroll_margin then
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
58 ty = ty - dt * scroll_speed
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
59 end
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
60 end
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
61 sprite.Sprite.update(self, dt)
98ab870293bc make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 4
diff changeset
62 end
2
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
63 return villain
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
64 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
65
0
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
66 function love.load()
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
67 SHADOW_IMAGE = love.graphics.newImage('shadow.png')
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
68 MOBS_IMAGE = love.graphics.newImage('mobs.png')
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
69 MAP = ATL.Loader.load('level01.tmx')
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
70 MAP.drawObjects = false
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
71 for i, data in pairs(MAP.layers['mobs'].objects) do
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
72 if data.name == 'villain' then
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
73 local mob = newMob(data.x, data.y, '1-2,1')
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
74 makeVillain(mob)
4
e4263ea87780 Place the sprites on the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 3
diff changeset
75 else
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
76 local mob = newMob(data.x, data.y, data.properties.cells or '1-2,2')
4
e4263ea87780 Place the sprites on the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 3
diff changeset
77 end
e4263ea87780 Place the sprites on the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 3
diff changeset
78 end
0
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
79 end
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
80
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
81
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
82 function love.draw()
2
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
83 love.graphics.translate(math.floor(tx), math.floor(ty))
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
84 MAP:autoDrawRange(math.floor(tx), math.floor(ty), 1, 0)
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
85 MAP:draw()
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
86 for k, shadow in pairs(SHADOWS) do
2
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
87 shadow:draw()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 0
diff changeset
88 end
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
89 for k, sprite in pairs(SPRITES) do
0
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
90 sprite:draw()
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
91 end
7
dd17a136b402 overlay layers
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 6
diff changeset
92 for i, layer in pairs(MAP.layerOrder) do
dd17a136b402 overlay layers
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 6
diff changeset
93 if layer.properties.overlay then
dd17a136b402 overlay layers
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 6
diff changeset
94 layer:draw()
dd17a136b402 overlay layers
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 6
diff changeset
95 end
dd17a136b402 overlay layers
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 6
diff changeset
96 end
0
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
97 end
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
98
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
99
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
100 function love.update(dt)
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
101 for k, sprite in pairs(SPRITES) do
0
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
102 sprite:update(dt)
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
103 end
6
301a5bd338fb define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 5
diff changeset
104 table.sort(SPRITES, function (a, b) return a.y < b.y end)
0
716ff40413d2 initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
105 end