diff options
| -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})
 | 
