local rots = {} for i=0,23 do rots[i] = {} end local function p(a,b,c) return vector.new(a,b,c) end rots[0].up=p( 0, 1, 0); rots[0].forward=p( 0, 0,-1); rots[0].left=p( 1, 0, 0) rots[1].up=p( 0, 1, 0); rots[1].forward=p(-1, 0, 0); rots[1].left=p( 0, 0,-1) rots[2].up=p( 0, 1, 0); rots[2].forward=p( 0, 0, 1); rots[2].left=p(-1, 0, 0) rots[3].up=p( 0, 1, 0); rots[3].forward=p( 1, 0, 0); rots[3].left=p( 0, 0, 1) rots[4].up=p( 0, 0, 1); rots[4].forward=p( 0, 1, 0); rots[4].left=p( 1, 0, 0) rots[5].up=p( 0, 0, 1); rots[5].forward=p(-1, 0, 0); rots[5].left=p( 0, 1, 0) rots[6].up=p( 0, 0, 1); rots[6].forward=p( 0,-1, 0); rots[6].left=p(-1, 0, 0) rots[7].up=p( 0, 0, 1); rots[7].forward=p( 1, 0, 0); rots[7].left=p( 0,-1, 0) rots[8].up=p( 0, 0,-1); rots[8].forward=p( 0,-1, 0); rots[8].left=p( 1, 0, 0) rots[9].up=p( 0, 0,-1); rots[9].forward=p(-1, 0, 0); rots[9].left=p( 0,-1, 0) rots[10].up=p( 0, 0,-1); rots[10].forward=p( 0, 1, 0); rots[10].left=p(-1, 0, 0) rots[11].up=p( 0, 0,-1); rots[11].forward=p( 1, 0, 0); rots[11].left=p( 0, 1, 0) rots[12].up=p( 1, 0, 0); rots[12].forward=p( 0, 0,-1); rots[12].left=p( 0,-1, 0) rots[13].up=p( 1, 0, 0); rots[13].forward=p( 0, 1, 0); rots[13].left=p( 0, 0,-1) rots[14].up=p( 1, 0, 0); rots[14].forward=p( 0, 0, 1); rots[14].left=p( 0, 1, 0) rots[15].up=p( 1, 0, 0); rots[15].forward=p( 0,-1, 0); rots[15].left=p( 0, 0, 1) rots[16].up=p(-1, 0, 0); rots[16].forward=p( 0, 0,-1); rots[16].left=p( 0, 1, 0) rots[17].up=p(-1, 0, 0); rots[17].forward=p( 0,-1, 0); rots[17].left=p( 0, 0,-1) rots[18].up=p(-1, 0, 0); rots[18].forward=p( 0, 0, 1); rots[18].left=p( 0,-1, 0) rots[19].up=p(-1, 0, 0); rots[19].forward=p( 0, 1, 0); rots[19].left=p( 0, 0, 1) rots[20].up=p( 0,-1, 0); rots[20].forward=p( 0, 0,-1); rots[20].left=p(-1, 0, 0) rots[21].up=p( 0,-1, 0); rots[21].forward=p( 1, 0, 0); rots[21].left=p( 0, 0,-1) rots[22].up=p( 0,-1, 0); rots[22].forward=p( 0, 0, 1); rots[22].left=p( 1, 0, 0) rots[23].up=p( 0,-1, 0); rots[23].forward=p(-1, 0, 0); rots[23].left=p( 0, 0, 1) for i=0,23 do rots[i].down = vector.multiply(rots[i].up, -1) rots[i].backward = vector.multiply(rots[i].forward, -1) rots[i].right = vector.multiply(rots[i].left, -1) end local objRot = { [0] = {pitch = 0, yaw = 0, roll = 0}, [12] = {pitch = 0, yaw = 0, roll = 3}, [16] = {pitch = 0, yaw = 0, roll = 1}, [20] = {pitch = 0, yaw = 0, roll = 20}, [1] = {pitch = 0, yaw = 1, roll = 0}, [5] = {pitch = 0, yaw = 1, roll = 1}, [9] = {pitch = 0, yaw = 1, roll = 3}, [23] = {pitch = 0, yaw = 1, roll = 2}, [2] = {pitch = 0, yaw = 2, roll = 0}, [14] = {pitch = 0, yaw = 2, roll = 1}, [18] = {pitch = 0, yaw = 2, roll = 3}, [22] = {pitch = 0, yaw = 2, roll = 2}, [3] = {pitch = 0, yaw = 3, roll = 0}, [7] = {pitch = 0, yaw = 3, roll = 3}, [11] = {pitch = 0, yaw = 3, roll = 1}, [21] = {pitch = 0, yaw = 3, roll = 2}, [4] = {pitch = -4.7, yaw = 0, roll = 0}, [10] = {pitch = -4.7, yaw = 2, roll = 0}, [13] = {pitch = -4.7, yaw = 1, roll = 0}, [19] = {pitch = -4.7, yaw = 3, roll = 0}, [8] = {pitch = -4.7, yaw = 0, roll = 0}, [6] = {pitch = -4.7, yaw = 2, roll = 0}, [15] = {pitch = -4.7, yaw = 3, roll = 0}, [17] = {pitch = -4.7, yaw = 1, roll = 0}, } function logistica.get_rot_directions(param2) return rots[param2] end function logistica.get_front_face_object_info(param2) local rot = objRot[param2] local pos = rots[param2] if not rot or not pos then return nil end rot.x = pos.forward.x rot.y = pos.forward.y rot.z = pos.forward.z return rot end -- given a direction tries to return a facedir int such that the bottom of block would be facing that direction function logistica.dir_to_facedir(dir) local x,y,z = dir.x, dir.y, dir.z local absX, absY, absZ = math.abs(x), math.abs(y), math.abs(z) local mostlyX = absX > absY and absX > absZ local mostlyZ = absZ > absX and absZ > absY if mostlyX then if x > 0 then return 15 else return 12 end elseif mostlyZ then if z > 0 then return 8 else return 4 end else -- mostlyY if y > 0 then return 20 else return 0 end end end