/**
	Grass 
	Is placed just behind the landscape.
	
	@authors
*/

protected func Initialize()
{
	DoCon(Random(50));
	if (Random(2))
		SetGraphics("1");
	return;
}

public func Incineration()
{
	Destroy();
	return;
}

public func CanBeHitByShockwaves() { return true; }

public func OnShockwaveHit()
{	
	Destroy();
	return true;
}

private func Destroy()
{
	CreateParticle("Grass", 0, 0, PV_Random(-20, 20), PV_Random(-20, 10), PV_Random(30, 100), Particles_Straw(), 30);
	RemoveObject();
}

// Place some grass at the surface in the given area. The amount determines the density.
public func Place(int amount, proplist area)
{
	// Definition call.
	if (this != Grass)
		return;
	var rectangle = Shape->LandscapeRectangle();
	if (area) 
		rectangle = area->GetBoundingRectangle(); 
		
	var grass_list = [];
	for (var x = rectangle.x; x <= rectangle.x + rectangle.wdt; x += 9)
	{
		for (var y = rectangle.y; y <= rectangle.y + rectangle.hgt; y += 3)
		{
			if (GetMaterial(AbsX(x), AbsY(y)) == Material("Sky") && GetMaterial(AbsX(x), AbsY(y + 3)) == Material("Earth"))
			{
				if (Random(100) < amount)
				{
					var grass =	CreateObjectAbove(Grass, AbsX(x), AbsY(y + 1));
					PushBack(grass_list, grass);
				}
			}
		}
	}
	return grass_list;
}

// OUTDATED: use Grass->Place() instead, this function will be removed at some point.
global func PlaceGrass(int amount, int start, int end, int height, int bottom)
{
	if (!start)
		start = 0;
	if (!end)
		end = LandscapeWidth();
	if(!height)
		height = 0;
	if(!bottom)
		bottom = LandscapeHeight();
		
	var x = start, y; 
	while (x < end)
	{
		y = height;
		while (y < bottom)
		{
			if (GetMaterial(AbsX(x), AbsY(y)) == Material("Sky"))
				if (GetMaterial(AbsX(x), AbsY(y + 3)) == Material("Earth"))
					if (Random(100) < amount)
						CreateObjectAbove(Grass, AbsX(x), AbsY(y + 1), NO_OWNER);
			y += 3;
		}
		x += 9;
	}
}

public func SaveScenarioObject(props)
{
	if (!inherited(props, ...)) return false;
	props->Remove("Con");
	return true;
}


/*-- Properties --*/

local Name = "$Name$";
local Plane = -1;
local Placement = 0;
local BlastIncinerate = 1;
