39 lines
1.5 KiB
Lua
39 lines
1.5 KiB
Lua
local util = ...;
|
|
|
|
local biome_lookup = {};
|
|
|
|
return {
|
|
-- Register a biome with textures to display
|
|
-- name: A string containing the biome name
|
|
-- textures: A table of texture names.
|
|
-- These should correspond with detail levels,
|
|
-- any detail level past the length of the table will return the last texture
|
|
-- (Optional) min_height: The minimum Y position where this biome data should be used
|
|
-- (Optional) max_height: The maximum Y position where this biome data should be used
|
|
add = function (name, textures, min_height, max_height)
|
|
biome_lookup[#biome_lookup + 1] = {
|
|
name = name,
|
|
textures = textures,
|
|
min_height = min_height,
|
|
max_height = max_height,
|
|
};
|
|
end,
|
|
|
|
-- Get the texture name (minus index/extension) for the given biome, height, and detail level.
|
|
-- name: A string containing the biome name
|
|
-- height: A number representing the Y position of the biome
|
|
-- detail: The detail level
|
|
-- Returns a string with a texture name, or nil if no matching biome entry was found.
|
|
get_texture = function (name, height, detail)
|
|
for _,biome in ipairs(biome_lookup) do
|
|
local matches_height = (not biome.min_height or height >= biome.min_height)
|
|
and (not biome.max_height or height <= biome.max_height);
|
|
if biome.name == name and matches_height then
|
|
return util.get_clamped(biome.textures, detail);
|
|
end
|
|
end
|
|
|
|
return nil;
|
|
end,
|
|
};
|