aboutsummaryrefslogtreecommitdiff
path: root/advtrains/advtrains_train_japan
diff options
context:
space:
mode:
authororwell96 <mono96.mml@gmail.com>2017-02-28 14:38:59 +0100
committerorwell96 <mono96.mml@gmail.com>2017-02-28 14:38:59 +0100
commitd51a00c8232e2500783f1a04ec7ad1bf01cadd8b (patch)
treee7b5e6a4964fa6f87f987ef77d09ac903ba338e3 /advtrains/advtrains_train_japan
parentaa2ec0fc0337de5facb7ebf9adb3dca4f9fefdaf (diff)
downloadadvtrains-d51a00c8232e2500783f1a04ec7ad1bf01cadd8b.tar.gz
advtrains-d51a00c8232e2500783f1a04ec7ad1bf01cadd8b.tar.bz2
advtrains-d51a00c8232e2500783f1a04ec7ad1bf01cadd8b.zip
Add passive component naming
Diffstat (limited to 'advtrains/advtrains_train_japan')
0 files changed, 0 insertions, 0 deletions
id='n124' href='#n124'>124
--trainhud.lua: holds all the code for train controlling

advtrains.hud = {}

minetest.register_on_leaveplayer(function(player)
advtrains.hud[player:get_player_name()] = nil
end)

local mletter={[1]="F", [-1]="R", [0]="N"}
local doorstr={[-1]="|<>| >|<", [0]=">|< >|<", [1]=">|< |<>|"}

function advtrains.on_control_change(pc, train, flip)
	if pc.sneak then
		if pc.up then
			train.tarvelocity = train.max_speed or 10
		end
		if pc.down then
			train.tarvelocity = 0
		end
		if pc.left then
			train.tarvelocity = 4
		end
		if pc.right then
			train.tarvelocity = 8
		end
		if pc.jump then
			train.brake = true
			--0: released, 1: brake and pressed, 2: released and brake, 3: pressed and brake
			if not train.brake_hold_state or train.brake_hold_state==0 then
				train.brake_hold_state = 1
			elseif train.brake_hold_state==2 then
				train.brake_hold_state = 3
			end
		elseif train.brake_hold_state==1 then
			train.brake_hold_state = 2
		elseif train.brake_hold_state==3 then
			train.brake = false
			train.brake_hold_state = 0
		end
		--shift+use:see wagons.lua
	else
		if pc.up then
			train.tarvelocity = train.tarvelocity + 1
		end
		if pc.down then
			if train.velocity>0 then
				train.tarvelocity = math.max(train.tarvelocity - 1, 0)
			else
				train.movedir = -train.movedir
			end
		end
		if pc.left then
			if train.door_open ~= 0 then
				train.door_open = 0
			else
				train.door_open = -train.movedir
			end
		end
		if pc.right then
			if train.door_open ~= 0 then
				train.door_open = 0
			else
				train.door_open = train.movedir
			end
		end
		if train.brake_hold_state~=2 then
			train.brake = false
		end
		if pc.jump then
			train.brake = true
		end
		if pc.aux1 then
			--horn
		end
	end
end
function advtrains.update_driver_hud(pname, train, flip)
	advtrains.set_trainhud(pname, advtrains.hud_train_format(train, flip))
end
function advtrains.clear_driver_hud(pname)
	advtrains.set_trainhud(pname, "")
end

function advtrains.set_trainhud(name, text)
	local hud = advtrains.hud[name]
	local player=minetest.get_player_by_name(name)
	if not player then
	   return
	end
	if not hud then
		hud = {}
		advtrains.hud[name] = hud
		hud.id = player:hud_add({
			hud_elem_type = "text",
			name = "ADVTRAINS",
			number = 0xFFFFFF,
			position = {x=0.5, y=0.7},
			offset = {x=0, y=0},
			text = text,
			scale = {x=200, y=60},
			alignment = {x=0, y=0},
		})
		hud.oldText=text
		return
	elseif hud.oldText ~= text then
		player:hud_change(hud.id, "text", text)
		hud.oldText=text
	end
end
function advtrains.hud_train_format(train, flip)
	local fct=flip and -1 or 1
	if not train then return "" end
	
	local max=train.max_speed or 10
	local vel=advtrains.abs_ceil(train.velocity)
	local tvel=advtrains.abs_ceil(train.tarvelocity)
	local topLine, firstLine, secondLine
	
	topLine="  ["..mletter[fct*train.movedir].."]  "..doorstr[(train.door_open or 0) * train.movedir].."  "..(train.brake and "="..( train.brake_hold_state==2 and "^" or "" ).."B=" or "")
	firstLine=attrans("Speed:").." |"..string.rep("+", vel)..string.rep("_", max-vel)..">"
	secondLine=attrans("Target:").." |"..string.rep("+", tvel)..string.rep("_", max-tvel)..">"
	
	return topLine.."\n"..firstLine.."\n"..secondLine
end