tests/lua/twothousandmines.lua
author sheepluva
Wed, 26 Nov 2014 14:20:53 +0100
changeset 10552 15d1e24a8c72
parent 10550 tests/lua/todo/twothousandmines.lua@825991c25319
child 10609 15f2908113a1
permissions -rw-r--r--
move fixed test case out of 'todo'

-- spawns 2000 mines in a bit to see if engine can deal with it

 -- taken from http://code.google.com/p/hedgewars/wiki/LuaDrawing
 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


local ta_pointsize = 63
local ta_radius = (ta_pointsize * 10 + 6) / 2

local sqrttwo = math.sqrt(2)

-- creates round test area
function AddTestArea(testarea)
	step = 100
	xstep = step * testarea["xdir"]
	ystep = step * testarea["ydir"]
	x = testarea["x"]
	y = testarea["y"]
	if xstep * ystep ~= 0 then
		xstep = math.floor(xstep / sqrttwo)
		ystep = math.floor(ystep / sqrttwo)
	end
	AddPoint(x, y, ta_pointsize);
	AddPoint(x + xstep, y + ystep, ta_pointsize, true);
end

-- vertical test area
local taa_v2 = {x= 350, y=1500, xdir= 0, ydir=-1}

-- fail counter
local nfailed = 0
local nspawned = 0
local ndied = 0

function onGameInit()
	-- At first we have to overwrite/set some global variables
	-- that define the map, the game has to load, as well as
	-- other things such as the game rules to use, etc.
	-- Things we don't modify here will use their default values.

	-- The base number for the random number generator
	Seed = 1
	-- The map to be played
	MapGen = mgDrawn
	-- The theme to be used
	Theme = "Bamboo"
	-- Game settings and rules
	EnableGameFlags(gfOneClanMode, gfDisableWind, gfDisableLandObjects, gfDisableGirders, gfSolidLand)
	CaseFreq = 0
	MinesNum = 0
	Explosives = 0

	-- No damage please
	DamagePercent = 1

	-- Draw Map
	AddPoint(10,30,0) -- hog spawn platform
	-- test areas
	AddTestArea(taa_v2)

	FlushPoints()

	-- Create the player team
	AddTeam("'Zooka Team", 14483456, "Simple", "Island", "Default")
	-- And add a hog to it
	player = AddHog("Hunter", 0, 1, "NoHat")
	-- place it on how spawn platform
	SetGearPosition(player, 10, 10)
end

local pass = 0
local nMines = 0
local maxMines = 2000

function onGameStart()
    local maxPass = maxMines / 25
    for pass = 1, maxPass, 1 do
        pass = pass + 1
        -- spawn 25 mines
        for i = 0, 480, 20 do
            AddGear(110 + i, 1000 - i - (pass * 30), gtMine, 0, 0, 0, 0)
            nMines = nMines + 1
        end
    end
end

function onNewTurn()
	WriteLnToConsole('Engine succeessfully dealt with ' .. nMines .. ' mines!')
    EndLuaTest(TEST_SUCCESSFUL)
end