summaryrefslogtreecommitdiff
path: root/mplife.cld
diff options
context:
space:
mode:
Diffstat (limited to 'mplife.cld')
-rw-r--r--mplife.cld140
1 files changed, 119 insertions, 21 deletions
diff --git a/mplife.cld b/mplife.cld
index 11392e8..b83ef17 100644
--- a/mplife.cld
+++ b/mplife.cld
@@ -19,6 +19,55 @@ require "run"
local mplife = {}
+gol.setup = gol.setup or {}
+gol.setup.current = gol.setup.current or {}
+
+do
+ local c = gol.setup.current
+
+ c.file = c.file or "examples/glider_gen-p55.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.firstframe = 1
+ c.frames = 5
+ c.preamble = [[
+\setupcolors[state=start]
+\setupbackgrounds[state=start]
+\setuppapersize[S6][S6]
+]]
+ --c.before_frame = [[
+--\defineoverlay
+ --[back]
+ --[\bgroup
+--]]
+ --c.after_frame = [[
+--\egroup]
+
+--\setupbackgrounds [paper] [background=back]
+--\page
+--]]
+ c.before_frame = [[
+\startuseMPgraphic{back}
+pickup pensquare scaled ]] .. c.pensize .. [[pt;
+
+]]
+ c.after_frame = [[
+currentpicture := currentpicture xysized (PaperHeight*.6,PaperWidth*.6) ;
+\stopuseMPgraphic
+\defineoverlay[back][\useMPgraphic{back}]
+
+\setupbackgrounds [page] [background=back]
+]]
+
+ gol.setup.current = c
+end
+
+
+
mplife.fade = true
mplife.format = {
@@ -27,10 +76,10 @@ mplife.format = {
opar = "(", cpar = ")",
- hypen = "-", comma = ",",
+ hyphen = "-", comma = ",",
scolon = ";", path = "--",
- filldraw = "fill",
+ filldraw = "fill", -- "draw",
draw = "draw",
cycle = "cycle",
@@ -40,9 +89,9 @@ mplife.format = {
}
function mplife.runcode (mpcode)
- context.startMPcode()
+ --context.startMPcode()
context(mpcode)
- context.stopMPcode()
+ --context.stopMPcode()
--context.MPdrawing(mpcode) -- comes with next beta!
end
@@ -60,7 +109,7 @@ function mplife.p_square (from, filled, fade_level)
-- from - d.y from + d.x && - d.y
-- p4 p3
- local d = { x = 1, y = 1, unit = "cm" }
+ local d = { x = 1, y = 1, unit = "" }
local points = {
[1] = { x = from.x, y = from.y },
[2] = { x = from.x+d.x, y = from.y },
@@ -86,7 +135,14 @@ function mplife.p_square (from, filled, fade_level)
if filled and fade_level then
--tmp = tmp .. f.space .. "withcolor" .. f.space .. 1/fade_level .. "black"
- tmp = tmp .. f.space .. "withcolor" .. f.space .. .1*fade_level .. "white"
+ if fade_level == 0 then
+ fade_level = 1
+ elseif fade_level == 1 then
+ fade_level = 0
+ else
+ fade_level = .05 * fade_level + .5
+ end
+ tmp = tmp .. f.space .. "withcolor" .. f.space .. fade_level .. "white"
end
tmp = tmp .. f.scolon
@@ -99,7 +155,7 @@ end
function mplife.draw_grid(grid)
print (grid)
local h = gol.helpers
- local pat = ""
+ local pat = "" --"StartPage; "
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
@@ -113,16 +169,20 @@ function mplife.draw_grid(grid)
local pos = 1
repeat
local cell = row:sub(pos, pos)
- local p = { x = pos, y = 1 - n, unit = "cm" }
+ local p = { x = pos, y = 1 - n, unit = "" }
local fill, fade_level
- if cell ~= "0" then fill = true end
+ --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));"
@@ -146,7 +206,7 @@ function mplife.checker(n)
for x=1, n, 1 do
local fill
if cnt % 2 == 0 then fill = true end
- local p = { x = x, y = y, unit = "cm" }
+ local p = { x = x, y = y, unit = "" }
squares = squares .. mplife.p_square( p, fill )
cnt = cnt + 1
end
@@ -169,24 +229,62 @@ end
--print(mplife.rand_pattern(10,1))
-
+--- interfacing with life.lua
-function mplife.main ()
- mpgraphic = [[
-fill fullcircle scaled 200pt withcolor .625yellow;
-]]
+function mplife.life_frame (frame)
+ --local c = gol.setup.current
- context.setupcolors({state = "start"})
- context.starttext()
+ mplife.draw_grid(frame)
+
+ return true
+end
- --apoint = { x = 3, y = 4, unit = "cm" }
- --bpoint = { x = 7, y = 5, unit = "cm" }
- --mplife.runcode (mplife.p_square( apoint, true) .. mplife.p_square( bpoint, false))
+function mplife.life_movie (frames, next_page)
+ local c = gol.setup.current
+ for i, frame in ipairs(frames) do
+ context(c.before_frame)
+ mplife.life_frame(frame)
+ context(c.after_frame)
+ end
+end
+
+function mplife.life_frames ()
+ local c = gol.setup.current
+
+
+ local frames = gol.frames( c.init, c.rule, c.frames, c.firstframe )
+ mplife.life_movie( frames, false )
+ return true
+end
+
+function mplife.successive ()
+ local c = gol.setup.current
+ context(c.before_frame)
+ mplife.draw_grid(c.last)
+ context(c.after_frame)
+ gol.setup.current.last = gol.next_frame( c.last, c.rule )
+ return true
+end
+
+
+
+
+function mplife.main ()
+ local c = gol.setup.current
+ context(c.preamble) -- only once
+ context.starttext()
--mplife.runcode (mplife.checker(20))
- mplife.draw_grid(mplife.rand_pattern(10,6))
+ --mplife.draw_grid(mplife.rand_pattern(10,6))
+ --mplife.life_frames()
+
+ for i=1,55,1 do
+ mplife.successive()
+ context(Test)
+ context.page()
+ end
context.stoptext()
return 0
end