metrosigns/init.lua

235 lines
11 KiB
Lua

---------------------------------------------------------------------------------------------------
-- metrosigns mod for minetest by A S Lewis
-- https://github.com/axcore/metrosigns
-- Licence: GNU Affero GPL
---------------------------------------------------------------------------------------------------
-- Includes code/textures from advtrains_subwayblocks by gpcf/orwell
-- https://git.gpcf.eu/?p=advtrains_subwayblocks.git
-- Licence: GNU Affero GPL
--
-- Includes code/textures from trainblocks by Maxx
-- https://github.com/maxhipp/trainblocks_bc
-- https://forum.minetest.net/viewtopic.php?t=19743
-- Licence: GNU Affero GPL
--
-- Includes code/textures from roads by cheapie
-- https://cheapiesystems.com/git/roads/
-- https://forum.minetest.net/viewtopic.php?t=13904
-- Licence: CC-BY-SA 3.0 Unported
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-- Create namespaces
---------------------------------------------------------------------------------------------------
metrosigns = {}
metrosigns.name = "metrosigns"
metrosigns.ver_max = 1
metrosigns.ver_min = 0
metrosigns.ver_rev = 0
metrosigns.writer = {}
---------------------------------------------------------------------------------------------------
-- Constants
---------------------------------------------------------------------------------------------------
metrosigns.path_mod = minetest.get_modpath(minetest.get_current_modname())
-- If default and basic_materials are loaded, the sign writer and cartridges are craftable
if minetest.get_modpath("default") then
HAVE_DEFAULT_FLAG = true
else
HAVE_DEFAULT_FLAG = false
end
if minetest.get_modpath("basic_materials") then
HAVE_BASIC_MATERIALS_FLAG = true
else
HAVE_BASIC_MATERIALS_FLAG = false
end
-- If signs_api from display_modpack is loaded, create signs with customisable text
if minetest.get_modpath("signs_api") then
HAVE_SIGNS_API_FLAG = true
else
HAVE_SIGNS_API_FLAG = false
end
-- If advtrains_subwayblocks is loaded, we don't create duplicate blocks
if minetest.get_modpath("advtrains_subwayblocks") then
HAVE_SUBWAYBLOCKS_FLAG = true
else
HAVE_SUBWAYBLOCKS_FLAG = false
end
-- If trainblocks is loaded, we don't create duplicate blocks
if minetest.get_modpath("trainblocks") then
HAVE_TRAINBLOCKS_FLAG = true
else
HAVE_TRAINBLOCKS_FLAG = false
end
-- Cartridge ink levels are implemented using wear
-- Ink capacity of a cartridge
metrosigns.writer.cartridge_max = 60000
-- Amount of ink used for one unit
metrosigns.writer.cartridge_min = 1000
-- Number of units used for printing various kinds of sign
metrosigns.writer.box_units = 30
metrosigns.writer.sign_units = 5
metrosigns.writer.map_units = 10
metrosigns.writer.text_units = 10
-- Used in material copied from advtrains_subwayblocks and trainblocks
box_groups = {cracky = 3}
box_light_source = 10
---------------------------------------------------------------------------------------------------
-- Variables
---------------------------------------------------------------------------------------------------
-- Signs are divided into categories. A category's name is the same as the city description (i.e.
-- "London Underground" rather than "London"
-- Ordered list of categories, as displayed in the sign-writing
-- machine's dropdrown box, e.g. categories[1] = "London Underground",
-- categories[2] = "Paris Metro"
metrosigns.writer.categories = {}
-- The current category; one of the values in metrosigns.writer.categories. Only signs in this
-- category are visible in the sign-writing machine's list
metrosigns.writer.current_category = nil
-- Ordered list of signs in each category and their properties. The properties are arranged in a
-- table:
-- category - one of the values in metrosigns.writer.current_category
-- name - the name of the sign's node, e.g. "metrosigns:map_london_bakerloo_line"
-- ink_needed - the amount of ink removed from each cartridge when printing the sign, e.g. 10
-- Thus we have, e.g. signtypes["London Underground"][1] = property_table,
-- signtypes["London Underground"][2] = property_table, etc
metrosigns.writer.signtypes = {}
-- The number of signs in each category, e.g. signcounts["London Underground"] = 20
metrosigns.writer.signcounts = {}
---------------------------------------------------------------------------------------------------
-- Load settings
---------------------------------------------------------------------------------------------------
-- All settings temporarily enabled, because I can't get settingtypes.txt to behave as intended
--metrosigns.create_all_flag = minetest.setting_get("metrosigns_create_all") or false
metrosigns.create_all_flag = minetest.setting_get("metrosigns_create_all") or true
metrosigns.create_subwayblocks_flag = minetest.setting_get("metrosigns_create_subwayblocks")
or false
metrosigns.create_trainblocks_flag = minetest.setting_get("metrosigns_create_trainblocks") or false
metrosigns.create_ext_line_flag = minetest.setting_get("metrosigns_create_ext_line") or true
--metrosigns.ext_line_min = minetest.setting_get("metrosigns_ext_line_min") or 11
--metrosigns.ext_line_max = minetest.setting_get("metrosigns_ext_line_min") or 20
metrosigns.ext_line_min = minetest.setting_get("metrosigns_ext_line_min") or 1
metrosigns.ext_line_max = minetest.setting_get("metrosigns_ext_line_min") or 99
metrosigns.create_ext_platform_flag = minetest.setting_get("metrosigns_create_ext_platform") or true
--metrosigns.ext_platform_min = minetest.setting_get("metrosigns_ext_platform_min") or 11
--metrosigns.ext_platform_max = minetest.setting_get("metrosigns_ext_platform_min") or 20
metrosigns.ext_platform_min = minetest.setting_get("metrosigns_ext_platform_min") or 1
metrosigns.ext_platform_max = minetest.setting_get("metrosigns_ext_platform_min") or 99
metrosigns.create_text_flag = minetest.setting_get("metrosigns_create_text") or true
metrosigns.create_athens_flag = minetest.setting_get("metrosigns_create_athens") or false
metrosigns.create_bangkok_flag = minetest.setting_get("metrosigns_create_bangkok") or false
metrosigns.create_berlin_flag = minetest.setting_get("metrosigns_create_berlin") or false
metrosigns.create_bucharest_flag = minetest.setting_get("metrosigns_create_bucharest") or false
metrosigns.create_budapest_flag = minetest.setting_get("metrosigns_create_budapest") or false
metrosigns.create_glasgow_flag = minetest.setting_get("metrosigns_create_glasgow")or false
metrosigns.create_hcmc_flag = minetest.setting_get("metrosigns_create_hcmc") or false
metrosigns.create_london_flag = minetest.setting_get("metrosigns_create_london") or true
metrosigns.create_luton_flag = minetest.setting_get("metrosigns_create_luton") or false
metrosigns.create_madrid_flag = minetest.setting_get("metrosigns_create_madrid") or false
metrosigns.create_moscow_flag = minetest.setting_get("metrosigns_create_moscow") or false
metrosigns.create_newyork_flag = minetest.setting_get("metrosigns_create_newyork") or false
metrosigns.create_paris_flag = minetest.setting_get("metrosigns_create_paris") or false
metrosigns.create_prague_flag = minetest.setting_get("metrosigns_create_prague") or false
metrosigns.create_rome_flag = minetest.setting_get("metrosigns_create_rome") or false
metrosigns.create_stockholm_flag = minetest.setting_get("metrosigns_create_stockholm") or false
metrosigns.create_taipei_flag = minetest.setting_get("metrosigns_create_taipei") or false
metrosigns.create_tokyo_flag = minetest.setting_get("metrosigns_create_tokyo") or false
metrosigns.create_toronto_flag = minetest.setting_get("metrosigns_create_toronto") or false
metrosigns.create_vienna_flag = minetest.setting_get("metrosigns_create_vienna") or false
---------------------------------------------------------------------------------------------------
-- General functions
---------------------------------------------------------------------------------------------------
function capitalise(str)
if str == "newyork" then
return "New York"
else
return (str:gsub("^%l", string.upper))
end
end
function isint(n)
return n==math.floor(n)
end
-- (Used by the sign-writing machine, if it is created)
function metrosigns.register_category(category)
table.insert(metrosigns.writer.categories, category)
metrosigns.writer.signcounts[category] = 0
metrosigns.writer.signtypes[category] = {}
if metrosigns.writer.current_category == nil then
metrosigns.writer.current_category = category
end
end
function metrosigns.register_sign(category, node, ink_needed)
local data = {category=category, name=node, ink_needed=ink_needed}
table.insert(metrosigns.writer.signtypes[category], data)
metrosigns.writer.signcounts[category] = metrosigns.writer.signcounts[category] + 1
end
---------------------------------------------------------------------------------------------------
-- Original material from advtrains_subwayblocks by gpcf/orwell
---------------------------------------------------------------------------------------------------
dofile(metrosigns.path_mod.."/subwayblocks.lua")
---------------------------------------------------------------------------------------------------
-- Original material from trainblocks by Maxx
---------------------------------------------------------------------------------------------------
dofile(metrosigns.path_mod.."/trainblocks.lua")
---------------------------------------------------------------------------------------------------
-- Extended line and platform signs
---------------------------------------------------------------------------------------------------
dofile(metrosigns.path_mod.."/extsigns.lua")
---------------------------------------------------------------------------------------------------
-- Signs with customisable text (designed to be used alongside the map nodes). Requires signs_api
-- from display_modpack
---------------------------------------------------------------------------------------------------
dofile(metrosigns.path_mod.."/customsigns.lua")
---------------------------------------------------------------------------------------------------
-- City-specific signs
---------------------------------------------------------------------------------------------------
dofile(metrosigns.path_mod.."/citysigns.lua")
---------------------------------------------------------------------------------------------------
-- Sign-writing machines and ink cartridges
---------------------------------------------------------------------------------------------------
dofile(metrosigns.path_mod.."/machine.lua")