-- $Id: Sphere.lua 3171 2008-11-06 09:06:29Z det $ ----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------- local SphereParticle = {} SphereParticle.__index = SphereParticle local SphereList ----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------- function SphereParticle.GetInfo() return { name = "Sphere", 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 SphereParticle.Default = { pos = {0,0,0}, -- start pos layer = -24, life = 0, size = 0, sizeGrowth = 0, colormap = { {0, 0, 0, 0} }, texture = 'bitmaps/GPL/Lups/sphere.png', repeatEffect = false, genmipmap = true, -- todo } ----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------- function SphereParticle:BeginDraw() gl.DepthMask(true) gl.Culling(GL.BACK) end function SphereParticle:EndDraw() gl.DepthMask(false) gl.Texture(false) gl.Color(1,1,1,1) gl.Culling(false) end function SphereParticle:Draw() gl.Texture(self.texture) gl.Color(self.color) gl.TexCoord(0, 0) gl.PushMatrix() gl.Translate(self.pos[1],self.pos[2],self.pos[3]) gl.Scale(self.size,self.size,self.size) gl.MatrixMode(GL.TEXTURE) gl.PushMatrix() gl.Translate(-0.5,-0.5,0) gl.Scale(0.5,-0.5,0) gl.TexGen(GL.S, GL.TEXTURE_GEN_MODE, GL.REFLECTION_MAP) gl.TexGen(GL.T, GL.TEXTURE_GEN_MODE, GL.REFLECTION_MAP) gl.TexGen(GL.R, GL.TEXTURE_GEN_MODE, GL.REFLECTION_MAP) gl.CallList(SphereList) gl.PopMatrix() gl.MatrixMode(GL.MODELVIEW) gl.TexGen(GL.S, false) gl.TexGen(GL.T, false) gl.TexGen(GL.R, false) gl.PopMatrix() end ----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------- function SphereParticle:Initialize() SphereList = gl.CreateList(DrawSphere,0,0,0,40,25) end function SphereParticle:Finalize() gl.DeleteList(SphereList) end ----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------- function SphereParticle:CreateParticle() -- needed for repeat mode self.csize = self.size self.clife = self.life self.size = self.csize or self.size self.life_incr = 1/self.life self.life = 0 self.color = self.colormap[1] self.firstGameFrame = Spring.GetGameFrame() self.dieGameFrame = self.firstGameFrame + self.clife end ----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------- function SphereParticle:Update(n) if (self.life<1) then self.life = self.life + n*self.life_incr self.size = self.size + n*self.sizeGrowth self.color = {GetColor(self.colormap,self.life)} end end -- used if repeatEffect=true; function SphereParticle:ReInitialize() self.size = self.csize self.life = 0 self.color = self.colormap[1] self.dieGameFrame = self.dieGameFrame + self.clife end function SphereParticle.Create(Options) local newObject = MergeTable(Options, SphereParticle.Default) setmetatable(newObject,SphereParticle) -- make handle lookup newObject:CreateParticle() return newObject end function SphereParticle:Destroy() gl.DeleteTexture(self.texture) end ----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------- return SphereParticle