aboutsummaryrefslogtreecommitdiff
path: root/trainhud.lua
diff options
context:
space:
mode:
Diffstat (limited to 'trainhud.lua')
-rw-r--r--trainhud.lua98
1 files changed, 74 insertions, 24 deletions
diff --git a/trainhud.lua b/trainhud.lua
index 81b9e94..aead246 100644
--- a/trainhud.lua
+++ b/trainhud.lua
@@ -1,10 +1,71 @@
-
+--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
+ --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 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 +93,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