From 77de1965f95924ffc9086786bcb22ec02d9a8e19 Mon Sep 17 00:00:00 2001 From: orwell96 Date: Thu, 9 Jun 2016 21:50:11 +0200 Subject: fix discouple appearing on wrong side on flipped wagons, and show discouples only when train stands --- couple.lua | 3 ++- wagons.lua | 50 ++++++++++++++++++++++++++++---------------------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/couple.lua b/couple.lua index ba4949c..9f5cc83 100644 --- a/couple.lua +++ b/couple.lua @@ -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 diff --git a/wagons.lua b/wagons.lua index 69504a1..57553d5 100644 --- a/wagons.lua +++ b/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}) -- cgit v1.2.3