Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- git/minetest.modif/src/scriptapi.cpp 2012-01-07 15:08:37.000000000 +0100
- +++ minetest/src/scriptapi.cpp 2012-01-07 16:07:05.000000000 +0100
- @@ -2543,6 +2543,54 @@
- return 1;
- }
- + // EnvRef:get_line_of_sight(pos,pos)
- + static int l_get_line_of_sight(lua_State *L)
- + {
- + //infostream<<"EnvRef::l_get_node()"<<std::endl;
- + EnvRef *o = checkobject(L, 1);
- + ServerEnvironment *env = o->m_env;
- + if(env == NULL) return 0;
- +
- + // pos1
- + v3f pos1 = checkFloatPos(L, 2);
- +
- + // pos2
- + v3f pos2 = checkFloatPos(L, 2);
- +
- +
- + float distance = pos1.getDistanceFrom(pos2);
- +
- + //calculate normalized direction vector
- + v3f normalized_vector = v3f((pos2.X - pos1.X)/distance,
- + (pos2.Y - pos1.Y)/distance,
- + (pos2.Z - pos1.Z)/distance);
- +
- + //find out if there's a node on path between pos1 and pos2
- +
- + for (int i = 1; i < distance; i++) {
- +
- + v3s16 pos = floatToInt(v3f(normalized_vector.X * i,
- + normalized_vector.Y * i,
- + normalized_vector.Z * i),BS);
- +
- +
- +
- + MapNode n = env->getMap().getNodeNoEx(pos);
- +
- + if(env->getGameDef()->ndef()->get(n).param_type == CPT_LIGHT) {
- + // Return true
- + lua_pushboolean(L, false);
- + return 1;
- + }
- + }
- +
- + // Return true
- + lua_pushboolean(L, true);
- + return 1;
- +
- + }
- +
- // EnvRef:get_objects_inside_radius(pos, radius)
- static int l_get_nodes_inside_radius(lua_State *L)
- {
- @@ -2650,6 +2698,7 @@
- method(EnvRef, get_player_by_name),
- method(EnvRef, get_objects_inside_radius),
- method(EnvRef, get_nodes_inside_radius),
- + method(EnvRef, get_line_of_sight),
- {0,0}
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement