Decodes a Advtrains position string.
Note: this page has been written for Advtrains 2.0.1 TSS and Minetest 5.1.0. Examples and practices described in this page don't take advantage of improvements introduced in later releases.
advtrains.decode_pos(pts)
This function creates a string from the given Minetest position vector, suitable for use as a table index.
See also advtrains.encode_pos
.
pts
(string): a table index string created by advtrains.encode_pos
.A Minetest position vector.
It gives a runtime error if the pts
parameter:
../mods/advtrains/advtrains/helpers.lua:373: attempt to perform arithmetic on a nil value stack traceback: ../mods/advtrains/advtrains/helpers.lua:373: in function 'dec' ../mods/advtrains/advtrains/helpers.lua:388: in function 'decode_pos' ???:?: in main chunk [C]: in ?
This function converts back strings created by advtrains.encode_pos
to their original vector form. Y, X and Z coordinates are treated separately: the corresponding parts of the argument are extracted and passed to dec
, which converts the hexadecimal form of a number to its decimal form.
advtrains.decode_pos("800080008000") -- {x=0,y=0,z=0} advtrains.decode_pos("807B7DC07F62") -- {x=-576,y=123,z=-158} advtrains.decode_pos("1C401E5858F0") -- {x=-25000,y=-25536,z=-10000}
advtrains/helpers.lua, lines 383 to 389:
-- DEPENDENCY CODE local hext = { [0]="0",[1]="1",[2]="2",[3]="3",[4]="4",[5]="5",[6]="6",[7]="7",[8]="8",[9]="9",[10]="A",[11]="B",[12]="C",[13]="D",[14]="E",[15]="F"} local dect = { ["0"]=0,["1"]=1,["2"]=2,["3"]=3,["4"]=4,["5"]=5,["6"]=6,["7"]=7,["8"]=8,["9"]=9,["A"]=10,["B"]=11,["C"]=12,["D"]=13,["E"]=14,["F"]=15} local function c(s,i) return dect[string.sub(s,i,i)] end local function dec(s) return (c(s,1)*4096 + c(s,2)*256 + c(s,3)*16 + c(s,4))-32768 end -- [...] function advtrains.decode_pos(pts) if not pts or not #pts==6 then return nil end local stry = string.sub(pts, 1,4) local strx = string.sub(pts, 5,8) local strz = string.sub(pts, 9,12) return vector.new(dec(strx), dec(stry), dec(strz)) end