From 7eb17b323322aaf0c9d57c66079465a8df3bae10 Mon Sep 17 00:00:00 2001 From: orwell96 Date: Thu, 24 Nov 2016 20:25:07 +0100 Subject: change train controlling system and keybindings also, fix various small bugs --- trainhud.lua | 97 +++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 24 deletions(-) (limited to 'trainhud.lua') diff --git a/trainhud.lua b/trainhud.lua index 81b9e94..610412a 100644 --- a/trainhud.lua +++ b/trainhud.lua @@ -1,10 +1,70 @@ - +--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"} + +function advtrains.on_control_change(pc, train, flip) + if pc.sneak then + if pc.up then + train.tarvelocity = advtrains.all_traintypes[train.traintype].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 + 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 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) @@ -32,28 +92,17 @@ function advtrains.set_trainhud(name, text) end end function advtrains.hud_train_format(train, flip) - local fct=1 - if flip then fct=-1 end - if not train then return "" end + local fct=flip and -1 or 1 + if not train or not train.traintype then return "" end + local max=advtrains.all_traintypes[train.traintype].max_speed or 10 - local vel=advtrains.abs_ceil(train.velocity)*fct - local tvel=advtrains.abs_ceil(train.tarvelocity)*fct - local firstLine, secondLine - if vel<0 then - firstLine="Speed: <"..string.rep("_", vel+max)..string.rep("+", -vel).."|"..string.rep("_", max)..">" - else - firstLine="Speed: <"..string.rep("_", max).."|"..string.rep("+", vel)..string.rep("_", max-vel)..">" - end - if tvel<0 then - secondLine="Target: <"..string.rep("_", tvel+max)..string.rep("+", -tvel).."|"..string.rep("_", max)..">" - else - secondLine="Target: <"..string.rep("_", max).."|"..string.rep("+", tvel)..string.rep("_", max-tvel)..">" - end - if vel==0 then - return firstLine.."\n"..secondLine.."\nup for forward, down for backward, use to get off train. " - elseif vel<0 then - return firstLine.."\n"..secondLine.."\nPress up to decelerate, down to accelerate, sneak to stop." - elseif vel>0 then - return firstLine.."\n"..secondLine.."\nPress up to accelerate, down to decelerate, sneak to stop." - end + local vel=advtrains.abs_ceil(train.velocity) + local tvel=advtrains.abs_ceil(train.tarvelocity) + local topLine, firstLine, secondLine + + topLine=train.traintype.." ["..mletter[fct*train.movedir].."] "..(train.brake and "="..( train.brake_hold_state==2 and "^" or "" ).."B=" or "") + firstLine="Speed: |"..string.rep("+", vel)..string.rep("_", max-vel)..">" + secondLine="Target: |"..string.rep("+", tvel)..string.rep("_", max-tvel)..">" + + return topLine.."\n"..firstLine.."\n"..secondLine end -- cgit v1.2.3 From 8c43f4d02693cddde0eb136ad9fe5d2f2bf210a4 Mon Sep 17 00:00:00 2001 From: orwell96 Date: Thu, 24 Nov 2016 20:56:23 +0100 Subject: document new train controls and add combination for getting off --- trainhud.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'trainhud.lua') diff --git a/trainhud.lua b/trainhud.lua index 610412a..aead246 100644 --- a/trainhud.lua +++ b/trainhud.lua @@ -36,6 +36,7 @@ function advtrains.on_control_change(pc, train, flip) train.brake = false train.brake_hold_state = 0 end + --shift+use:see wagons.lua else if pc.up then train.tarvelocity = train.tarvelocity + 1 -- cgit v1.2.3