aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authororwell96 <orwell@bleipb.de>2019-06-05 15:49:53 +0200
committerorwell96 <orwell@bleipb.de>2019-06-05 15:49:53 +0200
commitd6cfa7dbf62887ba4b408900946ade28f7ca12c3 (patch)
tree5a283c0cd6a08e56808a855f81f9ed0e86abdd1f
parentff9412976154f60982e3a2f32108e36a1fd61635 (diff)
downloadadvtrains-d6cfa7dbf62887ba4b408900946ade28f7ca12c3.tar.gz
advtrains-d6cfa7dbf62887ba4b408900946ade28f7ca12c3.tar.bz2
advtrains-d6cfa7dbf62887ba4b408900946ade28f7ca12c3.zip
Run entity overrun checking only in loaded areas
-rw-r--r--advtrains/trainlogic.lua15
1 files changed, 9 insertions, 6 deletions
diff --git a/advtrains/trainlogic.lua b/advtrains/trainlogic.lua
index ce9ec8b..46b6b1d 100644
--- a/advtrains/trainlogic.lua
+++ b/advtrains/trainlogic.lua
@@ -524,6 +524,7 @@ function advtrains.train_step_c(id, train, dtime)
local collpos = advtrains.path_get(train, atround(collindex))
if collpos then
local rcollpos=advtrains.round_vector_floor_y(collpos)
+ local is_loaded_area = minetest.get_node_or_nil(rcollpos) ~= nil
for x=-train.extent_h,train.extent_h do
for z=-train.extent_h,train.extent_h do
local testpos=vector.add(rcollpos, {x=x, y=0, z=z})
@@ -535,7 +536,7 @@ function advtrains.train_step_c(id, train, dtime)
collided = true
end
--- 8b damage players ---
- if setting_overrun_mode=="drop" or setting_overrun_mode=="normal" then
+ if is_loaded_area and (setting_overrun_mode=="drop" or setting_overrun_mode=="normal") then
local testpts = minetest.pos_to_string(testpos)
local player=advtrains.playersbypts[testpts]
if player and train.velocity>3 and player:get_hp()>0 and advtrains.is_damage_enabled(player:get_player_name()) then
@@ -560,11 +561,13 @@ function advtrains.train_step_c(id, train, dtime)
end
end
--- 8c damage other objects ---
- local objs = minetest.get_objects_inside_radius(rcollpos, 2)
- for _,obj in ipairs(objs) do
- if not obj:is_player() and obj:get_armor_groups().fleshy and obj:get_armor_groups().fleshy > 0
- and obj:get_luaentity() and obj:get_luaentity().name~="signs:text" then
- obj:punch(obj, 1, { full_punch_interval = 1.0, damage_groups = {fleshy = 1000}, }, nil)
+ if is_loaded_area then
+ local objs = minetest.get_objects_inside_radius(rcollpos, 2)
+ for _,obj in ipairs(objs) do
+ if not obj:is_player() and obj:get_armor_groups().fleshy and obj:get_armor_groups().fleshy > 0
+ and obj:get_luaentity() and obj:get_luaentity().name~="signs:text" then
+ obj:punch(obj, 1, { full_punch_interval = 1.0, damage_groups = {fleshy = 1000}, }, nil)
+ end
end
end
end