diff options
author | orwell96 <mono96.mml@gmail.com> | 2016-12-20 14:17:39 +0100 |
---|---|---|
committer | orwell96 <mono96.mml@gmail.com> | 2016-12-20 14:17:39 +0100 |
commit | f806ed9eee8c13eb0b4868641311d25257c63f46 (patch) | |
tree | 0657366d21caf17881266054baa1dfae2365b9d8 /advtrains/trainhud.lua | |
parent | 05ce694decc0653997f45fa4f9a24b40057dbd01 (diff) | |
download | advtrains-f806ed9eee8c13eb0b4868641311d25257c63f46.tar.gz advtrains-f806ed9eee8c13eb0b4868641311d25257c63f46.tar.bz2 advtrains-f806ed9eee8c13eb0b4868641311d25257c63f46.zip |
Turning mod into a modpack and separating the trains from the core mod
Diffstat (limited to 'advtrains/trainhud.lua')
-rw-r--r-- | advtrains/trainhud.lua | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/advtrains/trainhud.lua b/advtrains/trainhud.lua new file mode 100644 index 0000000..aead246 --- /dev/null +++ b/advtrains/trainhud.lua @@ -0,0 +1,109 @@ +--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) + 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 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) + 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 |