Mercurial > vanillian
annotate 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 |
| rev | line source |
|---|---|
| 2 | 1 local ATL = require("AdvTiledLoader") |
| 0 | 2 local anim8 = require("anim8") |
| 3 local sprite = require("sprite") | |
| 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 | 8 local tx, ty = 0, 0 |
| 9 local DX = {0, 1, 0, -1} | |
| 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 | 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 | 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 | 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 | 63 return villain |
| 64 end | |
| 65 | |
| 0 | 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 | 79 end |
| 80 | |
| 81 | |
| 82 function love.draw() | |
| 2 | 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 | 87 shadow:draw() |
| 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 | 90 sprite:draw() |
| 91 end | |
| 92 end | |
| 93 | |
| 94 | |
| 95 function love.update(dt) | |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
96 for k, sprite in pairs(SPRITES) do |
| 0 | 97 sprite:update(dt) |
| 98 end | |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
99 table.sort(SPRITES, function (a, b) return a.y < b.y end) |
| 0 | 100 end |
