# HG changeset patch # User kyberneticist@gmail.com # Date 1350680334 0 # Node ID a21261c77793ed361dfe38b277ff8ae69e5a8d7e # Parent d7db074d6efad4323a0ee5aba5fd3f3ddba1560d Created wiki page through web user interface. diff -r d7db074d6efa -r a21261c77793 LuaDrawing.wiki --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LuaDrawing.wiki Fri Oct 19 20:58:54 2012 +0000 @@ -0,0 +1,72 @@ +#summary Drawing maps with Lua. + += Drawing Maps With Lua = + +Starting in 0.9.18 it is possible to reliably use drawn map mode to draw maps with scripts. +A simple example is given below + += Details = + +First, a couple of convenience functions for drawing to the map. + +PointsBuffer = '' -- A string to accumulate points in +function AddPoint(x, y, new, size, erase) + PointsBuffer = PointsBuffer .. string.char(band(x,0xff00) / 256 , band(x,0xff) , band(y,0xff00) / 256 , band(y,0xff)) + if new then + size = bor(size,0x80) + if erase then + size = bor(size,0x40) + end + PointsBuffer = PointsBuffer .. string.char(size) + else + PointsBuffer = PointsBuffer .. string.char(0) + end + if #PointsBuffer > 245 then + ParseCommand('draw '..PointsBuffer) + PointsBuffer = '' + end +end +function FlushPoints() + if #PointsBuffer > 0 then + ParseCommand('draw '..PointsBuffer) + PointsBuffer = '' + end +end + +AddPoint takes an x and y location for the point, 2 booleans: new (start of a line or not), erase (whether the line is erasing from the map) and size (size of the line - a value from 1 to 63) +FlushPoints writes out any values from PointsBuffer that had not already been sent to the engine. It would be called at the end of a drawing session. + +A simple example below. + + +function onGameInit() + MapGen = 2 + TemplateFilter = 0 + + AddPoint(100,100,true,10) + AddPoint(2000,2000) + AddPoint(2000,100,true,10) + AddPoint(100,2000) + AddPoint(1000,1000,true,63,true) + + for i = 63,2,-4 do + AddPoint(2000,1000,true,i) + AddPoint(2000,1000,true,i-2,true) + end + + for i = 1,2000,50 do + AddPoint(i+2000,2000,true,1) + AddPoint(4000,2000-i) + end + + AddPoint(2000,2000,true,1) + AddPoint(4000,2000) + AddPoint(4000,0,true,1) + AddPoint(4000,2000) + + FlushPoints() +end + +The first set of AddPoints draws a large X and erases the centre. +The following loop draws a set of nested points, alternating erasure and fill, which results in a set of concentric circles. +The 2nd loop draws a web of lines and frames it using some final AddPoints. \ No newline at end of file