Difference between revisions of "Tiled Deco Shapes"
From GiderosMobile
(Created page with "__NOTOC__ == TILED DECO SHAPES == Here are the classes to build the Tiled shapes to decorate your levels. The following classes read the shapes parameters as defined in Tiled...") |
(No difference)
|
Revision as of 00:53, 26 October 2025
TILED DECO SHAPES
Here are the classes to build the Tiled shapes to decorate your levels. The following classes read the shapes parameters as defined in Tiled and use Gideros Shape Class to draw them.
You may want to put each shape in separate files in a Tiled folder
You can create a file called "Tiled_Shapes.lua" and copy the code below. You can also put the code at the very bottom of your "_tiled_levels.lua" if you use one. Personally I prefer creating a file for each shapes which I put in a Tiled folder, it's easier to modify. You choose!
The deco shapes:
Tiled_Shape_Ellipse = Core.class(Sprite) -- tiled_ellipse.lua
function Tiled_Shape_Ellipse:init(xparams)
-- params
local params = xparams or {}
params.x = xparams.x or nil
params.y = xparams.y or nil
params.w = xparams.w or 32
params.h = xparams.h or 32
params.steps = xparams.steps or 32 -- 24
params.color = xparams.color or nil
params.r = xparams.r or 255
params.g = xparams.g or 255
params.b = xparams.b or 255
params.alpha = xparams.alpha or 1
params.texpath = xparams.texpath or nil
params.istexpot = xparams.istexpot or nil
params.shapelinewidth = xparams.shapelinewidth or nil
params.shapelinecolor = xparams.shapelinecolor or nil
params.shapelinealpha = xparams.shapelinealpha or 1
params.scalex = xparams.scalex or 1
params.scaley = xparams.scaley or params.scalex
params.skewx = xparams.skewx or 0 -- angle in degrees
params.skewy = xparams.skewy or params.skewx -- angle in degrees
params.rotation = xparams.rotation or 0
params.data = xparams.data or nil
params.value = xparams.value or nil
-- image
local img = Shape.new()
if params.shapelinewidth then
img:setLineStyle(params.shapelinewidth, params.shapelinecolor, params.shapelinealpha)
end
if params.texpath then
local tex
if not params.istexpot then
tex = Texture.new(params.texpath, false, {wrap = Texture.REPEAT, extend = false})
else
tex = Texture.new(params.texpath, false, {wrap = Texture.REPEAT})
end
local skewanglex = math.rad(params.skewx)
local skewangley = math.rad(params.skewy)
local matrix = Matrix.new(
params.scalex, math.tan(skewanglex), math.tan(skewangley), params.scaley, 0, 0
)
img:setFillStyle(Shape.TEXTURE, tex, matrix)
tex = nil
elseif params.color then
img:setFillStyle(Shape.SOLID, params.color, params.alpha)
else
img:setFillStyle(Shape.NONE)
end
img:beginPath()
for i = 0, 360, 360 / params.steps do
img:lineTo(
(params.w / 2) + params.w / 2 * math.cos(^<i),
(params.h / 2) + params.h / 2 * math.sin(^<i)
)
end
img:endPath()
img:setRotation(params.rotation)
img:setAlpha(params.alpha)
img:setColorTransform(params.r/255, params.g/255, params.b/255, params.alpha)
self:addChild(img)
end
Tiled_Shape_Point = Core.class(Sprite) -- tiled_point.lua
function Tiled_Shape_Point:init(xparams)
-- params
local params = xparams or {}
params.x = xparams.x or nil
params.y = xparams.y or nil
params.shapelinewidth = xparams.shapelinewidth or 0
params.color = xparams.color or nil -- hex
params.alpha = xparams.alpha or 1
params.rotation = xparams.rotation or 0
params.data = xparams.data or nil
params.value = xparams.value or nil
-- image
local img = Shape.new()
img:setLineStyle(params.shapelinewidth, params.color, params.alpha) -- (width, color, alpha)
img:beginPath()
img:moveTo(0,0)
img:lineTo(1, 0)
img:endPath()
img:setRotation(params.rotation)
img:setAlpha(params.alpha)
self.w, self.h = img:getWidth(), img:getHeight()
self:addChild(img)
end
Tiled_Shape_Polygon = Core.class(Sprite) -- tiled_polygon.lua
function Tiled_Shape_Polygon:init(xparams)
-- params
local params = xparams or {}
params.x = xparams.x or nil
params.y = xparams.y or nil
params.coords = xparams.coords or nil
params.color = xparams.color or nil -- hex
params.r = xparams.r or 255
params.g = xparams.g or 255
params.b = xparams.b or 255
params.alpha = xparams.alpha or 1
params.texpath = xparams.texpath or nil
params.istexpot = xparams.istexpot or nil
params.shapelinewidth = xparams.shapelinewidth or 0
params.shapelinecolor = xparams.shapelinecolor or nil
params.shapelinealpha = xparams.shapelinealpha or 1
params.scalex = xparams.scalex or 1
params.scaley = xparams.scaley or params.scalex
params.skewx = xparams.skewx or 0 -- angle in degrees
params.skewy = xparams.skewy or params.skewx -- angle in degrees
params.rotation = xparams.rotation or 0
params.data = xparams.data or nil
params.value = xparams.value or nil
-- image
local img = Shape.new()
img:setLineStyle(params.shapelinewidth, params.shapelinecolor, params.shapelinealpha) -- (width, color, alpha)
if params.texpath then
local tex
if not params.istexpot then
tex = Texture.new(params.texpath, false, {wrap = Texture.REPEAT, extend = false})
else
tex = Texture.new(params.texpath, false, {wrap = Texture.REPEAT})
end
local skewanglex = math.rad(params.skewx)
local skewangley = math.rad(params.skewy)
local matrix = Matrix.new(
params.scalex, math.tan(skewanglex), math.tan(skewangley), params.scaley, 0, 0
)
img:setFillStyle(Shape.TEXTURE, tex, matrix)
tex = nil
elseif params.color then
img:setFillStyle(Shape.SOLID, params.color, params.alpha)
else
img:setFillStyle(Shape.NONE)
end
img:beginPath()
img:moveTo(params.coords[1].x, params.coords[1].y)
for p = 2, #params.coords do
img:lineTo(params.coords[p].x, params.coords[p].y)
end
img:closePath()
img:endPath()
img:setRotation(params.rotation)
img:setAlpha(params.alpha)
img:setColorTransform(params.r/255, params.g/255, params.b/255, params.alpha)
self.w, self.h = img:getWidth(), img:getHeight()
self:addChild(img)
end
Tiled_Shape_Polyline = Core.class(Sprite) -- tiled_polyline.lua
function Tiled_Shape_Polyline:init(xparams)
-- params
local params = xparams or {}
params.x = xparams.x or nil
params.y = xparams.y or nil
params.shapelinewidth = xparams.shapelinewidth or 1 -- 0
params.color = xparams.color or nil -- hex
params.r = xparams.r or 255
params.g = xparams.g or 255
params.b = xparams.b or 255
params.alpha = xparams.alpha or 1
params.coords = xparams.coords or nil
params.rotation = xparams.rotation or 0
params.data = xparams.data or nil
params.value = xparams.value or nil
-- image
local img = Shape.new()
img:setLineStyle(params.shapelinewidth, params.color, params.alpha) -- (width, color, alpha)
img:setFillStyle(Shape.NONE)
img:beginPath()
img:moveTo(params.coords[1].x, params.coords[1].y)
for p = 2, #params.coords do
img:lineTo(params.coords[p].x, params.coords[p].y)
end
-- img:closePath()
img:endPath()
img:setRotation(params.rotation)
img:setAlpha(params.alpha)
img:setColorTransform(params.r/255, params.g/255, params.b/255, params.alpha)
self.w, self.h = img:getWidth(), img:getHeight()
self:addChild(img)
end
Tiled_Shape_Rectangle = Core.class(Sprite) -- tiled_rectangle.lua
function Tiled_Shape_Rectangle:init(xparams)
-- params
local params = xparams or {}
params.x = xparams.x or nil
params.y = xparams.y or nil
params.w = xparams.w or nil
params.h = xparams.h or nil
params.rotation = xparams.rotation or nil
params.color = xparams.color or nil -- hex
params.r = xparams.r or 255
params.g = xparams.g or 255
params.b = xparams.b or 255
params.alpha = xparams.alpha or 1
params.texpath = xparams.texpath or nil
params.istexpot = xparams.istexpot or nil
params.shapelinewidth = xparams.shapelinewidth or 0
params.shapelinecolor = xparams.shapelinecolor or nil
params.shapelinealpha = xparams.shapelinealpha or 1
params.scalex = xparams.scalex or 1
params.scaley = xparams.scaley or params.scalex
params.skewx = xparams.skewx or 0 -- angle in degrees
params.skewy = xparams.skewy or 0 -- params.skewx, angle in degrees
params.data = xparams.data or nil
params.value = xparams.value or nil
-- image
local img = Shape.new()
img:setLineStyle(params.shapelinewidth, params.shapelinecolor, params.shapelinealpha) -- (width, color, alpha)
if params.texpath then
local tex
if not params.istexpot then
tex = Texture.new(params.texpath, false, { wrap=Texture.REPEAT, extend=false, } )
else
tex = Texture.new(params.texpath, false, { wrap=Texture.REPEAT, } )
end
local skewanglex = math.rad(params.skewx)
local skewangley = math.rad(params.skewy)
local matrix = Matrix.new(
params.scalex, math.tan(skewanglex), math.tan(skewangley), params.scaley, 0, 0
)
img:setFillStyle(Shape.TEXTURE, tex, matrix)
-- img:setShader(Effect.colour_pixelation)
tex = nil
elseif params.color then
img:setFillStyle(Shape.SOLID, params.color)
else
img:setFillStyle(Shape.NONE)
end
img:beginPath()
img:moveTo(0, 0)
img:lineTo(params.w, 0)
img:lineTo(params.w, params.h)
img:lineTo(0, params.h)
img:lineTo(0, 0)
img:endPath()
img:setRotation(params.rotation)
img:setAlpha(params.alpha)
img:setColorTransform(params.r/255, params.g/255, params.b/255, params.alpha)
self:addChild(img)
end
Tiled_Shape_Text = Core.class(Sprite) -- tiled_text.lua
function Tiled_Shape_Text:init(xparams)
-- params
local params = xparams or {}
params.x = xparams.x or nil
params.y = xparams.y or nil
params.text = xparams.text or nil
params.ttf = xparams.ttf or nil
params.w = xparams.w or nil
params.h = xparams.h or nil
params.rotation = xparams.rotation or nil
params.color = xparams.color or nil
params.r = xparams.r or 255
params.g = xparams.g or 255
params.b = xparams.b or 255
params.alpha = xparams.alpha or 1
params.scalex = xparams.scalex or 1
params.scaley = xparams.scaley or params.scalex
params.data = xparams.data or nil
params.value = xparams.value or nil
-- image
local img = TextField.new(params.ttf, params.text, params.text)
-- img:setAnchorPoint(0, -1)
if params.color then
img:setTextColor(params.color)
end
img:setRotation(params.rotation)
img:setAlpha(params.alpha)
img:setColorTransform(params.r/255, params.g/255, params.b/255, params.alpha)
-- auto scale
local currw = img:getWidth()
img:setScale(params.w/currw)
--
self:addChild(img)
end