mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Weather support
This commit is contained in:
parent
e65d8ad655
commit
3aedfac968
23 changed files with 552 additions and 91 deletions
|
@ -397,6 +397,7 @@ ContentFeatures read_content_features(lua_State *L, int index)
|
|||
f.leveled = getintfield_default(L, index, "leveled", f.leveled);
|
||||
|
||||
getboolfield(L, index, "liquid_renewable", f.liquid_renewable);
|
||||
getstringfield(L, index, "freezemelt", f.freezemelt);
|
||||
getboolfield(L, index, "drowning", f.drowning);
|
||||
// Amount of light the node emits
|
||||
f.light_source = getintfield_default(L, index,
|
||||
|
|
|
@ -233,3 +233,20 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p,
|
|||
scriptError("error: %s", lua_tostring(L, -1));
|
||||
}
|
||||
|
||||
void ScriptApiNode::node_falling_update(v3s16 p)
|
||||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
lua_getglobal(L, "nodeupdate");
|
||||
push_v3s16(L, p);
|
||||
if(lua_pcall(L, 1, 0, 0))
|
||||
scriptError("error: %s", lua_tostring(L, -1));
|
||||
}
|
||||
|
||||
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, 0))
|
||||
scriptError("error: %s", lua_tostring(L, -1));
|
||||
}
|
||||
|
|
|
@ -49,6 +49,8 @@ public:
|
|||
const std::string &formname,
|
||||
const std::map<std::string, std::string> &fields,
|
||||
ServerActiveObject *sender);
|
||||
void node_falling_update(v3s16 p);
|
||||
void node_falling_update_single(v3s16 p);
|
||||
public:
|
||||
static struct EnumString es_DrawType[];
|
||||
static struct EnumString es_ContentParamType[];
|
||||
|
|
|
@ -263,6 +263,48 @@ int ModApiEnvMod::l_punch_node(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
// minetest.get_node_max_level(pos)
|
||||
// pos = {x=num, y=num, z=num}
|
||||
int ModApiEnvMod::l_get_node_max_level(lua_State *L)
|
||||
{
|
||||
GET_ENV_PTR;
|
||||
|
||||
v3s16 pos = read_v3s16(L, 1);
|
||||
MapNode n = env->getMap().getNodeNoEx(pos);
|
||||
lua_pushnumber(L, n.getMaxLevel(env->getGameDef()->ndef()));
|
||||
return 1;
|
||||
}
|
||||
|
||||
// minetest.get_node_level(pos)
|
||||
// pos = {x=num, y=num, z=num}
|
||||
int ModApiEnvMod::l_get_node_level(lua_State *L)
|
||||
{
|
||||
GET_ENV_PTR;
|
||||
|
||||
v3s16 pos = read_v3s16(L, 1);
|
||||
MapNode n = env->getMap().getNodeNoEx(pos);
|
||||
lua_pushnumber(L, n.getLevel(env->getGameDef()->ndef()));
|
||||
return 1;
|
||||
}
|
||||
|
||||
// minetest.add_node_level(pos, level)
|
||||
// pos = {x=num, y=num, z=num}
|
||||
// level: 0..8
|
||||
int ModApiEnvMod::l_add_node_level(lua_State *L)
|
||||
{
|
||||
GET_ENV_PTR;
|
||||
|
||||
v3s16 pos = read_v3s16(L, 1);
|
||||
u8 level = 1;
|
||||
if(lua_isnumber(L, 2))
|
||||
level = lua_tonumber(L, 2);
|
||||
MapNode n = env->getMap().getNodeNoEx(pos);
|
||||
lua_pushnumber(L, n.addLevel(env->getGameDef()->ndef(), level));
|
||||
env->setNode(pos, n);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
// minetest.get_meta(pos)
|
||||
int ModApiEnvMod::l_get_meta(lua_State *L)
|
||||
{
|
||||
|
@ -820,6 +862,40 @@ int ModApiEnvMod::l_spawn_tree(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
|
||||
// minetest.transforming_liquid_add(pos)
|
||||
int ModApiEnvMod::l_transforming_liquid_add(lua_State *L)
|
||||
{
|
||||
GET_ENV_PTR;
|
||||
|
||||
v3s16 p0 = read_v3s16(L, 1);
|
||||
env->getMap().transforming_liquid_add(p0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// minetest.get_heat(pos)
|
||||
// pos = {x=num, y=num, z=num}
|
||||
int ModApiEnvMod::l_get_heat(lua_State *L)
|
||||
{
|
||||
GET_ENV_PTR;
|
||||
|
||||
v3s16 pos = read_v3s16(L, 1);
|
||||
lua_pushnumber(L, env->getServerMap().getHeat(env, pos));
|
||||
return 1;
|
||||
}
|
||||
|
||||
// minetest.get_humidity(pos)
|
||||
// pos = {x=num, y=num, z=num}
|
||||
int ModApiEnvMod::l_get_humidity(lua_State *L)
|
||||
{
|
||||
GET_ENV_PTR;
|
||||
|
||||
v3s16 pos = read_v3s16(L, 1);
|
||||
lua_pushnumber(L, env->getServerMap().getHumidity(env, pos));
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
bool ModApiEnvMod::Initialize(lua_State *L,int top)
|
||||
{
|
||||
|
||||
|
@ -835,6 +911,9 @@ bool ModApiEnvMod::Initialize(lua_State *L,int top)
|
|||
retval &= API_FCT(place_node);
|
||||
retval &= API_FCT(dig_node);
|
||||
retval &= API_FCT(punch_node);
|
||||
retval &= API_FCT(get_node_max_level);
|
||||
retval &= API_FCT(get_node_level);
|
||||
retval &= API_FCT(add_node_level);
|
||||
retval &= API_FCT(add_entity);
|
||||
retval &= API_FCT(get_meta);
|
||||
retval &= API_FCT(get_node_timer);
|
||||
|
@ -853,6 +932,9 @@ bool ModApiEnvMod::Initialize(lua_State *L,int top)
|
|||
retval &= API_FCT(spawn_tree);
|
||||
retval &= API_FCT(find_path);
|
||||
retval &= API_FCT(line_of_sight);
|
||||
retval &= API_FCT(transforming_liquid_add);
|
||||
retval &= API_FCT(get_heat);
|
||||
retval &= API_FCT(get_humidity);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -67,6 +67,19 @@ private:
|
|||
// pos = {x=num, y=num, z=num}
|
||||
static int l_punch_node(lua_State *L);
|
||||
|
||||
|
||||
// minetest.get_node_max_level(pos)
|
||||
// pos = {x=num, y=num, z=num}
|
||||
static int l_get_node_max_level(lua_State *L);
|
||||
|
||||
// minetest.get_node_level(pos)
|
||||
// pos = {x=num, y=num, z=num}
|
||||
static int l_get_node_level(lua_State *L);
|
||||
|
||||
// minetest.add_node_level(pos)
|
||||
// pos = {x=num, y=num, z=num}
|
||||
static int l_add_node_level(lua_State *L);
|
||||
|
||||
// minetest.get_meta(pos)
|
||||
static int l_get_meta(lua_State *L);
|
||||
|
||||
|
@ -135,6 +148,12 @@ private:
|
|||
// minetest.find_path(pos1, pos2, searchdistance,
|
||||
// max_jump, max_drop, algorithm) -> table containing path
|
||||
static int l_find_path(lua_State *L);
|
||||
|
||||
// minetest.transforming_liquid_add(pos)
|
||||
static int l_transforming_liquid_add(lua_State *L);
|
||||
|
||||
static int l_get_heat(lua_State *L);
|
||||
static int l_get_humidity(lua_State *L);
|
||||
|
||||
static struct EnumString es_MapgenObject[];
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue