summaryrefslogtreecommitdiff
path: root/mplife.cld
diff options
context:
space:
mode:
Diffstat (limited to 'mplife.cld')
-rw-r--r--mplife.cld81
1 files changed, 53 insertions, 28 deletions
diff --git a/mplife.cld b/mplife.cld
index 0de02d0..eac9bbb 100644
--- a/mplife.cld
+++ b/mplife.cld
@@ -25,19 +25,24 @@ gol.setup.current = gol.setup.current or {}
do
local c = gol.setup.current
- c.file = c.file or "examples/puffertrain.gol"
+ --c.file = c.file or "examples/10x10_glider.gol"
+ c.file = c.file or "examples/gliders.gol"
+ --c.file = c.file or "examples/ggun.gol"
c.rule = gol.parse_rule("B3/S23") -- default Conway
c.init = gol.parse_file(c.file)
c.last = c.init -- for successive mode
- c.pensize = .03
- c.fade = true
+ c.pensize = .1
+ c.color = { r = .6, g = .6, b = .8 }
+ c.fade = false
c.firstframe = 1
c.frames = 5
c.preamble = [[
\setupcolors[state=start]
\setupbackgrounds[state=start]
\setuppapersize[S6][S6]
+
+\setuppagenumbering[state=stop,location=]
]]
--c.before_frame = [[
--\defineoverlay
@@ -52,17 +57,16 @@ do
--]]
c.before_frame = [[
\startuseMPgraphic{back}
-pickup pensquare scaled ]] .. c.pensize .. [[pt;
-
+pickup pencircle xyscaled (.25*]] .. c.pensize .. [[pt, ]] .. c.pensize .. [[pt) rotated 45;
]]
c.after_frame = [[
-currentpicture := currentpicture xysized (PaperHeight*.6,PaperWidth*.6) ;
+currentpicture := currentpicture xysized (\the\paperwidth, \the\paperheight);
\stopuseMPgraphic
\defineoverlay[back][\useMPgraphic{back}]
\setupbackgrounds [page] [background=back]
]]
-
+
gol.setup.current = c
end
@@ -142,7 +146,7 @@ function mplife.p_square (from, filled, fade_level)
else
fade_level = .05 * fade_level + .5
end
- tmp = tmp .. f.space .. "withcolor" .. f.space .. fade_level .. "white"
+ tmp = tmp .. f.space .. "scaled 200 " .. "withcolor" .. f.space .. fade_level .. "white"
end
tmp = tmp .. f.scolon
@@ -153,46 +157,65 @@ function mplife.p_square (from, filled, fade_level)
end
function mplife.draw_grid(grid)
- print (grid)
local h = gol.helpers
- local pat = "" --"StartPage; "
+ local pat = ""
if type(grid) == "string" then
grid = h.split(grid, "\n") -- may leave an empty string as last item
if grid[#grid] == "" then grid[#grid] = nil end
end
- local n = 1
- --for n, row in ipairs(grid) do
- while grid[n] ~= nil do
- local row = grid[n]
+ local max = {}
+ max.x, max.y = grid[1]:len(), #grid
+
+ local n = 0
+ local pos -- kept in broader scope for picture border estimation
+ while grid[#grid-n] ~= nil do
+
+ local row = grid[#grid-n]
+ pos = 1
- local pos = 1
repeat
+ local opacity
local cell = row:sub(pos, pos)
- local p = { x = pos, y = 1 - n, unit = "" }
+ local p = { x = pos-1, y = n, unit = "" }
local fill, fade_level
- --if cell ~= "0" then fill = true end
fill = true
if fill and mplife.fade then
fade_level = tonumber(cell)
end
-
-
- --if fade_level ~= 0 then -- dont draw dead cells (workaround for rounded pens)
- --pat = pat .. mplife.p_square( p, fill, fade_level )
- --end
- pat = pat .. mplife.p_square( p, fill, fade_level )
- --.. "\nlabel.bot(btex $" .. pos .. "$ etex, (" ..
- --pos .. "cm," .. 1 - n .. "cm));"
+
+ if not fade_level then -- no number --> cell once dead (marked "D")
+ fade_level = 9.3
+ end
+
+ if fade_level ~= 0 then -- don't draw dead cells
+ if fade_level == 1 then
+ opacity = .33
+ pat = pat .. string.format("%s unitsquare shifted (%s,%s) withcolor transparent(1,%s,\\MPcolor{lifesquare});\n",
+ "draw", p.x, p.y, opacity*2)
+ else
+ opacity = (1/3) - (fade_level / 30)
+ end
+ pat = pat .. string.format("%s unitsquare scaled .9 shifted (%s+.05,%s+.05) withcolor transparent(1,%s,\\MPcolor{lifesquare});\n",
+ "filldraw", p.x, p.y, opacity)
+ end
pos = pos + 1
- --print ("pos: " .. pos .. "," .. n .. " -->" .. row .. "<-- " .. type(row))
until pos > row:len()
pat = pat .. "\n"
n = n + 1
end
+ pat = pat .. string.format([[
+path border;
+border = (0,0)--(%s,0)--(%s,%s)--(0,%s)--cycle;
+fill border withcolor transparent (1,.75, white) ;
+setbounds currentpicture to boundingbox border ;
+]], max.x, max.x, max.y, max.y)
+
+--fill border withcolor transparent (1,.3,1white) ;
+ --print("Pic\n", pat)
mplife.runcode(pat)
return true
end
@@ -271,6 +294,8 @@ end
function mplife.main ()
local c = gol.setup.current
+
+ context.definecolor({ "lifesquare" }, c.color)
context(c.preamble) -- only once
context.starttext()
@@ -280,9 +305,9 @@ function mplife.main ()
--mplife.life_frames()
- for i=1,55,1 do
+ for i=1,10,1 do
mplife.successive()
- context(Test)
+ --context("\\input knuth")
context.page()
end
context.stoptext()