本文整理汇总了C++中push_v3s16函数的典型用法代码示例。如果您正苦于以下问题:C++ push_v3s16函数的具体用法?C++ push_v3s16怎么用?C++ push_v3s16使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了push_v3s16函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: getStack
void ScriptApiItem::pushPointedThing(const PointedThing& pointed)
{
lua_State* L = getStack();
lua_newtable(L);
if(pointed.type == POINTEDTHING_NODE)
{
lua_pushstring(L, "node");
lua_setfield(L, -2, "type");
push_v3s16(L, pointed.node_undersurface);
lua_setfield(L, -2, "under");
push_v3s16(L, pointed.node_abovesurface);
lua_setfield(L, -2, "above");
}
else if(pointed.type == POINTEDTHING_OBJECT)
{
lua_pushstring(L, "object");
lua_setfield(L, -2, "type");
objectrefGet(L, pointed.object_id);
lua_setfield(L, -2, "ref");
}
else
{
lua_pushstring(L, "nothing");
lua_setfield(L, -2, "type");
}
}
开发者ID:00c,项目名称:minetest,代码行数:27,代码来源:s_item.cpp
示例2: checkobject
int LuaVoxelManip::l_get_emerged_area(lua_State *L)
{
LuaVoxelManip *o = checkobject(L, 1);
push_v3s16(L, o->vm->m_area.MinEdge);
push_v3s16(L, o->vm->m_area.MaxEdge);
return 2;
}
开发者ID:AnnXGame,项目名称:Minetest,代码行数:9,代码来源:l_vmanip.cpp
示例3: lua_getglobal
void ScriptApiEnv::environment_OnGenerated(v3s16 minp, v3s16 maxp,
u32 blockseed)
{
SCRIPTAPI_PRECHECKHEADER
// Get core.registered_on_generateds
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_generateds");
// Call callbacks
push_v3s16(L, minp);
push_v3s16(L, maxp);
lua_pushnumber(L, blockseed);
runCallbacks(3, RUN_CALLBACKS_MODE_FIRST);
}
开发者ID:qtx0213,项目名称:MultiCraft,代码行数:14,代码来源:s_env.cpp
示例4: getServer
// Return number of accepted items to be put
int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p,
const std::string &listname, int index, ItemStack &stack,
ServerActiveObject *player)
{
SCRIPTAPI_PRECHECKHEADER
INodeDefManager *ndef = getServer()->ndef();
// If node doesn't exist, we don't know what callback to call
MapNode node = getEnv()->getMap().getNodeNoEx(p);
if (node.getContent() == CONTENT_IGNORE)
return 0;
// Push callback function on stack
std::string nodename = ndef->get(node).name;
if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_put"))
return stack.count;
// Call function(pos, listname, index, stack, player)
push_v3s16(L, p); // pos
lua_pushstring(L, listname.c_str()); // listname
lua_pushinteger(L, index + 1); // index
LuaItemStack::create(L, stack); // stack
objectrefGetOrCreate(L, player); // player
if (lua_pcall(L, 5, 1, m_errorhandler))
scriptError();
if(!lua_isnumber(L, -1))
throw LuaError("allow_metadata_inventory_put should"
" return a number, guilty node: " + nodename);
int num = luaL_checkinteger(L, -1);
lua_pop(L, 1); // Pop integer
return num;
}
开发者ID:4aiman,项目名称:MultiCraft,代码行数:34,代码来源:s_nodemeta.cpp
示例5: read_v3s16
// find_path(pos1, pos2, searchdistance,
// max_jump, max_drop, algorithm) -> table containing path
int ModApiEnvMod::l_find_path(lua_State *L)
{
GET_ENV_PTR;
v3s16 pos1 = read_v3s16(L, 1);
v3s16 pos2 = read_v3s16(L, 2);
unsigned int searchdistance = luaL_checkint(L, 3);
unsigned int max_jump = luaL_checkint(L, 4);
unsigned int max_drop = luaL_checkint(L, 5);
Algorithm algo = A_STAR;
if (!lua_isnil(L, 6)) {
std::string algorithm = luaL_checkstring(L,6);
}
std::vector<v3s16> path =
getPath(env, pos1, pos2, searchdistance,
max_jump, max_drop, algo, ADJACENCY_4);
if (path.size() > 0)
{
lua_newtable(L);
int top = lua_gettop(L);
unsigned int index = 1;
for (std::vector<v3s16>::iterator i = path.begin(); i != path.end();i++)
{
lua_pushnumber(L,index);
push_v3s16(L, *i);
lua_settable(L, top);
index++;
}
return 1;
}
return 0;
}
开发者ID:WantedGames,项目名称:freeminer,代码行数:37,代码来源:l_env.cpp
示例6: getServer
void ScriptApiNode::node_on_receive_fields(v3s16 p,
const std::string &formname,
const std::map<std::string, std::string> &fields,
ServerActiveObject *sender)
{
SCRIPTAPI_PRECHECKHEADER
INodeDefManager *ndef = getServer()->ndef();
// If node doesn't exist, we don't know what callback to call
MapNode node = getEnv()->getMap().getNodeNoEx(p);
if (node.getContent() == CONTENT_IGNORE)
return;
// Push callback function on stack
if (!getItemCallback(ndef->get(node).name.c_str(), "on_receive_fields"))
return;
// Call function
push_v3s16(L, p); // pos
lua_pushstring(L, formname.c_str()); // formname
lua_newtable(L); // fields
std::map<std::string, std::string>::const_iterator it;
for (it = fields.begin(); it != fields.end(); it++){
const std::string &name = it->first;
const std::string &value = it->second;
lua_pushstring(L, name.c_str());
lua_pushlstring(L, value.c_str(), value.size());
lua_settable(L, -3);
}
objectrefGetOrCreate(sender); // player
if (lua_pcall(L, 4, 0, m_errorhandler))
scriptError();
}
开发者ID:Belugion,项目名称:minetest,代码行数:34,代码来源:s_node.cpp
示例7: lua_pushcfunction
// Report moved items
void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p,
const std::string &from_list, int from_index,
const std::string &to_list, int to_index,
int count, ServerActiveObject *player)
{
SCRIPTAPI_PRECHECKHEADER
lua_pushcfunction(L, script_error_handler);
int errorhandler = lua_gettop(L);
INodeDefManager *ndef = getServer()->ndef();
// If node doesn't exist, we don't know what callback to call
MapNode node = getEnv()->getMap().getNodeNoEx(p);
if(node.getContent() == CONTENT_IGNORE)
return;
// Push callback function on stack
if(!getItemCallback(ndef->get(node).name.c_str(),
"on_metadata_inventory_move"))
return;
// function(pos, from_list, from_index, to_list, to_index, count, player)
push_v3s16(L, p); // pos
lua_pushstring(L, from_list.c_str()); // from_list
lua_pushinteger(L, from_index + 1); // from_index
lua_pushstring(L, to_list.c_str()); // to_list
lua_pushinteger(L, to_index + 1); // to_index
lua_pushinteger(L, count); // count
objectrefGetOrCreate(player); // player
if(lua_pcall(L, 7, 0, errorhandler))
scriptError();
lua_pop(L, 1); // Pop error handler
}
开发者ID:ChuanonlyGame,项目名称:myisland,代码行数:35,代码来源:s_nodemeta.cpp
示例8: assert
void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n,
u32 active_object_count, u32 active_object_count_wider)
{
GameScripting *scriptIface = env->getScriptIface();
scriptIface->realityCheck();
lua_State *L = scriptIface->getStack();
assert(lua_checkstack(L, 20));
StackUnroller stack_unroller(L);
// Get minetest.registered_abms
lua_getglobal(L, "minetest");
lua_getfield(L, -1, "registered_abms");
luaL_checktype(L, -1, LUA_TTABLE);
int registered_abms = lua_gettop(L);
// Get minetest.registered_abms[m_id]
lua_pushnumber(L, m_id);
lua_gettable(L, registered_abms);
if(lua_isnil(L, -1))
assert(0);
// Call action
luaL_checktype(L, -1, LUA_TTABLE);
lua_getfield(L, -1, "action");
luaL_checktype(L, -1, LUA_TFUNCTION);
push_v3s16(L, p);
pushnode(L, n, env->getGameDef()->ndef());
lua_pushnumber(L, active_object_count);
lua_pushnumber(L, active_object_count_wider);
if(lua_pcall(L, 4, 0, 0))
script_error(L, "error: %s", lua_tostring(L, -1));
}
开发者ID:korovan,项目名称:minetest,代码行数:33,代码来源:l_env.cpp
示例9: checkobject
int LuaVoxelManip::l_read_from_map(lua_State *L)
{
LuaVoxelManip *o = checkobject(L, 1);
ManualMapVoxelManipulator *vm = o->vm;
v3s16 bp1 = getNodeBlockPos(read_v3s16(L, 2));
v3s16 bp2 = getNodeBlockPos(read_v3s16(L, 3));
sortBoxVerticies(bp1, bp2);
vm->initialEmerge(bp1, bp2);
push_v3s16(L, vm->m_area.MinEdge);
push_v3s16(L, vm->m_area.MaxEdge);
return 2;
}
开发者ID:BobMikfillin,项目名称:minetest,代码行数:16,代码来源:l_vmanip.cpp
示例10: checkobject
int LuaMinimap::l_get_pos(lua_State *L)
{
LuaMinimap *ref = checkobject(L, 1);
Minimap *m = getobject(ref);
push_v3s16(L, m->getPos());
return 1;
}
开发者ID:juhdanad,项目名称:minetest,代码行数:8,代码来源:l_minimap.cpp
示例11: getServer
// find_nodes_in_area(minp, maxp, nodenames) -> list of positions
// nodenames: eg. {"ignore", "group:tree"} or "default:dirt"
int ModApiEnvMod::l_find_nodes_in_area(lua_State *L)
{
GET_ENV_PTR;
INodeDefManager *ndef = getServer(L)->ndef();
v3s16 minp = read_v3s16(L, 1);
v3s16 maxp = read_v3s16(L, 2);
sortBoxVerticies(minp, maxp);
v3s16 cube = maxp - minp + 1;
/* Limit for too large areas, assume default values
* and give tolerances of 1 node on each side
* (chunksize * MAP_BLOCKSIZE + 2)^3 = 551368
*/
if ((u64)cube.X * (u64)cube.Y * (u64)cube.Z > 551368) {
luaL_error(L, "find_nodes_in_area(): area volume"
" exceeds allowed value of 551368");
return 0;
}
std::set<content_t> filter;
if (lua_istable(L, 3)) {
lua_pushnil(L);
while (lua_next(L, 3) != 0) {
// key at index -2 and value at index -1
luaL_checktype(L, -1, LUA_TSTRING);
ndef->getIds(lua_tostring(L, -1), filter);
// removes value, keeps key for next iteration
lua_pop(L, 1);
}
} else if (lua_isstring(L, 3)) {
ndef->getIds(lua_tostring(L, 3), filter);
}
std::unordered_map<content_t, u32> individual_count;
lua_newtable(L);
u64 i = 0;
for (s16 x = minp.X; x <= maxp.X; x++)
for (s16 y = minp.Y; y <= maxp.Y; y++)
for (s16 z = minp.Z; z <= maxp.Z; z++) {
v3s16 p(x, y, z);
content_t c = env->getMap().getNodeNoEx(p).getContent();
if (filter.count(c) != 0) {
push_v3s16(L, p);
lua_rawseti(L, -2, ++i);
individual_count[c]++;
}
}
lua_newtable(L);
for (std::set<content_t>::const_iterator it = filter.begin();
it != filter.end(); ++it) {
lua_pushnumber(L, individual_count[*it]);
lua_setfield(L, -2, ndef->get(*it).name.c_str());
}
return 2;
}
开发者ID:juhdanad,项目名称:minetest,代码行数:60,代码来源:l_env.cpp
示例12: checkobject
int LuaVoxelManip::l_read_from_map(lua_State *L)
{
MAP_LOCK_REQUIRED;
LuaVoxelManip *o = checkobject(L, 1);
MMVManip *vm = o->vm;
v3s16 bp1 = getNodeBlockPos(check_v3s16(L, 2));
v3s16 bp2 = getNodeBlockPos(check_v3s16(L, 3));
sortBoxVerticies(bp1, bp2);
vm->initialEmerge(bp1, bp2);
push_v3s16(L, vm->m_area.MinEdge);
push_v3s16(L, vm->m_area.MaxEdge);
return 2;
}
开发者ID:Sokomine,项目名称:minetest,代码行数:18,代码来源:l_vmanip.cpp
示例13: lua_getglobal
void ScriptApiNode::node_falling_update_single(v3s16 p)
{
SCRIPTAPI_PRECHECKHEADER
lua_getglobal(L, "nodeupdate_single");
push_v3s16(L, p);
if (lua_pcall(L, 1, 0, m_errorhandler))
scriptError();
}
开发者ID:Belugion,项目名称:minetest,代码行数:9,代码来源:s_node.cpp
示例14: push_area
static void push_area(lua_State *L, const Area *a,
bool include_borders, bool include_data)
{
if (!include_borders && !include_data) {
lua_pushboolean(L, true);
return;
}
lua_newtable(L);
if (include_borders) {
push_v3s16(L, a->minedge);
lua_setfield(L, -2, "min");
push_v3s16(L, a->maxedge);
lua_setfield(L, -2, "max");
}
if (include_data) {
lua_pushlstring(L, a->data.c_str(), a->data.size());
lua_setfield(L, -2, "data");
}
}
开发者ID:BlockMen,项目名称:minetest,代码行数:19,代码来源:l_areastore.cpp
示例15: PUSH_ERROR_HANDLER
void ScriptApiNode::node_falling_update_single(v3s16 p)
{
SCRIPTAPI_PRECHECKHEADER
int error_handler = PUSH_ERROR_HANDLER(L);
lua_getglobal(L, "nodeupdate_single");
push_v3s16(L, p);
PCALL_RES(lua_pcall(L, 1, 0, error_handler));
lua_pop(L, 1); // Pop error handler
}
开发者ID:bsmr-xcraft,项目名称:freeminer,代码行数:11,代码来源:s_node.cpp
示例16: lua_pushcfunction
void ScriptApiNode::node_drop(v3s16 p, int fast = 0)
{
SCRIPTAPI_PRECHECKHEADER
lua_pushcfunction(L, script_error_handler);
int errorhandler = lua_gettop(L);
lua_getglobal(L, "node_drop");
push_v3s16(L, p);
lua_pushinteger(L, fast);
PCALL_RES(lua_pcall(L, 2, 0, errorhandler));
lua_pop(L, 1); // Pop error handler
}
开发者ID:bsmr-xcraft,项目名称:freeminer,代码行数:13,代码来源:s_node.cpp
示例17: lua_pushcfunction
void ScriptApiNode::node_falling_update_single(v3s16 p)
{
SCRIPTAPI_PRECHECKHEADER
lua_pushcfunction(L, script_error_handler);
int errorhandler = lua_gettop(L);
lua_getglobal(L, "nodeupdate_single");
push_v3s16(L, p);
if(lua_pcall(L, 1, 0, errorhandler))
scriptError();
lua_pop(L, 1); // Pop error handler
}
开发者ID:Nate-Devv,项目名称:freeminer,代码行数:13,代码来源:s_node.cpp
示例18: RecursiveMutexAutoLock
void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n,
u32 active_object_count, u32 active_object_count_wider, MapNode neighbor, bool activate)
{
GameScripting *scriptIface = env->getScriptIface();
auto _script_lock = RecursiveMutexAutoLock(scriptIface->m_luastackmutex, std::try_to_lock);
if (!_script_lock.owns_lock()) {
return;
}
scriptIface->realityCheck();
lua_State *L = scriptIface->getStack();
sanity_check(lua_checkstack(L, 20));
StackUnroller stack_unroller(L);
int error_handler = PUSH_ERROR_HANDLER(L);
// Get registered_abms
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_abms");
luaL_checktype(L, -1, LUA_TTABLE);
lua_remove(L, -2); // Remove core
// Get registered_abms[m_id]
lua_pushnumber(L, m_id);
lua_gettable(L, -2);
if(lua_isnil(L, -1))
//FATAL_ERROR("");
return;
lua_remove(L, -2); // Remove registered_abms
scriptIface->setOriginFromTable(-1);
// Call action
luaL_checktype(L, -1, LUA_TTABLE);
lua_getfield(L, -1, "action");
luaL_checktype(L, -1, LUA_TFUNCTION);
lua_remove(L, -2); // Remove registered_abms[m_id]
push_v3s16(L, p);
pushnode(L, n, env->getGameDef()->ndef());
lua_pushnumber(L, active_object_count);
lua_pushnumber(L, active_object_count_wider);
pushnode(L, neighbor, env->getGameDef()->ndef());
lua_pushboolean(L, activate);
int result = lua_pcall(L, 6, 0, error_handler);
if (result)
scriptIface->scriptError(result, "LuaABM::trigger");
lua_pop(L, 1); // Pop error handler
}
开发者ID:proller,项目名称:freeminer,代码行数:50,代码来源:l_env.cpp
示例19: getServer
// find_nodes_in_area_under_air(minp, maxp, nodenames) -> list of positions
// nodenames: e.g. {"ignore", "group:tree"} or "default:dirt"
int ModApiEnvMod::l_find_nodes_in_area_under_air(lua_State *L)
{
/* Note: A similar but generalized (and therefore slower) version of this
* function could be created -- e.g. find_nodes_in_area_under -- which
* would accept a node name (or ID?) or list of names that the "above node"
* should be.
* TODO
*/
GET_ENV_PTR;
INodeDefManager *ndef = getServer(L)->ndef();
v3s16 minp = read_v3s16(L, 1);
v3s16 maxp = read_v3s16(L, 2);
std::set<content_t> filter;
if (lua_istable(L, 3)) {
int table = 3;
lua_pushnil(L);
while(lua_next(L, table) != 0) {
// key at index -2 and value at index -1
luaL_checktype(L, -1, LUA_TSTRING);
ndef->getIds(lua_tostring(L, -1), filter);
// removes value, keeps key for next iteration
lua_pop(L, 1);
}
} else if (lua_isstring(L, 3)) {
ndef->getIds(lua_tostring(L, 3), filter);
}
lua_newtable(L);
u64 i = 0;
for (s16 x = minp.X; x <= maxp.X; x++)
for (s16 z = minp.Z; z <= maxp.Z; z++) {
s16 y = minp.Y;
v3s16 p(x, y, z);
content_t c = env->getMap().getNodeNoEx(p).getContent();
for (; y <= maxp.Y; y++) {
v3s16 psurf(x, y + 1, z);
content_t csurf = env->getMap().getNodeNoEx(psurf).getContent();
if(c != CONTENT_AIR && csurf == CONTENT_AIR &&
filter.count(c) != 0) {
push_v3s16(L, v3s16(x, y, z));
lua_rawseti(L, -2, ++i);
}
c = csurf;
}
}
return 1;
}
开发者ID:JohnWayne1986,项目名称:minetest,代码行数:52,代码来源:l_env.cpp
示例20: check_v3s16
// find_nodes_with_meta(pos1, pos2)
int ModApiEnvMod::l_find_nodes_with_meta(lua_State *L)
{
GET_ENV_PTR;
std::vector<v3s16> positions = env->getMap().findNodesWithMetadata(
check_v3s16(L, 1), check_v3s16(L, 2));
lua_newtable(L);
for (size_t i = 0; i != positions.size(); i++) {
push_v3s16(L, positions[i]);
lua_rawseti(L, -2, i + 1);
}
return 1;
}
开发者ID:JohnWayne1986,项目名称:minetest,代码行数:16,代码来源:l_env.cpp
注:本文中的push_v3s16函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论