annotate AdvTiledLoader/TileSet.lua @ 48:eeb43b94f625 default tip

merge
author Makdaam
date Sun, 16 Dec 2012 19:50:44 +0100
parents 0c46edeabad6
children
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:
diff changeset
1 ---------------------------------------------------------------------------------------------------
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
2 -- -= TileSet =-
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
3 ---------------------------------------------------------------------------------------------------
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
4 -- Setup
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
5 TILED_LOADER_PATH = TILED_LOADER_PATH or ({...})[1]:gsub("[%.\\/][Tt]ile[Ss]et", "") .. '.'
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
6 local ceil = math.ceil
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
7 local Tile = require( TILED_LOADER_PATH .. "Tile")
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
8 local TileSet = {class = "TileSet"}
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
9 TileSet.__index = TileSet
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
10
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
11 ----------------------------------------------------------------------------------------------------
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
12 -- Creates a new tileset.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
13 function TileSet:new(img, imgPath, name, tw, th, w, h, gid, space, marg, offx, offy, trans, tprop, prop)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
14 local ts = {}
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
15
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
16 -- Public:
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
17 ts.image = img -- The image of the tileset
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
18 ts.imagePath = imgPath -- The path to the image file
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
19 ts.name = name -- Name of the tilseset
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
20 ts.tileWidth = tw -- The width of each tile in pixels
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
21 ts.tileHeight = th -- The height of each tile in pixels
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
22 ts.width = w -- The width of the tileset image in pixels
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
23 ts.height = h -- The height of the tileset image in pixels
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
24 ts.firstgid = gid -- The id of the first tile
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
25 ts.spacing = space or 0 -- The spacing in pixels between each tile
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
26 ts.margin = marg or 0 -- The margin in pixels surrounding the entire tile set.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
27 ts.trans = trans -- The transparency value. Only used when saving maps.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
28 ts.offsetX = offx -- The X offset.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
29 ts.offsetY = offy -- The Y offset.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
30 ts.tileProperties = tprop or {} -- Properties of contained tiles indexed by the tile's gid
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
31 ts.properties = prop or {} -- The properties of the tileset
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
32
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
33 return setmetatable(ts, TileSet)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
34 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
35
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
36 ----------------------------------------------------------------------------------------------------
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
37 -- Returns the width in tiles
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
38 function TileSet:tilesWide()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
39 return ceil( (self.width - self.margin*2 - self.spacing) /
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
40 (self.tileWidth + self.spacing) )
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
41 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
42
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
43 ----------------------------------------------------------------------------------------------------
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
44 -- Returns the height in tiles
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
45 function TileSet:tilesHigh()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
46 return ceil( (self.height - self.margin*2 - self.spacing) /
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
47 (self.tileHeight + self.spacing) )
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
48 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
49
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
50 ----------------------------------------------------------------------------------------------------
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
51 -- Produces tiles from the settings and returns them in a table indexed by their id.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
52 -- These are cut out left-to-right, top-to-bottom.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
53 function TileSet:getTiles()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
54 local x,y = self.margin, self.margin
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
55 local tiles = {}
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
56 local quad = false
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
57 local id = self.firstgid
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
58 local imageWidth, imageHeight = self.image:getWidth(), self.image:getHeight()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
59
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
60 for i = 1, self:tilesHigh() do
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
61 for j = 1, self:tilesWide() do
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
62 quad = love.graphics.newQuad(x, y, self.tileWidth, self.tileHeight, imageWidth, imageHeight)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
63 tiles[id] = Tile:new(id, self, quad, self.tileWidth, self.tileHeight, self.tileProperties[id])
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
64 x = x + self.tileWidth + self.spacing
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
65 id = id + 1
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
66 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
67 x = self.margin
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
68 y = y + self.tileHeight + self.spacing
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
69 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
70
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
71 return tiles
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
72 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
73
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
74 ----------------------------------------------------------------------------------------------------
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
75 -- Return the TileSet class
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
76 return TileSet
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
77
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
78
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
79 --[[Copyright (c) 2011-2012 Casey Baxter
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
80
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
81 Permission is hereby granted, free of charge, to any person obtaining a copy
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
82 of this software and associated documentation files (the "Software"), to deal
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
83 in the Software without restriction, including without limitation the rights
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
84 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
85 copies of the Software, and to permit persons to whom the Software is
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
86 furnished to do so, subject to the following conditions:
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
87
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
88 The above copyright notice and this permission notice shall be included in
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
89 all copies or substantial portions of the Software.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
90
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
91 Except as contained in this notice, the name(s) of the above copyright holders
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
92 shall not be used in advertising or otherwise to promote the sale, use or
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
93 other dealings in this Software without prior written authorization.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
94
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
95 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
96 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
97 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
98 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
99 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
100 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
101 THE SOFTWARE.--]]
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
102