annotate AdvTiledLoader/Object.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 -- -= Object =-
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 local Object = {class = "Object"}
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
6 Object.__index = Object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
7
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
8 ---------------------------------------------------------------------------------------------------
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
9
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
10 -- Returns a new Object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
11 function Object:new(layer, name, type, x, y, width, height, gid, prop)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
12
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
13 -- Public:
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
14 local obj = setmetatable({}, Object)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
15 obj.layer = layer -- The layer that the object belongs to
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
16 obj.name = name or "" -- Name of the object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
17 obj.type = type or "" -- Type of the object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
18 obj.x = x or 0 -- X location on the map
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
19 obj.y = y or 0 -- Y location on the map
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
20 obj.width = width or 0 -- Object width in tiles
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
21 obj.height = height or 0 -- Object height in tiles
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
22 obj.gid = gid -- The object's associated tile. If false an outline will be drawn.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
23 obj.visible = true -- If false then the object will not be drawn
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
24 obj.properties = prop or {} -- Properties set by tiled.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
25 obj.polygon = nil -- Polygon points. Set by the Loader if defined in Tiled.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
26 obj.polyline = nil -- Polyline points. Set by the Loader if defined in Tiled.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
27
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
28 -- drawInfo stores values needed to actually draw the object. You can either set these yourself
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
29 -- or use updateDrawInfo to do it automatically.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
30 obj.drawInfo = {
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
31
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
32 -- x and y are the drawing location of the object. This is different than the object's x and
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
33 -- y value which is the object's placement on the map.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
34 x = 0, -- The x draw location
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
35 y = 0, -- The y draw location
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 -- These limit the drawing of the object. If the object falls out of the bounds of
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
38 -- the map's drawRange then the object will not be drawn.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
39 left = 0, -- The leftmost point on the object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
40 right = 0, -- The rightmost point on the object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
41 top = 0, -- The highest point on the object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
42 bottom = 0, -- The lowest point on the object
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 -- The order to draw the object in relation to other objects. Usually equal to bottom.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
45 order = 0,
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
46
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
47 -- In addition to this, other drawing information can be stored in the numerical
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
48 -- indicies which is context sensitive to the map's orientation, if the object has a gid, or
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
49 -- of the object is a polygon or polyline object.
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
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
52 -- Update the draw info
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
53 Object.updateDrawInfo(obj)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
54
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
55 -- Return our object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
56 return obj
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
57 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
58
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 -- Updates the draw information. Call this every time the object moves or changes size.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
61 function Object:updateDrawInfo()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
62 local di = self.drawInfo
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
63 local map = self.layer.map
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
64
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
65 if self.polygon or self.polyline then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
66 -- Reset the draw info
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
67 self.drawInfo = {}
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
68 di = self.drawInfo
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
69 -- Set the box to the first vertex
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
70 local vertexes = self.polygon or self.polyline
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
71 -- Create the draw information for each vertex
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
72 for k,v in ipairs(vertexes) do
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
73 if k%2 == 1 then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
74 if map.orientation == "isometric" then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
75 di[k], di[k+1] = map:fromIso(self.x+vertexes[k], self.y+vertexes[k+1])
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
76 else
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
77 di[k], di[k+1] = self.x+vertexes[k], self.y+vertexes[k+1]
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
78 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
79 di[k], di[k+1] = di[k] - map.offsetX, di[k+1] - map.offsetY
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
80 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
81 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
82 -- Set the start draw location
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
83 di.x, di.y = di[1], di[2]
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
84 -- Prime the bounds
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
85 di.left, di.right, di.top, di.bottom = di.x, di.x, di.y, di.y
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
86 -- Go through each vertex and find the highest and lowest values for the bounds.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
87 for k,v in ipairs(di) do
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
88 -- if it's odd then it's an x value
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
89 if k%2 == 1 then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
90 if v < di.left then di.left = v end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
91 if v > di.right then di.right = v end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
92 -- if it's even it's a y value
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
93 else
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
94 if v < di.top then di.top = v end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
95 if v > di.bottom then di.bottom = v end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
96 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
97 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
98 di.order = di.bottom
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
99
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
100 -- Isometric map
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
101 elseif map.orientation == "isometric" then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
102 -- Is a tile object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
103 if self.gid then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
104 local t = map.tiles[self.gid]
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
105 local tw, th = t.width, t.height
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
106 di.x, di.y = map:fromIso(self.x, self.y)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
107 di.x, di.y = di.x - map.offsetX, di.y - map.offsetY
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
108 di.order = di.y
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
109 di.x, di.y = di.x - map.tileWidth/2, di.y - th
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
110 di.left, di.right, di.top, di.bottom = di.x, di.x+tw, di.y , di.y +th
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
111 -- Is not a tile object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
112 else
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
113 di[1], di[2] = map:fromIso(self.x, self.y)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
114 di[3], di[4] = map:fromIso(self.x + self.width, self.y)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
115 di[5], di[6] = map:fromIso(self.x + self.width, self.y + self.height)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
116 di[7], di[8] = map:fromIso(self.x, self.y + self.height)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
117 for i =1,7,2 do
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
118 di[i] = di[i] - map.offsetX
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
119 di[i+1] = di[i+1] - map.offsetY
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
120 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
121 di.left, di.right, di.top, di.bottom = di[7], di[3], di[2], di[6]
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
122 di.order = 1
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
123 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
124
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
125 -- Orthogonal map
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
126 else
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
127 -- Is a tile object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
128 if self.gid then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
129 local t = map.tiles[self.gid]
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
130 local tw, th = t.width, t.height
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
131 di.x, di.y = self.x - map.offsetX, self.y - map.offsetY
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
132 di.order = di.y
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
133 di.y = di.y - th
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
134 di.left, di.top, di.right, di.bottom = di.x, di.y, di.x+tw, di.y+th
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
135 -- Is not a tile object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
136 else
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
137 di.x, di.y = self.x - map.offsetX, self.y - map.offsetY
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
138 di[1], di[2] = di.x, di.y
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
139 di[3], di[4] = self.width > 20 and self.width or 20, self.height > 20 and self.height or 20
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
140 di.left, di.top, di.right, di.bottom = di.x, di.y , di.x+di[3], di.y +di[4]
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
141 di.order = 1
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
142 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
143 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
144 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
145
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
146 ---------------------------------------------------------------------------------------------------
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
147 -- Draw the object. The passed color is the color of the object layer the object belongs to.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
148 function Object:draw(x, y, r, g, b, a)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
149
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
150 if not self.visible then return end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
151
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
152 local di = self.drawInfo
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
153 love.graphics.setLineWidth(2)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
154
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
155 -- The object is a polyline.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
156 if self.polyline then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
157 love.graphics.push()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
158 love.graphics.translate(0,1)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
159 love.graphics.setColor(0, 0, 0, a)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
160 love.graphics.line( unpack(di) )
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
161 love.graphics.pop()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
162 love.graphics.setColor(r, g, b, a)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
163 love.graphics.line( unpack(di) )
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
164
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
165 -- The object is a polygon.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
166 elseif self.polygon then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
167 love.graphics.push()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
168 love.graphics.translate(0,1)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
169 love.graphics.setColor(0, 0, 0, a)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
170 love.graphics.polygon( "line", unpack(di) )
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
171 love.graphics.pop()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
172 love.graphics.setColor(r,g,b,a)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
173 love.graphics.polygon( "line", unpack(di) )
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
174
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
175 -- The object is a tile object. Draw the tile.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
176 elseif self.gid then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
177 local tile = self.layer.map.tiles[self.gid]
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
178 tile:draw(di.x, di.y - tile.height)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
179
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
180 -- Map is isometric. Draw a parallelogram.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
181 elseif self.layer.map.orientation == "isometric" then
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
182 love.graphics.setColor(r, g, b, a/5)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
183 love.graphics.polygon("fill", unpack(di))
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
184
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
185 love.graphics.push()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
186 love.graphics.translate(0,1)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
187 love.graphics.setColor(0, 0, 0, a)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
188 love.graphics.polygon("line", unpack(di))
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
189 love.graphics.pop()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
190
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
191 love.graphics.setColor(r,g,b,a)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
192 love.graphics.polygon("line", unpack(di))
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
193
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
194 -- Map is orthogonal. Draw a rectangle.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
195 else
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
196 love.graphics.setColor(r, g, b, a/5)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
197 love.graphics.rectangle("fill", unpack(di))
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
198
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
199 love.graphics.setColor(0, 0, 0, a)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
200 love.graphics.push()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
201 love.graphics.translate(1,1)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
202 love.graphics.rectangle("line", unpack(di))
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
203 love.graphics.print(self.name, di.x, di.y-20)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
204 love.graphics.pop()
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
205
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
206 love.graphics.setColor(r,g,b,a)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
207 love.graphics.rectangle("line", unpack(di))
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
208 love.graphics.print(self.name, di.x, di.y-20)
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
209 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
210 end
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
211
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
212 ---------------------------------------------------------------------------------------------------
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
213 -- Returns the Object class
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
214 return Object
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
215
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
216
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
217 --[[Copyright (c) 2011-2012 Casey Baxter
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
218
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
219 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
220 of this software and associated documentation files (the "Software"), to deal
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
221 in the Software without restriction, including without limitation the rights
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
222 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
223 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
224 furnished to do so, subject to the following conditions:
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
225
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
226 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
227 all copies or substantial portions of the Software.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
228
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
229 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
230 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
231 other dealings in this Software without prior written authorization.
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
232
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
233 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
234 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0c46edeabad6 scrolling map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
235 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
236 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
237 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
238 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
239 THE SOFTWARE.--]]