====== advtrains.encode_pos ======
//Encodes a Minetest position vector.//
//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.//
===== Syntax =====
advtrains.encode_pos(pos)
===== Extended description =====
This function creates a string from the given Minetest position vector, suitable for use as a table index.
See also ''[[dev:core:funref:decode_pos|advtrains.decode_pos]]''.
===== Parameters =====
* ''pos'' //(table)//: a Minetest position vector.
===== Returns =====
A string suitable for use as a table index, in the format ''YYYYXXXXZZZZ''.
===== How it works internally =====
This function uses the hexadecimal position of each coordinate. In other words:
- The function adds 32,768 to the Y coordinate.
- The [[wp>Hexadecimal|hexadecimal notation]] of the coordinate is taken.
- Steps 1 and 2 are repeated for X and Z coordinates. The result of Step 2 is appended to the return value.
===== Examples =====
advtrains.encode_pos({x= 0 ,y=0 ,z= 0 }) -- 800080008000
advtrains.encode_pos({x=-576 ,y=123 ,z=-158 }) -- 807B7DC07F62
-- Notice the overflow while encoding the Y coordinate!
advtrains.encode_pos({x=-25000,y=40000,z=-10000}) -- 1C401E5858F0
===== In source code =====
advtrains/helpers.lua, lines 378 to 380:
-- 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 f = atfloor -- = math.floor
local function hex(i)
local x=i+32768
local c4 = x % 16
x = f(x / 16)
local c3 = x % 16
x = f(x / 16)
local c2 = x % 16
x = f(x / 16)
local c1 = x % 16
return (hext[c1]) .. (hext[c2]) .. (hext[c3]) .. (hext[c4])
end
-- [...]
function advtrains.encode_pos(pos)
return hex(pos.y) .. hex(pos.x) .. hex(pos.z)
end