aboutsummaryrefslogtreecommitdiff
path: root/games/minimal/mods/default/textures/wieldhand.png
Commit message (Expand)AuthorAge
* Compress texturesDavid Gumberg2013-06-18
* Move games/minetest to games/minimal and update README.txtPerttu Ahola2012-03-26
'>45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
/*
Minetest
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#include "lua_api/l_particles.h"
#include "lua_api/l_internal.h"
#include "common/c_converter.h"
#include "server.h"

// add_particle(pos, velocity, acceleration, expirationtime,
// 		size, collisiondetection, texture, player)
// pos/velocity/acceleration = {x=num, y=num, z=num}
// expirationtime = num (seconds)
// size = num
// texture = e.g."default_wood.png"
int ModApiParticles::l_add_particle(lua_State *L)
{
	// Get parameters
	v3f pos = check_v3f(L, 1);
	v3f vel = check_v3f(L, 2);
	v3f acc = check_v3f(L, 3);
	float expirationtime = luaL_checknumber(L, 4);
	float size = luaL_checknumber(L, 5);
	bool collisiondetection = lua_toboolean(L, 6);
	std::string texture = luaL_checkstring(L, 7);

	if (lua_gettop(L) == 8) // only spawn for a single player
	{
		const char *playername = luaL_checkstring(L, 8);
		getServer(L)->spawnParticle(playername,
			pos, vel, acc, expirationtime,
			size, collisiondetection, texture);
	}
	else // spawn for all players
	{
		getServer(L)->spawnParticleAll(pos, vel, acc,
			expirationtime, size, collisiondetection, texture);
	}
	return 1;
}

// add_particlespawner(amount, time,
//				minpos, maxpos,
//				minvel, maxvel,
//				minacc, maxacc,
//				minexptime, maxexptime,
//				minsize, maxsize,
//				collisiondetection,
//				texture,
//				player)
// minpos/maxpos/minvel/maxvel/minacc/maxacc = {x=num, y=num, z=num}
// minexptime/maxexptime = num (seconds)
// minsize/maxsize = num
// collisiondetection = bool
// texture = e.g."default_wood.png"
int ModApiParticles::l_add_particlespawner(lua_State *L)
{
	// Get parameters
	u16 amount = luaL_checknumber(L, 1);
	float time = luaL_checknumber(L, 2);
	v3f minpos = check_v3f(L, 3);
	v3f maxpos = check_v3f(L, 4);
	v3f minvel = check_v3f(L, 5);
	v3f maxvel = check_v3f(L, 6);
	v3f minacc = check_v3f(L, 7);
	v3f maxacc = check_v3f(L, 8);
	float minexptime = luaL_checknumber(L, 9);
	float maxexptime = luaL_checknumber(L, 10);
	float minsize = luaL_checknumber(L, 11);
	float maxsize = luaL_checknumber(L, 12);
	bool collisiondetection = lua_toboolean(L, 13);
	std::string texture = luaL_checkstring(L, 14);

	if (lua_gettop(L) == 15) // only spawn for a single player
	{
		const char *playername = luaL_checkstring(L, 15);
		u32 id = getServer(L)->addParticleSpawner(playername,
							amount, time,
							minpos, maxpos,
							minvel, maxvel,
							minacc, maxacc,
							minexptime, maxexptime,
							minsize, maxsize,
							collisiondetection,
							texture);
		lua_pushnumber(L, id);
	}
	else // spawn for all players
	{
		u32 id = getServer(L)->addParticleSpawnerAll(	amount, time,
							minpos, maxpos,
							minvel, maxvel,
							minacc, maxacc,
							minexptime, maxexptime,
							minsize, maxsize,
							collisiondetection,
							texture);
		lua_pushnumber(L, id);
	}
	return 1;
}

// delete_particlespawner(id, player)
// player (string) is optional
int ModApiParticles::l_delete_particlespawner(lua_State *L)
{
	// Get parameters
	u32 id = luaL_checknumber(L, 1);

	if (lua_gettop(L) == 2) // only delete for one player
	{
		const char *playername = luaL_checkstring(L, 2);
		getServer(L)->deleteParticleSpawner(playername, id);
	}
	else // delete for all players
	{
		getServer(L)->deleteParticleSpawnerAll(id);
	}
	return 1;
}

void ModApiParticles::Initialize(lua_State *L, int top)
{
	API_FCT(add_particle);
	API_FCT(add_particlespawner);
	API_FCT(delete_particlespawner);
}