-- $Id: gimmick1.lua 3171 2008-11-06 09:06:29Z det $
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------

local SantaHat = {}
SantaHat.__index = SantaHat

-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------

function SantaHat.GetInfo()
	return {
		name      = "SantaHat",
		backup    = "", --// backup class, if this class doesn't work (old cards,ati's,etc.)
		desc      = "",

		layer     = -24, --// extreme simply z-ordering :x

		--// gfx requirement
		fbo       = false,
		shader    = false,
		rtt       = false,
		ctt       = false,
	}
end

SantaHat.Default = {
	pos        = {0,0,0}, -- start pos
	emitVector = {0.25,1,0},
	layer      = -24,

	life       = math.huge,

	height     = 10,
	width      = 4,
	ballSize   = 0.9,

	color      = {1, 0, 0, 1},

	repeatEffect = true,
}

-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------

function SantaHat:BeginDraw()
	gl.DepthMask(true)
	gl.Lighting(true)
	gl.Light(0, true )
	gl.Light(0, GL.POSITION, gl.GetSun() )
	gl.Light(0, GL.AMBIENT, gl.GetSun("ambient","unit") )
	gl.Light(0, GL.DIFFUSE, gl.GetSun("diffuse","unit") )
	gl.Light(0, GL.SPECULAR, gl.GetSun("specular") )
	--gl.Culling(GL.BACK)
end

function SantaHat:EndDraw()
	gl.DepthMask(false)
	gl.Lighting(false)
	gl.Light(0, false )
	--gl.Culling(false)
end

function SantaHat:Draw()
	--gl.Color(self.color)
	local color = self.color
	gl.Material({
		ambient   = {color[1]*0.5,color[2]*0.5,color[3]*0.5,color[4]},
		diffuse   = color,
		specular  = {1,1,1,1},
		shininess = 65,
	})

	gl.PushMatrix()
	local pos  = self.pos
	local emit = self.emitVector
	gl.Translate(pos[1],pos[2],pos[3])
	gl.Rotate(90,emit[1],emit[2],emit[3])

	gl.PushMatrix()
	gl.Scale(self.width,self.height,self.width)
	gl.CallList(self.ConeList)
	gl.PopMatrix()

	gl.Color(1,1,1,1)
	gl.Material({
		ambient   = {0.5,0.5,0.5,1},
		diffuse   = {1,1,1,1},
		specular  = {1,1,1,1},
		shininess = 120,
	})

	gl.PushMatrix()
	gl.Translate(0,self.height,0)
	gl.Scale(self.ballSize,self.ballSize,self.ballSize)
	gl.CallList(self.BallList)
	gl.PopMatrix()

	gl.Scale(self.width+0.3,self.width+0.1,self.width+0.3)
	gl.CallList(self.TorusList)

	gl.PopMatrix()
end

-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------

function SantaHat:Initialize()
	SantaHat.ConeList  = gl.CreateList(DrawPin,1,1,8)
	SantaHat.BallList  = gl.CreateList(DrawSphere,0,0,0,1,14)
	SantaHat.TorusList = gl.CreateList(DrawTorus,1,0.15,16,16)
end

function SantaHat:Finalize()
	gl.DeleteList(SantaHat.ConeList)
	gl.DeleteList(SantaHat.BallList)
	gl.DeleteList(SantaHat.TorusList)
end

-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------

function SantaHat:CreateParticle()
	self.firstGameFrame = Spring.GetGameFrame()
	self.dieGameFrame   = self.firstGameFrame + self.life
end

-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------

function SantaHat:Update()
end

-- used if repeatEffect=true;
function SantaHat:ReInitialize()
	self.dieGameFrame = self.dieGameFrame + self.life
end

function SantaHat.Create(Options)
	local newObject = MergeTable(Options, SantaHat.Default)
	setmetatable(newObject,SantaHat)  -- make handle lookup
	newObject:CreateParticle()
	return newObject
end

function SantaHat:Destroy()
end

-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------

return SantaHat
