Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Penrose Tiles Release v3.0 -A Penrose tile program.
Penrose Tiles Tab Order Version: 3.0
------------------------------
This file should not be included in the Codea project.
#Main
#ProtoTile
#Tile
#Creator
#Tiles
#InitialiseTiles
#ccConfig
Penrose Tiles Tab Order Version: 1
------------------------------
This file should not be included in the Codea project.
#Main
#ProtoTile
#Tile
#Tiles
#InitialiseTiles
#SavedTiles
#ccConfig
--[[
###########################################
##Codea Community Project Config Settings##
###########################################
##You can use # to comment out a line
##Use 1 for true and 0 for false
###########################################
# Add project info below #
#==========================================
ProjectName: Penrose Tiles
Version: 1.0
Comments: This is quite functionally extensive
Author: Andrew Stacey
##License Info: http://choosealicense.com
##Supported Licneses: MIT, GPL, Apache, NoLicense
License: PublicDomain
#==========================================
###########################################
# Settings #
[Settings]=================================
##Codea Community Configuration settings
##Format: Setting state
Button 1
ParamButton 0
NotifyCCUpdate 1
ResetUserOption 0
AddHeaderInfo 1
Connect 0
[/Settings]================================
###########################################
# Screenshots #
[Screenshots]==============================
##Screenshots from your project.
##Format: url
##Example: http://www.dropbox.com/screenshot.jpg
[/Screenshots]=============================
###########################################
# Video #
[Video]====================================
##Link to a YouTube.com video.
##Format: url
##Example: http://www.youtube.com/videolink
[/Video]===================================
###########################################
# Dependencies #
[Dependencies]=============================
##Include the names of any dependencies here
##Format: Dependency
##Example: Codea Community
[/Dependencies]============================
############################################
# Tabs #
[Tabs]======================================
##Select which tabs are to be uploaded.
##Keyword 'not' excludes a tab or tabs. Keyword 'add' includes a tab or tabs.
##not * will exclude all tabs to allow for individual selection
##not *tab1 will look for any tab with tab1 on the end.
##not tab1* will look for any tab with tab1 at the beginning.
##Format: (add/not)(*)tab(*)
##Example: not Main --this will remove main.
##Example: not *tab1 --this will remove any tab with "tab1" on the end.
##Example: add Main --This will add Main back in.
[/Tabs]=====================================
#############################################
# Assets #
[Assets]=====================================
##Directory, path and url info for any assets besides the standard Codea assets.
##Format: Folder:sprite URL
##Example: Documents:sprite1 http://www.somewebsite.com/img.jpg
[/Assets]====================================
--]]
Creator = class(Tile)
function Creator:isTouchedBy(t,b)
local tv = vec2(t.x,t.y) - self.position - vec2(WIDTH,HEIGHT)
if self.ptile:checkTouch(tv:rotate(-self.angle)) then
if not b then
local tl = Tile({position = tiles:fromScreen(self.position), ptile = self.ptile, scale = self.scale, tint = self.otint})
self.tiles:addTile(tl)
tl.tpoint = tv
self.touchClaiment = self.tiles.touchHandlers[1][1][tiles.ntiles]
end
return true
end
return false
end
function Creator:processTouches (g)
if g.type.ended then
g:reset()
end
end
function string:split(pat)
pat = pat or '%s+'
local st, g = 1, self:gmatch("()("..pat..")")
local function getter(segs, seps, sep, cap1, ...)
st = sep and seps + #sep
return self:sub(segs, (seps or 0) - 1), cap1 or sep, ...
end
return function() if st then return getter(st, g()) end end
end
local pieces = {
{"l","e","a","D"},
{"A","f","g","b"},
{"c","B","h","i"},
{"k","d","C","j"}
}
local int = {"a","b","c","d"}
local function jigsaw(m)
local t,jig,mt = {},{}
for v in m:split(";") do
mt = {}
for u in v:split(",") do
table.insert(mt,u)
jig[u] = mt
end
table.insert(t,mt)
end
local it,opp = {},{}
for k,v in ipairs(t) do
it[v] = k
end
for k,v in ipairs(int) do
opp[jig[v]] = jig[string.upper(v)]
opp[jig[string.upper(v)]] = jig[v]
end
local e,me = {}
for k,v in ipairs(pieces) do
me = {}
for l,u in ipairs(v) do
table.insert(me,{it[jig[u]],it[opp[jig[u]]]})
end
table.insert(e,me)
end
return e
end
function initialiseTiles(t)
t = t or {}
local angle = t.angle or math.pi/5
local s = t.size or 100
local tileTypes = {}
local spotRadius = 20
local touchHandler = t.touchHandler
local phi = (math.sqrt(5) + 1)/2
for k,v in ipairs({
"kite",
"dart",
"thinRhombus",
"thickRhombus",
"hexagon",
"tripleHexagon",
"eqTriangle",
"isoTriangle",
"octagon",
"fourSquare",
"twoSquare",
"octSquare",
"11r10Rhombus",
"11r8Rhombus",
"11r6Rhombus",
"11r4Rhombus",
"11r2Rhombus",
}) do
tileTypes[v] = ProtoTile()
end
for k=1,4 do
tileTypes["jigSquare" .. k] = ProtoTile()
end
local kc = ( s*vec2(1,0):rotate(angle) +
s*vec2(1,0) +
s*vec2(1,0):rotate(-angle) )/4
local kd = ( s*vec2(1,0) +
s*vec2(1,0):rotate(angle) +
s*2*math.cos(angle)*vec2(1,0) +
s*vec2(1,0):rotate(-angle) )/4
tileTypes["kite"]:initialise(
{
name = "kite",
vertices = {
vec2(0,0),
s*vec2(1,0):rotate(angle),
s*vec2(1,0),
s*vec2(1,0):rotate(-angle)
},
corners = {
function(v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipseMode(RADIUS)
ellipse(v,s/phi+strokeWidth()/2+1)
end,
function()
end,
function(v,c)
noFill()
stroke(c[2])
strokeWidth(5)
ellipse(v,s*(1-1/phi)+strokeWidth()/2+1)
end,
function(v)
end,
},
edges = {{1,-1},{2,-2},{-2,2},{-1,1}},
dAngle = 36,
background = color(255, 255, 255, 111),
rscale = phi,
replacements = {
{tileTypes["kite"], -kc*phi + phi*s*vec2(1,0):rotate(-angle) + kc:rotate(3*angle), 108},
{tileTypes["kite"], -kc*phi + phi*s*vec2(1,0):rotate(angle) + kc:rotate(-3*angle), -108},
{tileTypes["dart"], -kc*phi + s*2*math.cos(angle)*vec2(1,0):rotate(-angle) - kd:rotate(-angle), 144}
}
}
)
tileTypes["dart"]:initialise(
{
name = "dart",
vertices = {
s*vec2(1,0),
s*vec2(1,0):rotate(angle),
s*2*math.cos(angle)*vec2(1,0),
s*vec2(1,0):rotate(-angle)
},
corners = {
function(v,c)
noFill()
stroke(c[2])
strokeWidth(5)
ellipse(v,s*1/phi - s*(1-1/phi)+strokeWidth()/2+1)
end,
function()
end,
function(v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v,s*(1-1/phi)+strokeWidth()/2+1)
end,
function()
end,
},
edges = {{2,-2},{1,-1},{-1,1},{-2,2}},
dAngle = 36,
background = color(255, 255, 255, 255),
rscale = phi,
replacements = {
{tileTypes["kite"],
s*2*math.cos(angle)*vec2(1,0)*phi-kd*phi - kc, 180},
{tileTypes["dart"], -kd*phi + s*vec2(1,0):rotate(-angle)*phi + kd:rotate(6*angle) - s*2*math.cos(angle)*vec2(1,0):rotate(6*angle), 216}
}
}
)
tileTypes["thinRhombus"]:initialise(
{
name = "thinRhombus",
vertices = {
vec2(0,0),
s*vec2(1,0):rotate(angle),
s*2*math.cos(angle/2)*vec2(1,0):rotate(angle/2),
s*vec2(1,0),
},
corners = {
function()
end,
function(v,c)
noFill()
stroke(c[2])
strokeWidth(5)
ellipse(v,1.5*spotRadius+strokeWidth()/2+1)
end,
function(v)
end,
function(v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v,1.5*spotRadius)
end,
},
edges = {{2,-2},{-2,2},{-1,1},{1,-1}},
dAngle = 36,
background = color(255, 255, 255, 255),
rscale = phi,
replacements = {
{tileTypes["thinRhombus"], phi*s*math.sin(angle/2)*vec2(0,1):rotate(angle/2) + s*math.sin(angle/2)*vec2(0,1):rotate(7*angle/2), 108 },
{tileTypes["thickRhombus"], phi*s*math.cos(angle/2)*vec2(1,0):rotate(angle/2) - s*math.cos(angle)*vec2(1,0):rotate(angle) , 36 },
}
}
)
tileTypes["thickRhombus"]:initialise(
{
name = "thickRhombus",
vertices = {
vec2(0,0),
s*vec2(1,0):rotate(angle),
s*2*math.cos(angle)*vec2(1,0),
s*vec2(1,0):rotate(-angle),
},
corners = {
function(v,c)
noFill()
stroke(c[2])
strokeWidth(5)
ellipse(v,s-1.5*spotRadius+strokeWidth()/2+1)
end,
function()
end,
function(v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v,1.5*spotRadius)
end,
function()
end,
},
edges={{2,-2},{-1,1},{1,-1},{-2,2}},
dAngle = 36,
background = color(255, 255, 255, 255),
rscale = phi,
replacements = {
{tileTypes["thinRhombus"], phi*s*math.sin(angle)*vec2(0,1) + s*math.sin(angle/2)*vec2(0,1):rotate(7*angle/2), 108},
{tileTypes["thickRhombus"], phi*s*math.cos(angle)*vec2(1,0) - s*math.cos(angle)*vec2(1,0):rotate(-angle) , 144 },
{tileTypes["thickRhombus"], -phi*s*math.cos(angle)*vec2(1,0) + s*math.cos(angle)*vec2(1,0),180}
}
}
)
local hfn = function(v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v,spotRadius)
end
local hangle = math.pi/3
local hs = s/2
local rangle = math.atan(math.sqrt(3)/2)
tileTypes["hexagon"]:initialise(
{
name = "hexagon",
vertices = {
vec2(0,0),
hs*vec2(1,0):rotate(hangle),
hs*vec2(1,0):rotate(hangle) + hs*vec2(1,0),
hs*vec2(2,0),
hs*vec2(1,0):rotate(-hangle) + hs*vec2(1,0),
hs*vec2(1,0):rotate(-hangle),
},
corners = {hfn,hfn,hfn,hfn,hfn,hfn,
},
edges = {{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}},
dAngle = 60,
checkEdges = {1},
rscale = math.sqrt(7),
rangle = math.deg(rangle),
replacements = {
{tileTypes["hexagon"], vec2(0,0), -math.deg(rangle)},
{tileTypes["hexagon"], math.sqrt(7)*hs*vec2(1,0):rotate(hangle) - hs*vec2(1,0):rotate(2*hangle - rangle), -math.deg(rangle)},
{tileTypes["hexagon"], math.sqrt(7)*hs*vec2(1,0):rotate(2*hangle) - hs*vec2(1,0):rotate(3*hangle - rangle), -math.deg(rangle)},
{tileTypes["hexagon"], math.sqrt(7)*hs*vec2(1,0):rotate(3*hangle) - hs*vec2(1,0):rotate(4*hangle - rangle), -math.deg(rangle)},
{tileTypes["hexagon"], math.sqrt(7)*hs*vec2(1,0):rotate(4*hangle) - hs*vec2(1,0):rotate(5*hangle - rangle), -math.deg(rangle)},
{tileTypes["hexagon"], math.sqrt(7)*hs*vec2(1,0):rotate(5*hangle) - hs*vec2(1,0):rotate( - rangle), -math.deg(rangle)},
{tileTypes["hexagon"], math.sqrt(7)*hs*vec2(1,0) - hs*vec2(1,0):rotate(hangle - rangle), -math.deg(rangle)},
}
}
)
tileTypes["tripleHexagon"]:initialise(
{
name = "triple hexagon",
vertices = {
vec2(0,0),
hs*vec2(1,0):rotate(hangle),
hs*vec2(1,0):rotate(hangle) + hs*vec2(1,0),
hs*vec2(2,0),
hs*vec2(1,0):rotate(-hangle) + hs*vec2(1,0),
hs*vec2(1,0):rotate(-hangle),
},
corners = {hfn,nil,hfn,nil,hfn,nil,
},
edges = {{0,1},{1,0},{0,1},{1,0},{0,1},{1,0}},
dAngle = 60,
checkEdges = {1,2},
rscale = math.sqrt(3),
rangle = 30,
replacements = {
{tileTypes["tripleHexagon"], hs*vec2(0,1), 30},
{tileTypes["tripleHexagon"], hs*vec2(0,1):rotate(2*hangle), 150},
{tileTypes["tripleHexagon"], hs*vec2(0,1):rotate(4*hangle), 270},
}
}
)
tileTypes["eqTriangle"]:initialise(
{
name = "eqTriangle",
vertices = {
vec2(0,0),
s*vec2(1,0):rotate(hangle),
s*vec2(1,0)
},
corners = {hfn,hfn,hfn},
edges = {{0,0},{0,0},{0,0}},
dAngle = 60,
checkEdges = {1},
rscale = math.sqrt(3),
rangle = 30,
replacements = {
{tileTypes["eqTriangle"], s*vec2(0,1) - 1/math.sqrt(3)*s*vec2(0,1):rotate(hangle/2),30 },
{tileTypes["eqTriangle"], s*vec2(0,1):rotate(2*hangle) - 1/math.sqrt(3)*s*vec2(0,1):rotate(5*hangle/2),30 },
{tileTypes["eqTriangle"], s*vec2(0,1):rotate(-2*hangle) - 1/math.sqrt(3)*s*vec2(0,1):rotate(-3*hangle/2),30 },
}
}
)
local ifn = function(v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v,1.5*spotRadius)
end
tileTypes["isoTriangle"]:initialise(
{
name = "isoTriangle",
vertices = {
vec2(0,0),
s*vec2(1,0):rotate(math.pi/5),
s*vec2(1,0)
},
corners = {ifn,ifn,ifn},
edges = {{0,0},{1,1},{0,0}},
dAngle = 36
}
)
hangle = math.pi/4
local ofn = function(v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v,(2*hs/math.sqrt(23)+strokeWidth()/2+1),(2*hs/3+strokeWidth()+1))
end
local offn = function(v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v,(2*hs/3+strokeWidth()+1))
end
tileTypes["octagon"]:initialise(
{
name = "octagon",
vertices = {
vec2(0,0),
hs*vec2(1,0):rotate(hangle),
hs*vec2(1,0):rotate(hangle) + hs*vec2(1,0),
hs*(math.sqrt(2)+1)*vec2(1,0),
hs*(math.sqrt(2)+1)*vec2(1,0)+hs*vec2(0,-1),
hs*vec2(1,0):rotate(-hangle) + hs*vec2(1,-1),
hs*vec2(1,0):rotate(-hangle) + hs*vec2(0,-1),
hs*vec2(0,-1),
},
corners = {
nil,
function (v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v - hs/(2*math.sqrt(2)+2)*vec2(1,0),hs/3+hs/(2*math.sqrt(2)+2)+strokeWidth()/2+1)
end,
function (v,c)
noFill()
stroke(c[2])
strokeWidth(5)
ellipse(v+hs*vec2(1,-1)/(2*math.sqrt(2)),hs/6+strokeWidth()/2+1)
stroke(c[2])
ellipse(v+hs*vec2(1,0)/(math.sqrt(2)),hs*(1/math.sqrt(2)+1/3)+strokeWidth()/2+1)
end,
nil,
nil,
function (v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v,hs/3+strokeWidth()/2+1)
end,
function (v,c)
noFill()
stroke(c[2])
strokeWidth(5)
ellipse(v,hs/3+strokeWidth()/2+1)
end,
function (v,c)
noFill()
stroke(c[2])
strokeWidth(5)
ellipse(v,hs/3+strokeWidth()/2+1)
end,
},
edges = {{1,5},{2,12},{3,7},{4,9},{5,1},{6,10},{7,3},{8,11}},
dAngle = 45,
checkEdges = {1,2,3,4,5,6,7,8},
rscale = math.sqrt(2),
rangle = 45,
replacements = {
{tileTypes["octagon"],(math.sqrt(2)+1)*hs*vec2(0,1)/2,45},
{tileTypes["octagon"],(math.sqrt(2)+1)*hs*vec2(0,-1)/2,45},
}
}
)
local sangle = math.atan(1/2)
tileTypes["octSquare"]:initialise(
{
name = "octagon square",
vertices = {
vec2(0,0),
hs*vec2(0,1),
hs*vec2(1,1),
hs*vec2(1,0),
},
corners = {
function (v,c)
noFill()
stroke(c[1])
strokeWidth(5)
clip(0,0,3*hs/4-strokeWidth()/2,hs)
ellipse(v+hs*vec2(.5,0),hs/6+strokeWidth()/2+1,hs/2+strokeWidth()/2+1)
clip()
end,
function (v,c)
noFill()
stroke(c[2])
strokeWidth(5)
ellipse(v,hs/3+strokeWidth()/2+1)
end,
function (v,c)
noFill()
stroke(c[1])
strokeWidth(5)
clip(3*hs/4-strokeWidth()/2,hs/2,3*hs/4,hs)
ellipse(v-hs*vec2(.5,0),hs/6+strokeWidth()/2+1,hs/2+strokeWidth()/2+1)
clip()
end,
function (v,c)
noFill()
stroke(c[2])
strokeWidth(5)
ellipse(v,hs/3+strokeWidth()/2+1)
end,
},
edges = {{9,4},{10,6},{11,8},{12,2}},
dAngle = 45,
checkEdges = {1,2,3,4},
rscale = math.sqrt(2),
rangle = 45,
replacements = {
{tileTypes["octSquare"],(1+math.sqrt(2))*hs*vec2(-1,0)/2,45},
{tileTypes["octSquare"],(1+math.sqrt(2))*hs*vec2(-1,-2)/2,45},
}
}
)
local sfn = function(v,c)
noFill()
stroke(c[1])
strokeWidth(10)
ellipse(v,2*spotRadius)
end
tileTypes["fourSquare"]:initialise(
{
name = "four square",
vertices = {
vec2(0,0),
s*vec2(0,1),
s*vec2(1,1),
s*vec2(1,0),
},
corners = {sfn,sfn,sfn,sfn},
edges = {{0,0},{0,0},{0,0},{0,0}},
dAngle = 45,
checkEdges = {1},
rscale = math.sqrt(5),
rangle = math.deg(sangle),
replacements = {
{tileTypes["fourSquare"],math.sqrt(5)*s*vec2(1,1)/2 - .5*s*vec2(1,1):rotate(sangle),math.deg(sangle)},
{tileTypes["fourSquare"],math.sqrt(5)*s*vec2(1,-1)/2 - .5*s*vec2(1,-1):rotate(sangle),math.deg(sangle)},
{tileTypes["fourSquare"],math.sqrt(5)*s*vec2(-1,1)/2 - .5*s*vec2(-1,1):rotate(sangle),math.deg(sangle)},
{tileTypes["fourSquare"],math.sqrt(5)*s*vec2(-1,-1)/2 - .5*s*vec2(-1,-1):rotate(sangle),math.deg(sangle)},
{tileTypes["fourSquare"],vec2(0,0),math.deg(sangle)}
}
}
)
tileTypes["twoSquare"]:initialise(
{
name = "two square",
vertices = {
vec2(0,0),
s*vec2(0,1),
s*vec2(1,1),
s*vec2(1,0),
},
corners = {sfn,nil,sfn,nil},
edges = {{0,1},{1,0},{0,1},{1,0}},
dAngle = 45,
checkEdges = {1,2},
rscale = math.sqrt(2),
rangle = 45,
replacements = {
{tileTypes["twoSquare"],math.sqrt(2)*s*vec2(1,0)/2,45},
{tileTypes["twoSquare"],math.sqrt(2)*s*vec2(-1,0)/2,45},
}
}
)
for k=1,4 do
tileTypes["jigSquare" .. k]:initialise(
{
name = "two square",
vertices = {
vec2(0,0),
s*vec2(0,1),
s*vec2(1,1),
s*vec2(1,0),
},
edges = {{0,1},{1,0},{0,1},{1,0}},
dAngle = 90,
checkEdges = {1,2,3,4}
}
)
end
local elang = math.pi/11
local name,vec
for k=2,10,2 do
name = string.format("11r%uRhombus",k)
vec = s*vec2(1,0):rotate((11-k)*elang)
tileTypes[name]:initialise(
{
name = name,
vertices = {
vec2(0,0),
vec,
vec + s*vec2(1,0),
s*vec2(1,0),
},
corners = {
function()
end,
function(v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v,s - 1.5*spotRadius + strokeWidth()/2+1)
end,
function(v)
end,
function(v,c)
noFill()
stroke(c[1])
strokeWidth(5)
ellipse(v,1.5*spotRadius + strokeWidth()/2 + 1)
end,
},
edges = {{1,-1},{-1,1},{-1,1},{1,-1}},
dAngle = 360/11,
background = color(255, 255, 255, 255),
}
)
end
local tileSets = {}
table.insert(tileSets,{
name = "Penrose Darts",
setup = function(tiles)
tiles:clearCreators()
local n = tiles.ntiles
local x,dx = -75,-125
for l,v in ipairs({"kite", "dart"}) do
tiles:addCreator({position = vec2(x,-75),ptile = tileTypes[v]})
x = x + dx
if n == 0 then
tiles:addTile(Tile({
ptile = tileTypes[v]
}))
end
end
end
})
table.insert(tileSets,{
name = "Penrose Rhombi",
setup = function(tiles)
tiles:clearCreators()
local n = tiles.ntiles
local x,dx = -75,-100
for l,v in ipairs({"thinRhombus", "thickRhombus"}) do
tiles:addCreator({position = vec2(x,-100),ptile = tileTypes[v],angle = 90 + (l-2)*18})
x = x + dx
if n == 0 then
tiles:addTile(Tile({
ptile = tileTypes[v]
}))
end
end
end
})
table.insert(tileSets,{
name = "Maloney Rhombi",
setup = function(tiles)
tiles:clearCreators()
local n = tiles.ntiles
local x,dx = -75,-100
for l=5,1,-1 do
name = string.format("11r%uRhombus",2*l)
tiles:addCreator({position = vec2(x,-100),ptile = tileTypes[name],angle = 90,scale = .5})
x = x + dx
if n == 0 then
tiles:addTile(Tile({
ptile = tileTypes[name]
}))
end
end
end
})
for k,v in ipairs({
{"7 Hexagons", "hexagon"},
{"3 Hexagons", "tripleHexagon"},
{"Equilateral Triangles", "eqTriangle"},
{"4 Squares", "fourSquare"},
{"2 Squares", "twoSquare"},
}) do
table.insert(tileSets,{
name = v[1],
setup = function(tiles)
tiles:clearCreators()
local n = tiles.ntiles
tiles:addCreator({position = vec2(-75,-100),ptile = tileTypes[v[2]],angle = 0})
if n == 0 then
tiles:addTile(Tile({
ptile = tileTypes[v[2]]
}))
end
end
})
end
for k,v in ipairs({
{"Isosceles Triangles", "isoTriangle"},
}) do
table.insert(tileSets,{
name = v[1],
setup = function(tiles)
tiles:clearCreators()
local n = tiles.ntiles
local x,dx = -75,-100
local ob
for i=0,1 do
ob = tiles:addCreator({position = vec2(x,-100),ptile = tileTypes[v[2]],angle = i*180})
if i == 0 then
ob.ignore = true
end
x = x + dx
end
if n == 0 then
tiles:addTile(Tile({
ptile = tileTypes[v[2]]
}))
end
end
})
end
table.insert(tileSets,{
name = "Octagons",
setup = function(tiles)
tiles:clearCreators()
local n = tiles.ntiles
local x,dx = -75,-100
for l,v in ipairs({"octagon", "octSquare"}) do
tiles:addCreator({position = vec2(x,-100),ptile = tileTypes[v],angle = 90 + (l-2)*18})
x = x + dx
if n == 0 then
tiles:addTile(Tile({
ptile = tileTypes[v],
}))
end
end
end
})
local jigs = {
"A,f,g;B,h,i;C,j,k;D,l,e;a;b;c;d",
"A;B,b,e,f,g,j,k,l;C,c;D,h,i;a;d",
"A;B,b,e,f,g,j,k,l;C;D,h,i;a;c;d",
"A;B,b,e,f,g,j,k,l;C;D,h;a;c,i;d",
"A;B,b,e,h,i,j,k,l;C,c;D;a;d,f,g",
"A,C,a,c,f,g,j,l;B,e,h,k;D,i;b;d",
"A,C,a,c,f,g,j,l;B,e,k;D,h,i;b;d",
"A,a,e,g,i,j,k,l;B,C;D,f,h;b,c;d",
"A,i,j,k;B,C,b,c,e,f,g,l;D;a;d,h",
"A,i,j;B,C,b,c,e,f,g,l;D;a;d,h,k",
"A,i,k;B,C,b,c,e,f,g,l;D,j;a;d,h"
}
local njigs = table.getn(jigs)
spotRadius = spotRadius/2
local jfns = {}
for k=1,4 do
table.insert(jfns,function()
pushMatrix()
translate(0,k*spotRadius)
ellipse(0,0,spotRadius)
popMatrix()
end)
end
table.insert(tileSets,{
name = "2x2 Jigsaw",
setup = function(tiles)
tiles:clearCreators()
tiles:clearScreen()
tiles.drawEdges = true
local jig = jigsaw(jigs[math.random(1,njigs)])
local p
local sh = KnuthShuffle(4,true)
for _,k in ipairs(sh) do
p = "jigSquare" .. k
tileTypes[p].edges = jig[k]
tileTypes[p].corners = {}
for l=1,4 do
table.insert(
tileTypes[p].corners,
function(v,c)
noFill()
pushMatrix()
translate(v)
rotate(-(l-1)*90)
stroke(c[jig[k][l][1]%2+1])
jfns[math.floor((jig[k][l][1]-1)/2)+1]()
translate(0,s)
rotate(180)
stroke(c[jig[k][l][2]%2+1])
jfns[math.floor((jig[k][l][2]-1)/2)+1]()
popMatrix()
end
)
end
tileTypes[p]:createImage()
tiles:addTile(Tile({
ptile = tileTypes["jigSquare" .. k],
angle = 90*math.random(0,3),
position = vec2(WIDTH,HEIGHT)/2 + 3*s*vec2(k%2-.5,math.floor(k/2-.5))
}))
end
end
})
return tileTypes,tileSets
end
-- Penrose Tiles
VERSION = 3.0
--[[
sprite()
--]]
cmodule "Penrose Tiles"
cmodule.path("Library Maths", "Library Base", "Library Graphics", "Library Utilities", "Library UI")
HEIGHT, WIDTH = 1024, 768
function setup()
saveProjectInfo("Author","Andrew Stacey")
saveProjectInfo("Project","Penrose Tiles")
saveProjectInfo("Description","A Penrose tile program.")
if AutoGist then
autoGist = AutoGist("Penrose Tiles","A Penrose tile program.",VERSION,false)
autoGist:backup(true)
end
displayMode(FULLSCREEN_NO_BUTTONS)
-- displayMode(FULLSCREEN)
cimport "VecExt"
cimport "Keyboard"
cimport "NumberSpinner"
cimport "PictureBrowser"
cimport "Colour"
touches = cimport "Touch"()
cimport "Menu"
ui = cimport "UI"(touches)
ui:systemmenu()
ui:setPictureList({
directory = "Documents",
camera = false
})
dbug = cimport "Debug" ({ui = ui})
local m = ui:addMenu({
title = "Tile Sets",
attach = true
})
tiles = Tiles(touches,ui)
local tileTypes,tileSets = initialiseTiles()
local set
for k,v in ipairs(tileSets) do
m:addItem({
title = v.name,
action = function()
v.setup(tiles)
return true
end
})
end
tileSets[1].setup(tiles)
tiles:setMenus(tileTypes)
orientationChanged = _orientationChanged
pframe = image(WIDTH,HEIGHT)
nframe = -1
imn = 0
actions = {
--[[
}
stuff = {
]]
function()
tileSets[1].setup(tiles)
end,
function()
tiles:removeTile(tiles.tiles[2])
tiles:redrawbg()
end,
function()
tiles:addForced(3)
end,
function()
tiles:redrawbg()
end,
function()
tiles.checkEdges = false
end,
function()
Tile.setTexture("Documents:Rose Pink",tiles.zoom)
Tile.granularity = .4
tiles:reTintTiles()
tiles:redrawbg()
end,
function()
tiles:replaceTiles()
end,
function()
tiles:replaceTiles()
end,
function()
tiles:replaceTiles()
end
}
end
function draw()
touches:draw()
local running
if tiles.processes[1] then
running = isRecording()
else
nframe = -1
if isRecording() and actions[1] then
table.remove(actions,1)()
end
end
if running then
nframe = nframe + 1
setContext(pframe)
end
if not running or nframe%10 == 0 then
background(40, 40, 50)
tiles:draw()
end
if running then
setContext()
resetMatrix()
spriteMode(CORNER)
sprite(pframe,0,0)
if nframe%10 == 0 then
imn = imn + 1
saveImage(string.format("Penrose:PenroseTile%05d",imn),pframe)
end
end
ui:draw()
dbug:draw()
touches:show()
AtEndOfDraw()
if isRecording() then
noFill()
strokeWidth(5)
stroke(255, 0, 0, 255)
rectMode(CORNER)
rect(0,0,WIDTH,HEIGHT)
end
end
function touched(t)
touches:addTouch(t)
end
function _orientationChanged(o)
if o == PORTRAIT or o == PORTRAIT_UPSIDE_DOWN then
HEIGHT, WIDTH = 1024, 768
else
HEIGHT, WIDTH = 768, 1024
end
ui:orientationChanged(o)
tiles:orientationChanged(o)
pframe = image(WIDTH,HEIGHT)
end
local __contexts = {}
local __numc = 0
local __setContext = setContext
function setContext(i)
if i then
__numc = __numc + 1
table.insert(__contexts,i)
__setContext(i)
else
__setContext() -- needed to reset the matrices
table.remove(__contexts)
__numc = __numc - 1
if __numc ~= 0 then
__setContext(__contexts[__numc])
end
end
end
local __record
function startRecording()
__record = true
end
function stopRecording()
__record = false
end
function isRecording()
return __record
end
local ptypes = 0
ProtoTile = class()
function ProtoTile:init(t)
if t then
self:initialise(t)
end
end
function ProtoTile:initialise(t)
t.vertices = t.vertices or {}
self.corners = t.corners or {}
local bgcolour = t.background or color(127,0,127,255)
self.edgeColour = t.edge or color(0, 0, 0, 255)
self.colours = t.colours or {
color(255, 221, 0, 255),
color(0, 255, 248, 255)
}
self.rscale = t.rscale or 1
self.rangle = t.rangle or 0
self.replacements = t.replacements or {}
self.edges = t.edges or {}
self.dAngle = t.dAngle or t.deltaAngle or 90
ptypes = ptypes + 1
self.name = t.name or string.format("Tile%02d",ptypes)
local o = vec2(0,0)
local n = 0
local ver = {}
for k,v in ipairs (t.vertices) do
o = o + v
n = n + 1
end
o = o / n
local r,lx,ly,ux,uy = 0,0,0,0,0
for k,v in ipairs (t.vertices) do
table.insert(ver,v - o)
r = math.max(r,(v-o):len())
lx = math.min(lx,(v-o).x)
ly = math.min(ly,(v-o).y)
ux = math.max(ux,(v-o).x)
uy = math.max(uy,(v-o).y)
end
self.radius = r
self.bb = {
vec2(lx,ly),
vec2(ux,ly),
vec2(ux,uy),
vec2(lx,ly),
vec2(lx,uy),
vec2(ux,uy)
}
self.points = ver
self.npoints = n
if not t.checkEdges then
self.cedges = {}
for k=1,n do
table.insert(self.cedges,k)
end
else
self.cedges = t.checkEdges
end
local img = image(2*r,2*r)
self.img = img
self:createImage()
self.mesh = mesh()
self.mesh.shader = shader("Documents:Tiling")
local vert = triangulate(ver)
self.mesh.vertices = vert
self.triangles = vert
self.mesh:setColors(bgcolour)
local tver = {}
for k,v in ipairs(vert) do
table.insert(tver,v/(2*r)+vec2(.5,.5))
end
self.mesh.texCoords = tver
self.mesh.texture = img
self.eimg = image(2*r,2*r)
end
function ProtoTile:draw()
self.mesh:setColors(tint())
self.mesh:draw()
end
function ProtoTile:checkTouch(t)
local tv = vec2(t.x,t.y)
local pts = {}
local n = self.npoints
for k=1,n do
pts[k] = self.points[k] - tv
end
pts[n+1] = pts[1]
local int = 0
for k=1,n do
if pts[k].y >= 0 and pts[k+1].y < 0 then
if (pts[k].x * pts[k+1].y - pts[k].y * pts[k+1].x)*(pts[k+1].y - pts[k].y) < 0 then
int = int + 1
end
elseif pts[k].y < 0 and pts[k+1].y >= 0 then
if (pts[k].x * pts[k+1].y - pts[k].y * pts[k+1].x)*(pts[k+1].y - pts[k].y) < 0 then
int = int + 1
end
end
end
if int%2 == 1 then
return true
end
return false
end
function ProtoTile:swapImages()
self.img,self.eimg = self.eimg,self.img
self.mesh.texture = self.img
end
function ProtoTile:createImage()
local r = self.radius
local ver = self.points
local n = self.npoints
local corners = self.corners
local edge = self.edgeColour
local c = self.colours
pushStyle()
setContext(self.img)
pushMatrix()
background(0, 0, 0, 0)
translate(r,r)
strokeWidth(3)
stroke(edge)
for i=1,n do
line(ver[i],ver[i%n+1])
end
for k,v in ipairs(ver) do
pushStyle()
if corners[k] then
corners[k](v,c)
end
popStyle()
end
popMatrix()
setContext()
popStyle()
end
-- Saved Tile Sets
savedTiles = {}
savedTiles["Spiral"] = function (t,tt)
t:addTile(Tile({
position = vec2(323.699434,619.214694),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(360.967233,543.701884),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(544.300566,453.221475),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(163.398867,512.000000),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(441.868933,602.480409),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(263.398867,472.814317),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(292.797734,650.916578),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(363.398867,472.814317),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(282.497168,414.035791),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(286.431634,543.701884),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(444.300566,531.592842),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(386.431634,441.112433),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(305.529934,382.333907),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(255.529934,638.807536),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(391.868933,638.807536),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(423.699434,429.003391),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(355.529934,346.006781),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(323.699434,555.810926),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(249.163834,594.996609),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(392.797734,333.897739),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(460.967233,441.112433),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(384.000000,512.000000),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(398.235033,594.996609),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(454.601133,333.897739),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(484.000000,472.814317),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(205.529934,602.480409),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(491.868933,346.006781),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(484.000000,512.000000),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(303.098301,453.221475),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(354.601133,650.916578),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(541.868933,382.333907),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(349.163834,389.817707),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(182.497168,570.778525),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(263.398867,512.000000),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(564.901699,414.035791),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(423.699434,365.599623),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(464.901699,570.778525),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(584.000000,472.814317),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(203.098301,531.592842),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(498.235033,389.817707),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
end
savedTiles["Spiral II"] = function (t,tt)
t:addTile(Tile({
position = vec2(261.896034,746.022230),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(355.529934,346.006781),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(224.628235,733.913188),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(323.699434,555.810926),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(174.628235,697.586061),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(249.163834,594.996609),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(392.797734,333.897739),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(124.628235,661.258934),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(460.967233,441.112433),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(384.000000,512.000000),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(101.595468,629.557050),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(398.235033,594.996609),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(454.601133,333.897739),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(163.398867,472.814317),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(484.000000,472.814317),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(205.529934,602.480409),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(82.497168,570.778525),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(491.868933,346.006781),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(63.398867,512.000000),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(484.000000,512.000000),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(479.136732,653.775135),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(303.098301,453.221475),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(429.136732,690.102262),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(354.601133,650.916578),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(354.601133,714.320346),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(541.868933,382.333907),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(292.797734,714.320346),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(349.163834,389.817707),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(218.262134,690.102262),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(182.497168,570.778525),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(263.398867,512.000000),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(168.262134,653.775135),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(564.901699,414.035791),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(122.196601,590.371367),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(423.699434,365.599623),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(103.098301,531.592842),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(464.901699,570.778525),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(203.098301,453.221474),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(584.000000,472.814317),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(222.196601,394.442949),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(203.098301,531.592842),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(182.497167,414.035791),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(498.235033,389.817707),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(201.595468,355.257266),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(584.000000,512.000000),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(224.628235,323.555382),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(323.699434,619.214694),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(268.262135,331.039182),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(544.300566,531.592842),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(318.262134,294.712055),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(360.967233,543.701884),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(529.136733,294.712055),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(544.300566,453.221475),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(564.901699,570.778526),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(163.398867,512.000000),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(579.136733,331.039181),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(441.868933,602.480409),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(392.797734,270.493971),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(525.202266,590.371367),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(454.601133,270.493971),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(263.398867,472.814317),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(292.797734,650.916578),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(625.202265,394.442949),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(545.803399,629.557051),
angle = 0.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(644.300566,453.221475),
angle = 144.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(363.398867,472.814317),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(664.901699,414.035792),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(522.770632,661.258935),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(274.628235,287.228255),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(282.497168,414.035791),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(324.628235,250.901129),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(286.431634,543.701884),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(361.896034,238.792087),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(472.770632,697.586061),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(423.699433,238.792087),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(444.300566,531.592842),
angle = 180.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(485.502833,238.792087),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(386.431634,441.112433),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(522.770632,250.901129),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(422.770632,733.913188),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(572.770632,287.228255),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(305.529934,382.333907),
angle = 216.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(622.770632,323.555382),
angle = 288.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(255.529934,638.807536),
angle = 108.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(645.803399,355.257266),
angle = 324.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(323.699434,746.022230),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(391.868933,638.807536),
angle = 36.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(684.000000,472.814317),
angle = 684.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(385.502833,746.022230),
angle = 72.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
t:addTile(Tile({
position = vec2(423.699434,429.003391),
angle = 252.000000,
scale = 1.000000,
ptile = tt["isoTriangle"]
}))
end
savedTiles["Anton s masterpiece"] = function (t,tt)
t:addTile(Tile({
position = vec2(599.224455,608.229620),
angle = 108.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(536.724455,628.537101),
angle = 36.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(695.577004,513.123968),
angle = 72.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(402.871906,608.229620),
angle = 72.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(423.097331,545.982163),
angle = 396.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(642.626155,474.652924),
angle = 468.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(398.097331,296.992334),
angle = 144.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(471.273606,196.273833),
angle = 1008.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(398.097331,220.050246),
angle = 216.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(471.273606,320.768747),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(516.499030,258.521290),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(715.802429,373.934423),
angle = 324.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(642.626155,350.158010),
angle = 252.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(603.999030,296.992334),
angle = 396.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(603.999030,220.050246),
angle = 324.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(561.365384,793.508394),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(561.365384,793.508394),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(561.365384,793.508394),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(304.695632,317.299815),
angle = 180.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(536.724455,320.768747),
angle = 396.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(418.322756,359.239792),
angle = 108.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(284.470207,379.547273),
angle = 144.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(345.146481,258.521290),
angle = 180.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(284.470207,445.263662),
angle = 216.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(695.577004,311.686966),
angle = 288.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(578.999030,545.982163),
angle = 144.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(656.949880,258.521290),
angle = 0.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(536.724455,196.273833),
angle = 324.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(371.631815,818.115478),
angle = 0.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(371.631815,818.115478),
angle = 0.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(371.631815,818.115478),
angle = 0.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(516.499030,566.289644),
angle = 360.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(652.175305,569.758576),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(715.802429,450.876511),
angle = 36.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(471.273606,628.537101),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(349.921056,569.758576),
angle = 828.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(514.675305,454.345443),
angle = 72.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(597.400730,412.405467),
angle = 180.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(423.097331,469.040074),
angle = 324.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(349.921056,379.547273),
angle = 108.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(349.921056,445.263662),
angle = 252.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(304.695632,507.511119),
angle = 540.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(561.365384,793.508394),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(561.365384,793.508394),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(561.365384,793.508394),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(561.365384,793.508394),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(461.724455,415.874399),
angle = 108.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(577.175305,474.652924),
angle = 144.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(476.048181,507.511119),
angle = 0.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(534.900730,392.097986),
angle = 396.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
end
savedTiles[""] = function (t,tt)
t:addTile(Tile({
position = vec2(603.999030,220.050246),
angle = 324.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(651.375507,891.936730),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(651.375507,891.936730),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(651.375507,891.936730),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(304.695632,317.299815),
angle = 180.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(536.724455,320.768747),
angle = 396.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(418.322756,359.239792),
angle = 108.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(284.470207,379.547273),
angle = 144.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(345.146481,258.521290),
angle = 180.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(284.470207,445.263662),
angle = 216.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(695.577004,311.686966),
angle = 288.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(578.999030,545.982163),
angle = 144.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(656.949880,258.521290),
angle = 0.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(536.724455,196.273833),
angle = 324.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(637.851580,661.395296),
angle = 180.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(599.224455,714.560971),
angle = 252.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(536.724455,694.253490),
angle = 324.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(516.499030,566.289644),
angle = 360.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(652.175305,569.758576),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(715.802429,450.876511),
angle = 36.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(471.273606,628.537101),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(349.921056,569.758576),
angle = 828.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(514.675305,454.345443),
angle = 72.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(597.400730,412.405467),
angle = 180.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(423.097331,469.040074),
angle = 324.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(349.921056,379.547273),
angle = 108.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(349.921056,445.263662),
angle = 252.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(304.695632,507.511119),
angle = 540.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(651.375507,891.936730),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(651.375507,891.936730),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(651.375507,891.936730),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(651.375507,891.936730),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(461.724455,415.874399),
angle = 108.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(577.175305,474.652924),
angle = 144.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(476.048181,507.511119),
angle = 0.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(534.900730,392.097986),
angle = 396.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(599.224455,608.229620),
angle = 108.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(536.724455,628.537101),
angle = 36.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(695.577004,513.123968),
angle = 72.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(402.871906,608.229620),
angle = 72.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(423.097331,545.982163),
angle = 396.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(642.626155,474.652924),
angle = 468.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(398.097331,296.992334),
angle = 144.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(471.273606,196.273833),
angle = 1008.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(398.097331,220.050246),
angle = 216.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(471.273606,320.768747),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(516.499030,258.521290),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(715.802429,373.934423),
angle = 324.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(642.626155,350.158010),
angle = 252.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(603.999030,296.992334),
angle = 396.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
end
savedTiles[""] = function (t,tt)
t:addTile(Tile({
position = vec2(402.871907,-91.187040),
angle = 288.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(-8.234891,540.369314),
angle = 216.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(52.441383,661.395296),
angle = 180.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(125.617657,762.113797),
angle = 108.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(988.282102,608.229620),
angle = 72.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(1010.331253,350.158010),
angle = 324.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(988.282102,216.581314),
angle = 288.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(818.753279,412.405467),
angle = 180.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(402.871906,714.560971),
angle = 288.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(244.019357,599.147839),
angle = 324.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(599.224456,110.249963),
angle = 108.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(244.019357,225.663096),
angle = 36.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(603.999030,220.050246),
angle = 324.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(896.704129,124.944594),
angle = 324.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(652.175305,753.032015),
angle = 288.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(578.999030,776.808428),
angle = 216.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(304.695632,317.299815),
angle = 180.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(423.097331,-28.939582),
angle = 324.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(359.470207,166.884570),
angle = 432.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(471.273606,130.557444),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(516.499031,68.309987),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(286.293933,143.108157),
angle = 144.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(823.527854,599.147838),
angle = 252.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(690.802429,622.924252),
angle = 216.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(471.273606,694.253490),
angle = 288.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(349.921057,753.032015),
angle = 252.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(536.724455,320.768747),
angle = 396.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(418.322756,359.239792),
angle = 108.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(284.470207,379.547273),
angle = 144.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(345.146481,258.521290),
angle = 180.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(284.470207,445.263662),
angle = 216.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(695.577004,311.686966),
angle = 288.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(578.999030,545.982163),
angle = 144.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(656.949880,258.521290),
angle = 0.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(536.724455,196.273833),
angle = 324.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(637.851580,661.395296),
angle = 180.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(599.224455,714.560971),
angle = 252.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(536.724455,694.253490),
angle = 324.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(516.499030,566.289644),
angle = 360.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(652.175305,569.758576),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(223.793932,661.395296),
angle = 360.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(105.392232,699.866340),
angle = 144.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(105.392232,622.924252),
angle = 216.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(178.568507,599.147839),
angle = 288.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(652.175305,71.778919),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(697.400730,9.531462),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(578.999031,-28.939583),
angle = 216.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(578.999031,48.002506),
angle = 144.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(652.175305,-52.715995),
angle = 288.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(178.568508,225.663096),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(223.793933,163.415638),
angle = 360.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(105.392233,201.886683),
angle = 144.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(105.392233,124.944594),
angle = 216.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(178.568508,101.168181),
angle = 288.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(715.802429,450.876511),
angle = 36.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(471.273606,628.537101),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(217.195632,-28.939582),
angle = 216.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(11.990534,222.194164),
angle = 180.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(1183.568292,320.346494),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(11.990533,602.616771),
angle = 1260.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(1234.129637,348.237566),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(169.019357,818.748404),
angle = 108.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(471.273606,936.305455),
angle = 72.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(564.744505,1171.921358),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(564.744505,1171.921358),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(218.492660,1261.310218),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(218.492660,1261.310218),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(218.492660,1261.310218),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(218.492660,1261.310218),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(218.492660,1261.310218),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(349.921056,569.758576),
angle = 828.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(514.675305,454.345443),
angle = 72.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(597.400730,412.405467),
angle = 180.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(423.097331,469.040074),
angle = 324.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(349.921056,379.547273),
angle = 108.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(349.921056,445.263662),
angle = 252.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(304.695632,507.511119),
angle = 540.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(823.527854,225.663095),
angle = 108.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(778.302429,163.415638),
angle = 180.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(896.704129,201.886683),
angle = 36.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(823.527854,101.168181),
angle = 252.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(461.724455,415.874399),
angle = 108.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(577.175305,474.652924),
angle = 144.000000,
scale = 1.000000,
ptile = tt["dart"]
}))
t:addTile(Tile({
position = vec2(697.400730,815.279473),
angle = 0.000000,
scale = 1.000000,
ptile = tt["kite"]
}))
t:addTile(Tile({
position = vec2(652.175305,877.526930),
angle