diff options
author | orwell96 <mono96.mml@gmail.com> | 2016-06-09 21:50:11 +0200 |
---|---|---|
committer | orwell96 <mono96.mml@gmail.com> | 2016-06-09 21:50:11 +0200 |
commit | 77de1965f95924ffc9086786bcb22ec02d9a8e19 (patch) | |
tree | 96779f349b3d7ca7dc0565a0a67cafd4dcb537e8 | |
parent | 14a71703321cd9d817275cb976fba10a0d6b4386 (diff) | |
download | advtrains-77de1965f95924ffc9086786bcb22ec02d9a8e19.tar.gz advtrains-77de1965f95924ffc9086786bcb22ec02d9a8e19.tar.bz2 advtrains-77de1965f95924ffc9086786bcb22ec02d9a8e19.zip |
fix discouple appearing on wrong side on flipped wagons, and show discouples only when train stands
-rw-r--r-- | couple.lua | 3 | ||||
-rw-r--r-- | wagons.lua | 50 |
2 files changed, 30 insertions, 23 deletions
@@ -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 @@ -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})
|