aboutsummaryrefslogtreecommitdiff
path: root/advtrains_train_japan/models
diff options
context:
space:
mode:
authorywang <yw05@forksworld.de>2020-12-23 11:29:07 +0100
committerywang <yw05@forksworld.de>2020-12-23 11:29:07 +0100
commit5a0a6fa96d448210571a7faf490711995af8e05c (patch)
treed3ae0d93bf561a3e5ebbb583a80e4f40a84e8b5b /advtrains_train_japan/models
parentf4e2277f32c5ed2419bed607e0d48a040db8b865 (diff)
downloadadvtrains-5a0a6fa96d448210571a7faf490711995af8e05c.tar.gz
advtrains-5a0a6fa96d448210571a7faf490711995af8e05c.tar.bz2
advtrains-5a0a6fa96d448210571a7faf490711995af8e05c.zip
Minor improvements
Diffstat (limited to 'advtrains_train_japan/models')
0 files changed, 0 insertions, 0 deletions
href='#n125'>125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
--couple.lua
--defines couple entities.

--advtrains:discouple
--set into existing trains to split them when punched.
--they are attached to the wagons.
--[[fields
wagon

wagons keep their couple entity minetest-internal id inside the field discouple_id. if it refers to nowhere, they will spawn a new one if player is near
]]
local print=function(t, ...) minetest.log("action", table.concat({t, ...}, " ")) minetest.chat_send_all(table.concat({t, ...}, " ")) end


minetest.register_entity("advtrains:discouple", {
	visual="sprite",
	textures = {"advtrains_discouple.png"},
	collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
	visual_size = {x=1, y=1},
	initial_sprite_basepos = {x=0, y=0},
	
	is_discouple=true,
	on_activate=function(self, staticdata) 
		if staticdata=="DISCOUPLE" then
			--couple entities have no right to exist further...
			self.object:remove()
			return
		end
		self.object:set_armor_groups({immortal=1})
	end,
	get_staticdata=function() return "DISCOUPLE" end,
	on_punch=function(self, player)
		--only if player owns at least one wagon next to this
		local own=player:get_player_name()
		if self.wagon.owner and self.wagon.owner~=own then
			local train=advtrains.trains[self.wagon.train_id]
			local nextwgn_id=train.trainparts[self.wagon.pos_in_trainparts-1]
			for aoi, le in pairs(minetest.luaentities) do
				if le and le.is_wagon then
					if le.unique_id==nextwgn_id then
						if le.owner and le.owner~=own then
							minetest.chat_send_player(own, "You need to own at least one neighboring wagon to destroy this couple.")
							return
						end
					end
				end
			end
		end
		advtrains.split_train_at_wagon(self.wagon)--found in trainlogic.lua
	end,
	on_step=function(self, dtime)
		local t=os.clock()
		if not self.wagon then
			self.object:remove()
			return
		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()
			return
		end
		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
			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
		printbm("discouple_step", t)
	end,
})

--advtrains:couple