check for object load via the getyaw trick and not by checking the object table
parent
f9a7fa68b1
commit
4e6c147d56
|
@ -36,6 +36,10 @@ minetest.register_entity("advtrains:discouple", {
|
||||||
if not self.wagon then
|
if not self.wagon then
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
end
|
end
|
||||||
|
--getyaw seems to be a reliable method to check if an object is loaded...if it returns nil, it is not.
|
||||||
|
if not self.wagon.object:getyaw() then
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
local velocityvec=self.wagon.object:getvelocity()
|
local velocityvec=self.wagon.object:getvelocity()
|
||||||
self.updatepct_timer=(self.updatepct_timer or 0)-dtime
|
self.updatepct_timer=(self.updatepct_timer or 0)-dtime
|
||||||
if not self.old_velocity_vector or not vector.equals(velocityvec, self.old_velocity_vector) or self.updatepct_timer<=0 then--only send update packet if something changed
|
if not self.old_velocity_vector or not vector.equals(velocityvec, self.old_velocity_vector) or self.updatepct_timer<=0 then--only send update packet if something changed
|
||||||
|
|
|
@ -81,6 +81,10 @@ advtrains.save = function()
|
||||||
else
|
else
|
||||||
data.driver_name=nil
|
data.driver_name=nil
|
||||||
end
|
end
|
||||||
|
if data.discouple then
|
||||||
|
data.discouple.object:remove()
|
||||||
|
data.discouple=nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
--print(dump(advtrains.wagon_save))
|
--print(dump(advtrains.wagon_save))
|
||||||
datastr = minetest.serialize(advtrains.wagon_save)
|
datastr = minetest.serialize(advtrains.wagon_save)
|
||||||
|
|
16
wagons.lua
16
wagons.lua
|
@ -129,7 +129,7 @@ function wagon:on_punch(puncher, time_from_last_punch, tool_capabilities, direct
|
||||||
table.remove(self:train().trainparts, self.pos_in_trainparts)
|
table.remove(self:train().trainparts, self.pos_in_trainparts)
|
||||||
advtrains.update_trainpart_properties(self.train_id)
|
advtrains.update_trainpart_properties(self.train_id)
|
||||||
advtrains.wagon_save[self.unique_id]=nil
|
advtrains.wagon_save[self.unique_id]=nil
|
||||||
if self.discouple_id and minetest.object_refs[self.discouple_id] then minetest.object_refs[self.discouple_id]:remove() end
|
if self.discouple then self.discouple.object:remove() end--will have no effect on unloaded objects
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,27 +189,21 @@ function wagon:on_step(dtime)
|
||||||
--DisCouple
|
--DisCouple
|
||||||
if self.pos_in_trainparts and self.pos_in_trainparts>1 then
|
if self.pos_in_trainparts and self.pos_in_trainparts>1 then
|
||||||
if gp.velocity==0 then
|
if gp.velocity==0 then
|
||||||
if not self.discouple_id or not minetest.luaentities[self.discouple_id] then
|
if not self.discouple or not self.discouple.object:getyaw() then
|
||||||
local object=minetest.add_entity(pos, "advtrains:discouple")
|
local object=minetest.add_entity(pos, "advtrains:discouple")
|
||||||
if object then
|
if object then
|
||||||
print("spawning discouple")
|
|
||||||
local le=object:get_luaentity()
|
local le=object:get_luaentity()
|
||||||
le.wagon=self
|
le.wagon=self
|
||||||
--box is hidden when attached, so unuseful.
|
--box is hidden when attached, so unuseful.
|
||||||
--object:set_attach(self.object, "", {x=0, y=0, z=self.wagon_span*10}, {x=0, y=0, z=0})
|
--object:set_attach(self.object, "", {x=0, y=0, z=self.wagon_span*10}, {x=0, y=0, z=0})
|
||||||
--find in object_refs
|
self.discouple=le
|
||||||
for aoi, compare in pairs(minetest.object_refs) do
|
|
||||||
if compare==object then
|
|
||||||
self.discouple_id=aoi
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
print("Couldn't spawn DisCouple")
|
print("Couldn't spawn DisCouple")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if self.discouple_id and minetest.luaentities[self.discouple_id] then
|
if self.discouple and self.discouple.object:getyaw() then
|
||||||
minetest.object_refs[self.discouple_id]:remove()
|
self.discouple.object:remove()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue