mods that hopefully work for a TechAge-based pack
This commit is contained in:
1 parent
4e6b08d194
commit
c27db2a537
6234 files changed
+375578
No files matched your search
@@ -0,0 +1,111 @@
|
||||
--[[
|
||||
|
||||
Hyperloop Mod
|
||||
=============
|
||||
|
||||
Copyright (C) 2017-2019 Joachim Stolberg
|
||||
|
||||
LGPLv2.1+
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Some common used helper functions
|
||||
]]--
|
||||
|
||||
local PI = 3.1415926
|
||||
|
||||
-- for lazy programmers
|
||||
--local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
|
||||
local P = minetest.string_to_pos
|
||||
local M = minetest.get_meta
|
||||
|
||||
local Stations = hyperloop.Stations
|
||||
|
||||
function hyperloop.chat(player, text)
|
||||
if type(player) == "string" then
|
||||
minetest.chat_send_player(player, "[Hyperloop] "..text)
|
||||
elseif player ~= nil then
|
||||
minetest.chat_send_player(player:get_player_name(), "[Hyperloop] "..text)
|
||||
end
|
||||
end
|
||||
|
||||
function hyperloop.get_facedir(placer)
|
||||
local lookdir = placer:get_look_dir()
|
||||
return core.dir_to_facedir(lookdir)
|
||||
end
|
||||
|
||||
function hyperloop.facedir_to_rad(facedir)
|
||||
local tbl = {[0]=0, [1]=3, [2]=2, [3]=1}
|
||||
return tbl[facedir] / 2 * PI
|
||||
end
|
||||
|
||||
-- Distance between two points in (tube) blocks
|
||||
function hyperloop.distance(pos1, pos2)
|
||||
return math.floor(math.abs(pos1.x - pos2.x) +
|
||||
math.abs(pos1.y - pos2.y) + math.abs(pos1.z - pos2.z))
|
||||
end
|
||||
|
||||
-- calculate the new pos based on the given pos, the players facedir, the y-offset
|
||||
-- and the given walk path like "3F2L" (F-orward, L-eft, R-ight, B-ack).
|
||||
function hyperloop.new_pos(pos, facedir, path, y_offs)
|
||||
if facedir == nil or pos == nil or path == nil or y_offs == nil then
|
||||
return pos
|
||||
end
|
||||
local _pos = table.copy(pos)
|
||||
_pos.y = _pos.y + y_offs
|
||||
while path:len() > 0 do
|
||||
local num = tonumber(path:sub(1,1))
|
||||
local dir = path:sub(2,2)
|
||||
path = path:sub(3)
|
||||
if dir == "B" then
|
||||
facedir = (facedir + 2) % 4
|
||||
elseif dir == "L" then
|
||||
facedir = (facedir + 3) % 4
|
||||
elseif dir == "R" then
|
||||
facedir = (facedir + 1) % 4
|
||||
end
|
||||
dir = core.facedir_to_dir(facedir)
|
||||
_pos = vector.add(_pos, vector.multiply(dir, num))
|
||||
end
|
||||
return _pos
|
||||
end
|
||||
|
||||
function hyperloop.is_player_around(pos)
|
||||
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 2)) do
|
||||
if obj:is_player() then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function hyperloop.get_connection_string(pos)
|
||||
local item = Stations:get(pos)
|
||||
if item then
|
||||
local tbl = {}
|
||||
for k,v in pairs(item.conn) do
|
||||
tbl[#tbl+1] = v
|
||||
end
|
||||
return table.concat(tbl, " ")
|
||||
end
|
||||
return ""
|
||||
end
|
||||
|
||||
function hyperloop.get_station(station_pos)
|
||||
local data = Stations:get(station_pos)
|
||||
if data then
|
||||
local tStation = table.copy(data)
|
||||
tStation.pos = station_pos
|
||||
return tStation
|
||||
end
|
||||
end
|
||||
-- Return a copy of the station table including the station pos information
|
||||
-- based on the given seat/booking/lcd position (the station position
|
||||
-- is determined via meta "sStationPos").
|
||||
function hyperloop.get_base_station(pos)
|
||||
local meta = M(pos)
|
||||
local sStationPos = meta:get_string("sStationPos")
|
||||
if sStationPos ~= "" then
|
||||
local station_pos = P(sStationPos)
|
||||
return hyperloop.get_station(station_pos), station_pos
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user