# HG changeset patch # User sheepluva # Date 1417559608 -3600 # Node ID 58cad46782ffaf88d12134275dbff108573184a5 # Parent 15f2908113a124eb681dd2f17eb5c9cf7ab3cf19 move functionality of Draw.lua into engine diff -r 15f2908113a1 -r 58cad46782ff hedgewars/uScript.pas --- a/hedgewars/uScript.pas Tue Dec 02 22:11:22 2014 +0100 +++ b/hedgewars/uScript.pas Tue Dec 02 23:33:28 2014 +0100 @@ -100,6 +100,7 @@ ScriptAmmoReinforcement : shortstring; ScriptLoaded : boolean; mapDims : boolean; + PointsBuffer: shortString; procedure ScriptPrepareAmmoStore; forward; procedure ScriptApplyAmmoStore; forward; @@ -190,6 +191,19 @@ CheckAndFetchParamCount:= true; end; +// check if is in range of count1 and count2 +function CheckAndFetchParamCountRange(L : Plua_State; count1, count2: LongInt; call, paramsyntax: shortstring; out actual: LongInt): boolean; inline; +begin + actual:= lua_gettop(L); + if (actual < count1) or (actual > count2) then + begin + LuaParameterCountError('at least ' + inttostr(count1) + ', but at most ' + inttostr(count2), call, paramsyntax, actual); + exit(false); + end; + + CheckAndFetchParamCountRange:= true; +end; + // check if is same or higher as minCount function CheckAndFetchLuaParamMinCount(L : Plua_State; minCount: LongInt; call, paramsyntax: shortstring; out actual: LongInt): boolean; inline; begin @@ -2252,6 +2266,60 @@ lc_declareachievement:= 0 end; + +procedure ScriptFlushPoints(); +begin + ParseCommand('draw ' + PointsBuffer, true, true); + PointsBuffer:= ''; +end; + + +function lc_addPoint(L : Plua_State) : LongInt; Cdecl; +var np, param: integer; +begin + if CheckAndFetchParamCountRange(L, 2, 4, 'AddPoint', 'x, y, width [, erase]', np) then + begin + // x + param:= lua_tointeger(L,1); + PointsBuffer:= PointsBuffer + char((param and $FF00) shr 8); + PointsBuffer:= PointsBuffer + char((param and $FF)); + // y + param:= lua_tointeger(L,2); + PointsBuffer:= PointsBuffer + char((param and $FF00) shr 8); + PointsBuffer:= PointsBuffer + char((param and $FF)); + // width + if np > 2 then + param:= lua_tointeger(L,3) + else + param:= 0; + + if param <> 0 then + begin + param:= (param or $80); + // erase + if (np > 3) and lua_toboolean(L, 4) then + param:= (param or $40); + PointsBuffer:= PointsBuffer + char(param); + end + // width is 0 + else + PointsBuffer:= PointsBuffer + char(0); + + // flush before shortstring limit length is reached + if length(PointsBuffer) > 245 then + ScriptFlushPoints(); + end; + lc_addPoint:= 0 +end; + + +function lc_flushPoints(L : Plua_State) : LongInt; Cdecl; +begin + if CheckLuaParamCount(L, 0, 'FlushPoints', '') then + ScriptFlushPoints(); + lc_flushPoints:= 0 +end; + // stuff for testing the lua API function lc_endluatest(L : Plua_State) : LongInt; Cdecl; begin @@ -2947,6 +3015,9 @@ lua_register(luaState, _P'SetWaterLine', @lc_setwaterline); lua_register(luaState, _P'SetNextWeapon', @lc_setnextweapon); lua_register(luaState, _P'SetWeapon', @lc_setweapon); +// drawn map functions +lua_register(luaState, _P'AddPoint', @lc_addPoint); +lua_register(luaState, _P'FlushPoints', @lc_flushPoints); lua_register(luaState, _P'SetGearAIHints', @lc_setaihintsongear); lua_register(luaState, _P'HedgewarsScriptLoad', @lc_hedgewarsscriptload); @@ -3051,6 +3122,7 @@ procedure initModule; begin mapDims:= false; +PointsBuffer:= ''; end; procedure freeModule; diff -r 15f2908113a1 -r 58cad46782ff share/hedgewars/Data/Scripts/Draw.lua --- a/share/hedgewars/Data/Scripts/Draw.lua Tue Dec 02 22:11:22 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -local PointsBuffer = '' -- A string to accumulate points in - -function AddPoint(x, y, width, erase) - PointsBuffer = PointsBuffer .. string.char(band(x,0xff00) / 256 , band(x,0xff) , band(y,0xff00) / 256 , band(y,0xff)) - if width then - width = bor(width,0x80) - if erase then - width = bor(width,0x40) - end - PointsBuffer = PointsBuffer .. string.char(width) - 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 diff -r 15f2908113a1 -r 58cad46782ff share/hedgewars/Data/Scripts/Multiplayer/DiagonalMaze.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/DiagonalMaze.lua Tue Dec 02 22:11:22 2014 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/DiagonalMaze.lua Tue Dec 02 23:33:28 2014 +0100 @@ -1,4 +1,3 @@ -HedgewarsScriptLoad("/Scripts/Draw.lua") function onPreviewInit() onGameInit() diff -r 15f2908113a1 -r 58cad46782ff share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua Tue Dec 02 22:11:22 2014 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua Tue Dec 02 23:33:28 2014 +0100 @@ -1,7 +1,5 @@ ObjectList = {} -HedgewarsScriptLoad("/Scripts/Draw.lua") - -- Overall padding for roping freedom Padding = 430 diff -r 15f2908113a1 -r 58cad46782ff share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua Tue Dec 02 22:11:22 2014 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua Tue Dec 02 23:33:28 2014 +0100 @@ -1103,32 +1103,6 @@ mapID = params["m"] end -PointsBuffer = '' -- A string to accumulate points in - -function AddPoint(x, y, width, erase) - PointsBuffer = PointsBuffer .. string.char(band(x,0xff00) / 256 , band(x,0xff) , band(y,0xff00) / 256 , band(y,0xff)) - if width then - width = bor(width,0x80) - if erase then - width = bor(width,0x40) - end - PointsBuffer = PointsBuffer .. string.char(width) - 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 - function onPreviewInit() onGameInit() end diff -r 15f2908113a1 -r 58cad46782ff share/hedgewars/Data/Scripts/Multiplayer/Tunnels.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Tunnels.lua Tue Dec 02 22:11:22 2014 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Tunnels.lua Tue Dec 02 23:33:28 2014 +0100 @@ -1,4 +1,3 @@ -HedgewarsScriptLoad("/Scripts/Draw.lua") function onPreviewInit() onGameInit() diff -r 15f2908113a1 -r 58cad46782ff tests/lua/drillrockets_boom.lua --- a/tests/lua/drillrockets_boom.lua Tue Dec 02 22:11:22 2014 +0100 +++ b/tests/lua/drillrockets_boom.lua Tue Dec 02 23:33:28 2014 +0100 @@ -1,5 +1,3 @@ - -HedgewarsScriptLoad("/Scripts/Draw.lua") local ta_pointsize = 63 local ta_radius = (ta_pointsize * 10 + 6) / 2 diff -r 15f2908113a1 -r 58cad46782ff tests/lua/drillrockets_drill.lua --- a/tests/lua/drillrockets_drill.lua Tue Dec 02 22:11:22 2014 +0100 +++ b/tests/lua/drillrockets_drill.lua Tue Dec 02 23:33:28 2014 +0100 @@ -1,5 +1,3 @@ - -HedgewarsScriptLoad("/Scripts/Draw.lua") local ta_pointsize = 63 local ta_radius = (ta_pointsize * 10 + 6) / 2 diff -r 15f2908113a1 -r 58cad46782ff tests/lua/hellfire_burns.lua --- a/tests/lua/hellfire_burns.lua Tue Dec 02 22:11:22 2014 +0100 +++ b/tests/lua/hellfire_burns.lua Tue Dec 02 23:33:28 2014 +0100 @@ -1,5 +1,3 @@ - -HedgewarsScriptLoad("/Scripts/Draw.lua") local ta_pointsize = 63 local ta_radius = (ta_pointsize * 10 + 6) / 2 diff -r 15f2908113a1 -r 58cad46782ff tests/lua/twothousandmines.lua --- a/tests/lua/twothousandmines.lua Tue Dec 02 22:11:22 2014 +0100 +++ b/tests/lua/twothousandmines.lua Tue Dec 02 23:33:28 2014 +0100 @@ -1,5 +1,3 @@ - -HedgewarsScriptLoad("/Scripts/Draw.lua") local ta_pointsize = 63 local ta_radius = (ta_pointsize * 10 + 6) / 2