diff --git a/src/modules/graphics/opengl/ParticleSystem.cpp b/src/modules/graphics/opengl/ParticleSystem.cpp index 313563882..0d1f02aae 100644 --- a/src/modules/graphics/opengl/ParticleSystem.cpp +++ b/src/modules/graphics/opengl/ParticleSystem.cpp @@ -47,7 +47,8 @@ namespace opengl gravityMax(0), radialAccelerationMin(0), radialAccelerationMax(0), tangentialAccelerationMin(0), tangentialAccelerationMax(0), sizeStart(1), sizeEnd(1), sizeVariation(0), rotationMin(0), rotationMax(0), - spinStart(0), spinEnd(0), spinVariation(0) + spinStart(0), spinEnd(0), spinVariation(0), offsetX(sprite->getWidth()*0.5f), + offsetY(sprite->getHeight()*0.5f) { this->sprite = sprite; sprite->retain(); @@ -307,6 +308,12 @@ namespace opengl memcpy(colorStart, start, 4); memcpy(colorEnd, end, 4); } + + void ParticleSystem::setOffset(float x, float y) + { + offsetX = x; + offsetY = y; + } float ParticleSystem::getX() const { @@ -327,6 +334,16 @@ namespace opengl { return spread * LOVE_M_TODEG; } + + float ParticleSystem::getOffsetX() const + { + return offsetX; + } + + float ParticleSystem::getOffsetY() const + { + return offsetY; + } int ParticleSystem::count() const { @@ -393,7 +410,7 @@ namespace opengl glTranslatef(p->position[0],p->position[1],0.0f); glRotatef(p->rotation * 57.29578f, 0.0f, 0.0f, 1.0f); // rad * (180 / pi) glScalef(p->size,p->size,1.0f); - glTranslatef(sprite->getWidth()*-0.5f,sprite->getHeight()*-0.5f,0.0f); + glTranslatef(-offsetX,-offsetY,0.0f); sprite->draw(0,0, 0, 1, 1, 0, 0); glPopMatrix(); diff --git a/src/modules/graphics/opengl/ParticleSystem.h b/src/modules/graphics/opengl/ParticleSystem.h index 936a38b1a..8882d9181 100644 --- a/src/modules/graphics/opengl/ParticleSystem.h +++ b/src/modules/graphics/opengl/ParticleSystem.h @@ -1,21 +1,21 @@ -/** -* Copyright (c) 2006-2009 LOVE Development Team -* -* This software is provided 'as-is', without any express or implied -* warranty. In no event will the authors be held liable for any damages -* arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute it -* freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not -* claim that you wrote the original software. If you use this software -* in a product, an acknowledgment in the product documentation would be -* appreciated but is not required. -* 2. Altered source versions must be plainly marked as such, and must not be -* misrepresented as being the original software. -* 3. This notice may not be removed or altered from any source distribution. +/** +* Copyright (c) 2006-2009 LOVE Development Team +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages +* arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledgment in the product documentation would be +* appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be +* misrepresented as being the original software. +* 3. This notice may not be removed or altered from any source distribution. **/ #ifndef LOVE_GRAPHICS_OPENGL_PARTICLE_SYSTEM_H @@ -139,6 +139,10 @@ namespace opengl float spinStart; float spinEnd; float spinVariation; + + // Offsets + float offsetX; + float offsetY; // Color. unsigned char colorStart[4]; @@ -340,7 +344,14 @@ namespace opengl * @param color The color. **/ void setColor(unsigned char * color); - + + /** + * Sets the particles' offsets for rotation. + * @param x The x offset. + * @param y The y offset. + **/ + void setOffset(float x, float y); + /** * Sets the color of the particles. * @param start The color of the particle when created. @@ -367,7 +378,17 @@ namespace opengl * Returns the directional spread of the emitter (in degrees). **/ float getSpread() const; - + + /** + * Returns the X offset of the particles. + **/ + float getOffsetX() const; + + /** + * Returns the Y offset of the particles. + **/ + float getOffsetY() const; + /** * Returns the amount of particles that are currently active in the system. **/ diff --git a/src/modules/graphics/opengl/wrap_ParticleSystem.cpp b/src/modules/graphics/opengl/wrap_ParticleSystem.cpp index 6b611e9eb..2fad8a25c 100644 --- a/src/modules/graphics/opengl/wrap_ParticleSystem.cpp +++ b/src/modules/graphics/opengl/wrap_ParticleSystem.cpp @@ -1,352 +1,378 @@ -/** -* Copyright (c) 2006-2009 LOVE Development Team -* -* This software is provided 'as-is', without any express or implied -* warranty. In no event will the authors be held liable for any damages -* arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute it -* freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not -* claim that you wrote the original software. If you use this software -* in a product, an acknowledgment in the product documentation would be -* appreciated but is not required. -* 2. Altered source versions must be plainly marked as such, and must not be -* misrepresented as being the original software. -* 3. This notice may not be removed or altered from any source distribution. -**/ - -#include "wrap_ParticleSystem.h" - -#include - -namespace love -{ -namespace graphics -{ -namespace opengl -{ - ParticleSystem * luax_checkparticlesystem(lua_State * L, int idx) - { - return luax_checktype(L, idx, "ParticleSystem", GRAPHICS_PARTICLE_SYSTEM_T); - } - - int w_ParticleSystem_setSprite(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - Image * i = luax_checkimage(L, 2); - t->setSprite(i); - return 0; - } - - int w_ParticleSystem_setBufferSize(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - int arg1 = luaL_checkint(L, 2); - t->setBufferSize((unsigned int)arg1); - return 0; - } - - int w_ParticleSystem_setEmissionRate(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - int arg1 = luaL_checkint(L, 2); - t->setEmissionRate((unsigned int)arg1); - return 0; - } - - int w_ParticleSystem_setLifetime(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - t->setLifetime(arg1); - return 0; - } - - int w_ParticleSystem_setParticleLife(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - float arg2 = (float)luaL_optnumber(L, 3, arg1); - t->setParticleLife(arg1, arg2); - return 0; - } - - int w_ParticleSystem_setPosition(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - float arg2 = (float)luaL_checknumber(L, 3); - t->setPosition(arg1, arg2); - return 0; - } - - int w_ParticleSystem_setDirection(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - t->setDirection(arg1); - return 0; - } - - int w_ParticleSystem_setSpread(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - t->setSpread(arg1); - return 0; - } - - int w_ParticleSystem_setRelativeDirection(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - bool arg1 = (bool)luax_toboolean(L, 2); - t->setRelativeDirection(arg1); - return 0; - } - - int w_ParticleSystem_setSpeed(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - float arg2 = (float)luaL_optnumber(L, 3, arg1); - t->setSpeed(arg1, arg2); - return 0; - } - - int w_ParticleSystem_setGravity(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - float arg2 = (float)luaL_optnumber(L, 3, arg1); - t->setGravity(arg1, arg2); - return 0; - } - - int w_ParticleSystem_setRadialAcceleration(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - float arg2 = (float)luaL_optnumber(L, 3, arg1); - t->setRadialAcceleration(arg1, arg2); - return 0; - } - - int w_ParticleSystem_setTangentialAcceleration(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - float arg2 = (float)luaL_optnumber(L, 3, arg1); - t->setTangentialAcceleration(arg1, arg2); - return 0; - } - - int w_ParticleSystem_setSize(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - float arg2 = (float)luaL_optnumber(L, 3, arg1); - float arg3 = (float)luaL_optnumber(L, 3, 0); - t->setSize(arg1, arg2, arg3); - return 0; - } - - int w_ParticleSystem_setSizeVariation(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - t->setSizeVariation(arg1); - return 0; - } - - int w_ParticleSystem_setRotation(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - float arg2 = (float)luaL_optnumber(L, 3, arg1); - t->setRotation(arg1, arg2); - return 0; - } - - int w_ParticleSystem_setSpin(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - float arg2 = (float)luaL_optnumber(L, 3, arg1); - float arg3 = (float)luaL_optnumber(L, 3, 0); - t->setSpin(arg1, arg2, arg3); - return 0; - } - - int w_ParticleSystem_setSpinVariation(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float arg1 = (float)luaL_checknumber(L, 2); - t->setSpinVariation(arg1); - return 0; - } - - int w_ParticleSystem_setColor(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - - unsigned char start[4]; - - start[0] = (unsigned char)luaL_checkint(L, 2); - start[1] = (unsigned char)luaL_checkint(L, 3); - start[2] = (unsigned char)luaL_checkint(L, 4); - start[3] = (unsigned char)luaL_checkint(L, 5); - - if(lua_gettop(L) > 5) - { - unsigned char end[4]; - end[0] = (unsigned char)luaL_checkint(L, 6); - end[1] = (unsigned char)luaL_checkint(L, 7); - end[2] = (unsigned char)luaL_checkint(L, 8); - end[3] = (unsigned char)luaL_checkint(L, 9); - t->setColor(start, end); - } - else - t->setColor(start); - - return 0; - } - - int w_ParticleSystem_getX(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - lua_pushnumber(L, t->getX()); - return 1; - } - - int w_ParticleSystem_getY(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - lua_pushnumber(L, t->getY()); - return 1; - } - - int w_ParticleSystem_getDirection(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - lua_pushnumber(L, t->getDirection()); - return 1; - } - - int w_ParticleSystem_getSpread(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - lua_pushnumber(L, t->getSpread()); - return 1; - } - - int w_ParticleSystem_count(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - lua_pushnumber(L, t->count()); - return 1; - } - - int w_ParticleSystem_start(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - t->start(); - return 0; - } - - int w_ParticleSystem_stop(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - t->stop(); - return 0; - } - - int w_ParticleSystem_pause(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - t->pause(); - return 0; - } - - int w_ParticleSystem_reset(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - t->reset(); - return 0; - } - - int w_ParticleSystem_isActive(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - luax_pushboolean(L, t->isActive()); - return 1; - } - - int w_ParticleSystem_isEmpty(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - luax_pushboolean(L, t->isEmpty()); - return 1; - } - - int w_ParticleSystem_isFull(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - luax_pushboolean(L, t->isFull()); - return 1; - } - - int w_ParticleSystem_update(lua_State * L) - { - ParticleSystem * t = luax_checkparticlesystem(L, 1); - float dt = (float)luaL_checknumber(L, 2); - t->update(dt); - return 0; - } - - static const luaL_Reg functions[] = { - { "setSprite", w_ParticleSystem_setSprite }, - { "setBufferSize", w_ParticleSystem_setBufferSize }, - { "setEmissionRate", w_ParticleSystem_setEmissionRate }, - { "setLifetime", w_ParticleSystem_setLifetime }, - { "setParticleLife", w_ParticleSystem_setParticleLife }, - { "setPosition", w_ParticleSystem_setPosition }, - { "setDirection", w_ParticleSystem_setDirection }, - { "setSpread", w_ParticleSystem_setSpread }, - { "setRelativeDirection", w_ParticleSystem_setRelativeDirection }, - { "setSpeed", w_ParticleSystem_setSpeed }, - { "setGravity", w_ParticleSystem_setGravity }, - { "setRadialAcceleration", w_ParticleSystem_setRadialAcceleration }, - { "setTangentialAcceleration", w_ParticleSystem_setTangentialAcceleration }, - { "setSize", w_ParticleSystem_setSize }, - { "setSizeVariation", w_ParticleSystem_setSizeVariation }, - { "setRotation", w_ParticleSystem_setRotation }, - { "setSpin", w_ParticleSystem_setSpin }, - { "setSpinVariation", w_ParticleSystem_setSpinVariation }, - { "setColor", w_ParticleSystem_setColor }, - { "getX", w_ParticleSystem_getX }, - { "getY", w_ParticleSystem_getY }, - { "getDirection", w_ParticleSystem_getDirection }, - { "getSpread", w_ParticleSystem_getSpread }, - { "count", w_ParticleSystem_count }, - { "start", w_ParticleSystem_start }, - { "stop", w_ParticleSystem_stop }, - { "pause", w_ParticleSystem_pause }, - { "reset", w_ParticleSystem_reset }, - { "isActive", w_ParticleSystem_isActive }, - { "isEmpty", w_ParticleSystem_isEmpty }, - { "isFull", w_ParticleSystem_isFull }, - { "update", w_ParticleSystem_update }, - { 0, 0 } - }; - - int luaopen_particlesystem(lua_State * L) - { - return luax_register_type(L, "ParticleSystem", functions); - } - -} // opengl -} // graphics -} // love +/** +* Copyright (c) 2006-2009 LOVE Development Team +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages +* arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledgment in the product documentation would be +* appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be +* misrepresented as being the original software. +* 3. This notice may not be removed or altered from any source distribution. +**/ + +#include "wrap_ParticleSystem.h" + +#include + +namespace love +{ +namespace graphics +{ +namespace opengl +{ + ParticleSystem * luax_checkparticlesystem(lua_State * L, int idx) + { + return luax_checktype(L, idx, "ParticleSystem", GRAPHICS_PARTICLE_SYSTEM_T); + } + + int w_ParticleSystem_setSprite(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + Image * i = luax_checkimage(L, 2); + t->setSprite(i); + return 0; + } + + int w_ParticleSystem_setBufferSize(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + int arg1 = luaL_checkint(L, 2); + t->setBufferSize((unsigned int)arg1); + return 0; + } + + int w_ParticleSystem_setEmissionRate(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + int arg1 = luaL_checkint(L, 2); + t->setEmissionRate((unsigned int)arg1); + return 0; + } + + int w_ParticleSystem_setLifetime(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + t->setLifetime(arg1); + return 0; + } + + int w_ParticleSystem_setParticleLife(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + float arg2 = (float)luaL_optnumber(L, 3, arg1); + t->setParticleLife(arg1, arg2); + return 0; + } + + int w_ParticleSystem_setPosition(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + float arg2 = (float)luaL_checknumber(L, 3); + t->setPosition(arg1, arg2); + return 0; + } + + int w_ParticleSystem_setDirection(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + t->setDirection(arg1); + return 0; + } + + int w_ParticleSystem_setSpread(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + t->setSpread(arg1); + return 0; + } + + int w_ParticleSystem_setRelativeDirection(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + bool arg1 = (bool)luax_toboolean(L, 2); + t->setRelativeDirection(arg1); + return 0; + } + + int w_ParticleSystem_setSpeed(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + float arg2 = (float)luaL_optnumber(L, 3, arg1); + t->setSpeed(arg1, arg2); + return 0; + } + + int w_ParticleSystem_setGravity(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + float arg2 = (float)luaL_optnumber(L, 3, arg1); + t->setGravity(arg1, arg2); + return 0; + } + + int w_ParticleSystem_setRadialAcceleration(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + float arg2 = (float)luaL_optnumber(L, 3, arg1); + t->setRadialAcceleration(arg1, arg2); + return 0; + } + + int w_ParticleSystem_setTangentialAcceleration(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + float arg2 = (float)luaL_optnumber(L, 3, arg1); + t->setTangentialAcceleration(arg1, arg2); + return 0; + } + + int w_ParticleSystem_setSize(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + float arg2 = (float)luaL_optnumber(L, 3, arg1); + float arg3 = (float)luaL_optnumber(L, 3, 0); + t->setSize(arg1, arg2, arg3); + return 0; + } + + int w_ParticleSystem_setSizeVariation(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + t->setSizeVariation(arg1); + return 0; + } + + int w_ParticleSystem_setRotation(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + float arg2 = (float)luaL_optnumber(L, 3, arg1); + t->setRotation(arg1, arg2); + return 0; + } + + int w_ParticleSystem_setSpin(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + float arg2 = (float)luaL_optnumber(L, 3, arg1); + float arg3 = (float)luaL_optnumber(L, 3, 0); + t->setSpin(arg1, arg2, arg3); + return 0; + } + + int w_ParticleSystem_setSpinVariation(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float arg1 = (float)luaL_checknumber(L, 2); + t->setSpinVariation(arg1); + return 0; + } + + int w_ParticleSystem_setColor(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + + unsigned char start[4]; + + start[0] = (unsigned char)luaL_checkint(L, 2); + start[1] = (unsigned char)luaL_checkint(L, 3); + start[2] = (unsigned char)luaL_checkint(L, 4); + start[3] = (unsigned char)luaL_checkint(L, 5); + + if(lua_gettop(L) > 5) + { + unsigned char end[4]; + end[0] = (unsigned char)luaL_checkint(L, 6); + end[1] = (unsigned char)luaL_checkint(L, 7); + end[2] = (unsigned char)luaL_checkint(L, 8); + end[3] = (unsigned char)luaL_checkint(L, 9); + t->setColor(start, end); + } + else + t->setColor(start); + + return 0; + } + + int w_ParticleSystem_setOffset(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float x = (float)luaL_checknumber(L, 2); + float y = (float)luaL_checknumber(L, 3); + t->setOffset(x, y); + return 0; + } + + int w_ParticleSystem_getX(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + lua_pushnumber(L, t->getX()); + return 1; + } + + int w_ParticleSystem_getY(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + lua_pushnumber(L, t->getY()); + return 1; + } + + int w_ParticleSystem_getDirection(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + lua_pushnumber(L, t->getDirection()); + return 1; + } + + int w_ParticleSystem_getSpread(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + lua_pushnumber(L, t->getSpread()); + return 1; + } + + int w_ParticleSystem_getOffsetX(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + lua_pushnumber(L, t->getOffsetX()); + return 1; + } + + int w_ParticleSystem_getOffsetY(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + lua_pushnumber(L, t->getOffsetY()); + return 1; + } + + int w_ParticleSystem_count(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + lua_pushnumber(L, t->count()); + return 1; + } + + int w_ParticleSystem_start(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + t->start(); + return 0; + } + + int w_ParticleSystem_stop(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + t->stop(); + return 0; + } + + int w_ParticleSystem_pause(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + t->pause(); + return 0; + } + + int w_ParticleSystem_reset(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + t->reset(); + return 0; + } + + int w_ParticleSystem_isActive(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + luax_pushboolean(L, t->isActive()); + return 1; + } + + int w_ParticleSystem_isEmpty(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + luax_pushboolean(L, t->isEmpty()); + return 1; + } + + int w_ParticleSystem_isFull(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + luax_pushboolean(L, t->isFull()); + return 1; + } + + int w_ParticleSystem_update(lua_State * L) + { + ParticleSystem * t = luax_checkparticlesystem(L, 1); + float dt = (float)luaL_checknumber(L, 2); + t->update(dt); + return 0; + } + + static const luaL_Reg functions[] = { + { "setSprite", w_ParticleSystem_setSprite }, + { "setBufferSize", w_ParticleSystem_setBufferSize }, + { "setEmissionRate", w_ParticleSystem_setEmissionRate }, + { "setLifetime", w_ParticleSystem_setLifetime }, + { "setParticleLife", w_ParticleSystem_setParticleLife }, + { "setPosition", w_ParticleSystem_setPosition }, + { "setDirection", w_ParticleSystem_setDirection }, + { "setSpread", w_ParticleSystem_setSpread }, + { "setRelativeDirection", w_ParticleSystem_setRelativeDirection }, + { "setSpeed", w_ParticleSystem_setSpeed }, + { "setGravity", w_ParticleSystem_setGravity }, + { "setRadialAcceleration", w_ParticleSystem_setRadialAcceleration }, + { "setTangentialAcceleration", w_ParticleSystem_setTangentialAcceleration }, + { "setSize", w_ParticleSystem_setSize }, + { "setSizeVariation", w_ParticleSystem_setSizeVariation }, + { "setRotation", w_ParticleSystem_setRotation }, + { "setSpin", w_ParticleSystem_setSpin }, + { "setSpinVariation", w_ParticleSystem_setSpinVariation }, + { "setColor", w_ParticleSystem_setColor }, + { "setOffset", w_ParticleSystem_setOffset }, + { "getX", w_ParticleSystem_getX }, + { "getY", w_ParticleSystem_getY }, + { "getDirection", w_ParticleSystem_getDirection }, + { "getSpread", w_ParticleSystem_getSpread }, + { "getOffsetX", w_ParticleSystem_getOffsetX }, + { "getOffsetY", w_ParticleSystem_getOffsetY }, + { "count", w_ParticleSystem_count }, + { "start", w_ParticleSystem_start }, + { "stop", w_ParticleSystem_stop }, + { "pause", w_ParticleSystem_pause }, + { "reset", w_ParticleSystem_reset }, + { "isActive", w_ParticleSystem_isActive }, + { "isEmpty", w_ParticleSystem_isEmpty }, + { "isFull", w_ParticleSystem_isFull }, + { "update", w_ParticleSystem_update }, + { 0, 0 } + }; + + int luaopen_particlesystem(lua_State * L) + { + return luax_register_type(L, "ParticleSystem", functions); + } + +} // opengl +} // graphics +} // love diff --git a/src/modules/graphics/opengl/wrap_ParticleSystem.h b/src/modules/graphics/opengl/wrap_ParticleSystem.h index d42c020d3..2327b822e 100644 --- a/src/modules/graphics/opengl/wrap_ParticleSystem.h +++ b/src/modules/graphics/opengl/wrap_ParticleSystem.h @@ -1,74 +1,77 @@ -/** -* Copyright (c) 2006-2009 LOVE Development Team -* -* This software is provided 'as-is', without any express or implied -* warranty. In no event will the authors be held liable for any damages -* arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute it -* freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not -* claim that you wrote the original software. If you use this software -* in a product, an acknowledgment in the product documentation would be -* appreciated but is not required. -* 2. Altered source versions must be plainly marked as such, and must not be -* misrepresented as being the original software. -* 3. This notice may not be removed or altered from any source distribution. -**/ - -#ifndef LOVE_GRAPHICS_OPENGL_WRAP_PARTICLE_SYSTEM_H -#define LOVE_GRAPHICS_OPENGL_WRAP_PARTICLE_SYSTEM_H - -// LOVE -#include -#include "wrap_Image.h" -#include "ParticleSystem.h" - -namespace love -{ -namespace graphics -{ -namespace opengl -{ - ParticleSystem * luax_checkparticlesystem(lua_State * L, int idx); - int w_ParticleSystem_setSprite(lua_State * L); - int w_ParticleSystem_setBufferSize(lua_State * L); - int w_ParticleSystem_setEmissionRate(lua_State * L); - int w_ParticleSystem_setLifetime(lua_State * L); - int w_ParticleSystem_setParticleLife(lua_State * L); - int w_ParticleSystem_setPosition(lua_State * L); - int w_ParticleSystem_setDirection(lua_State * L); - int w_ParticleSystem_setSpread(lua_State * L); - int w_ParticleSystem_setRelativeDirection(lua_State * L); - int w_ParticleSystem_setSpeed(lua_State * L); - int w_ParticleSystem_setGravity(lua_State * L); - int w_ParticleSystem_setRadialAcceleration(lua_State * L); - int w_ParticleSystem_setTangentialAcceleration(lua_State * L); - int w_ParticleSystem_setSize(lua_State * L); - int w_ParticleSystem_setSizeVariation(lua_State * L); - int w_ParticleSystem_setRotation(lua_State * L); - int w_ParticleSystem_setSpin(lua_State * L); - int w_ParticleSystem_setSpinVariation(lua_State * L); - int w_ParticleSystem_setColor(lua_State * L); - int w_ParticleSystem_getX(lua_State * L); - int w_ParticleSystem_getY(lua_State * L); - int w_ParticleSystem_getDirection(lua_State * L); - int w_ParticleSystem_getSpread(lua_State * L); - int w_ParticleSystem_count(lua_State * L); - int w_ParticleSystem_start(lua_State * L); - int w_ParticleSystem_stop(lua_State * L); - int w_ParticleSystem_pause(lua_State * L); - int w_ParticleSystem_reset(lua_State * L); - int w_ParticleSystem_isActive(lua_State * L); - int w_ParticleSystem_isEmpty(lua_State * L); - int w_ParticleSystem_isFull(lua_State * L); - int w_ParticleSystem_update(lua_State * L); - int luaopen_particlesystem(lua_State * L); - -} // opengl -} // graphics -} // love - -#endif // LOVE_GRAPHICS_OPENGL_WRAP_PARTICLE_SYSTEM_H +/** +* Copyright (c) 2006-2009 LOVE Development Team +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages +* arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledgment in the product documentation would be +* appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be +* misrepresented as being the original software. +* 3. This notice may not be removed or altered from any source distribution. +**/ + +#ifndef LOVE_GRAPHICS_OPENGL_WRAP_PARTICLE_SYSTEM_H +#define LOVE_GRAPHICS_OPENGL_WRAP_PARTICLE_SYSTEM_H + +// LOVE +#include +#include "wrap_Image.h" +#include "ParticleSystem.h" + +namespace love +{ +namespace graphics +{ +namespace opengl +{ + ParticleSystem * luax_checkparticlesystem(lua_State * L, int idx); + int w_ParticleSystem_setSprite(lua_State * L); + int w_ParticleSystem_setBufferSize(lua_State * L); + int w_ParticleSystem_setEmissionRate(lua_State * L); + int w_ParticleSystem_setLifetime(lua_State * L); + int w_ParticleSystem_setParticleLife(lua_State * L); + int w_ParticleSystem_setPosition(lua_State * L); + int w_ParticleSystem_setDirection(lua_State * L); + int w_ParticleSystem_setSpread(lua_State * L); + int w_ParticleSystem_setRelativeDirection(lua_State * L); + int w_ParticleSystem_setSpeed(lua_State * L); + int w_ParticleSystem_setGravity(lua_State * L); + int w_ParticleSystem_setRadialAcceleration(lua_State * L); + int w_ParticleSystem_setTangentialAcceleration(lua_State * L); + int w_ParticleSystem_setSize(lua_State * L); + int w_ParticleSystem_setSizeVariation(lua_State * L); + int w_ParticleSystem_setRotation(lua_State * L); + int w_ParticleSystem_setSpin(lua_State * L); + int w_ParticleSystem_setSpinVariation(lua_State * L); + int w_ParticleSystem_setColor(lua_State * L); + int w_ParticleSystem_setOffset(lua_State * L); + int w_ParticleSystem_getX(lua_State * L); + int w_ParticleSystem_getY(lua_State * L); + int w_ParticleSystem_getDirection(lua_State * L); + int w_ParticleSystem_getSpread(lua_State * L); + int w_ParticleSystem_getOffsetX(lua_State * L); + int w_ParticleSystem_getOffsetY(lua_State * L); + int w_ParticleSystem_count(lua_State * L); + int w_ParticleSystem_start(lua_State * L); + int w_ParticleSystem_stop(lua_State * L); + int w_ParticleSystem_pause(lua_State * L); + int w_ParticleSystem_reset(lua_State * L); + int w_ParticleSystem_isActive(lua_State * L); + int w_ParticleSystem_isEmpty(lua_State * L); + int w_ParticleSystem_isFull(lua_State * L); + int w_ParticleSystem_update(lua_State * L); + int luaopen_particlesystem(lua_State * L); + +} // opengl +} // graphics +} // love + +#endif // LOVE_GRAPHICS_OPENGL_WRAP_PARTICLE_SYSTEM_H