fix discouple appearing on wrong side on flipped wagons, and show discouples only when train stands
parent
14a7170332
commit
77de1965f9
|
@ -39,7 +39,8 @@ minetest.register_entity("advtrains:discouple", {
|
|||
local velocityvec=self.wagon.object:getvelocity()
|
||||
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
|
||||
self.object:setpos(vector.add(self.wagon.object:getpos(), {y=0, x=-math.sin(self.wagon.object:getyaw())*self.wagon.wagon_span, z=math.cos(self.wagon.object:getyaw())*self.wagon.wagon_span}))
|
||||
local flipsign=self.wagon.wagon_flipped and -1 or 1
|
||||
self.object:setpos(vector.add(self.wagon.object:getpos(), {y=0, x=-math.sin(self.wagon.object:getyaw())*self.wagon.wagon_span*flipsign, z=math.cos(self.wagon.object:getyaw())*self.wagon.wagon_span*flipsign}))
|
||||
self.object:setvelocity(velocityvec)
|
||||
self.updatepct_timer=2
|
||||
end
|
||||
|
|
50
wagons.lua
50
wagons.lua
|
@ -156,28 +156,6 @@ function wagon:on_step(dtime)
|
|||
self.initialized=true
|
||||
end
|
||||
|
||||
--DisCouple
|
||||
if self.pos_in_trainparts and self.pos_in_trainparts>1 then
|
||||
if not self.discouple_id or not minetest.luaentities[self.discouple_id] then
|
||||
local object=minetest.add_entity(pos, "advtrains:discouple")
|
||||
if object then
|
||||
print("spawning discouple")
|
||||
local le=object:get_luaentity()
|
||||
le.wagon=self
|
||||
--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})
|
||||
--find in object_refs
|
||||
for aoi, compare in pairs(minetest.object_refs) do
|
||||
if compare==object then
|
||||
self.discouple_id=aoi
|
||||
end
|
||||
end
|
||||
else
|
||||
print("Couldn't spawn DisCouple")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--driver control
|
||||
if self.driver and self.is_locomotive then
|
||||
if self.driver:get_player_control_bits()~=self.old_player_control_bits then
|
||||
|
@ -205,6 +183,34 @@ function wagon:on_step(dtime)
|
|||
end
|
||||
|
||||
local gp=self:train()
|
||||
|
||||
--DisCouple
|
||||
if self.pos_in_trainparts and self.pos_in_trainparts>1 then
|
||||
if gp.velocity==0 then
|
||||
if not self.discouple_id or not minetest.luaentities[self.discouple_id] then
|
||||
local object=minetest.add_entity(pos, "advtrains:discouple")
|
||||
if object then
|
||||
print("spawning discouple")
|
||||
local le=object:get_luaentity()
|
||||
le.wagon=self
|
||||
--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})
|
||||
--find in object_refs
|
||||
for aoi, compare in pairs(minetest.object_refs) do
|
||||
if compare==object then
|
||||
self.discouple_id=aoi
|
||||
end
|
||||
end
|
||||
else
|
||||
print("Couldn't spawn DisCouple")
|
||||
end
|
||||
end
|
||||
else
|
||||
if self.discouple_id and minetest.luaentities[self.discouple_id] then
|
||||
minetest.object_refs[self.discouple_id]:remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
--for path to be available. if not, skip step
|
||||
if not advtrains.get_or_create_path(self.train_id, gp) then
|
||||
self.object:setvelocity({x=0, y=0, z=0})
|
||||
|
|
Loading…
Reference in New Issue