Go to file
routars dcdeb2a032 fix out off bound error in color calculation 2020-05-03 21:24:59 +03:00
textures Readme fixes, renamed demo textures for conventions 2020-03-22 16:53:11 +02:00
thirdparty/colorise-lua #1 added clouds support 2018-04-14 16:15:16 +03:00
.gitignore Added support for new minetest sky api features (sky_colors, sun, moon, etc) 2020-03-22 16:34:41 +02:00
LICENSE Added support for new minetest sky api features (sky_colors, sun, moon, etc) 2020-03-22 16:34:41 +02:00
README.md Readme fixes, renamed demo textures for conventions 2020-03-22 16:55:51 +02:00
api.lua Added support for new minetest sky api features (sky_colors, sun, moon, etc) 2020-03-22 16:34:41 +02:00
core.lua fix out off bound error in color calculation 2020-05-03 21:24:59 +03:00
demo.lua fix out off bound error in color calculation 2020-05-03 21:24:59 +03:00
init.lua demo fix: disable sunset from sunless sky (demo 1) 2020-04-22 18:35:29 +03:00

README.md

Skylayer

Minetest utility mod to help manage sky transitions. Mod includes the smooth transition between users given base sky colors (for plain sky type). Tracks multiple sky definitions and display the latest one. Each player has own list of sky layers.

Data Structures

Skylayer mod related data structures explained.

ColorSpec - a table of color value (0..255) in format {r, g, b}, e.g.:

{r=68, g=34, b=153}

GradientSpec - an array of ColorSpec that defines gradient points, e.g.:

 {{r=68, g=34, b=153}, {r=68, g=68, b=221}}

GradientSky - a table with parameter names matching original minetest lua api sky_color table parameters. Main difference is that values are GradientSpec type:

gradient_sky = {
    day_sky = GradientSpec,
    day_horizon = GradientSpec,
    dawn_sky = GradientSpec,
    dawn_horizon = GradientSpec,
    night_sky = GradientSpec,
    night_horizon = GradientSpec,
    indoors = GradientSpec,
    fog_sun_tint = GradientSpec,
    fog_moon_tint = GradientSpec,
}

SkyData - a table with properties used for directly for set_sky with additional skylayer mod properties for gradient support.

sky_data = {
    -- same properties as set_sky api:
    base_color = ..,
    type = ..,
    textures = ..,
    clouds = ..,
    sky_color = ..,

    -- skylayer-specific properties, if set some of above properties will be overiden: 

    -- overrides base_color property with gradient support.
    gradient_colors = GradientSpec

    -- overrides sky_color properties with gradient support.
    gradient_sky = {
        day_sky = GradientSpec,
        day_horizon = GradientSpec,
        dawn_sky = GradientSpec,
        dawn_horizon = GradientSpec,
        night_sky = GradientSpec,
        night_horizon = GradientSpec,
        indoors = GradientSpec,
        fog_sun_tint = GradientSpec,
        fog_moon_tint = GradientSpec,
    }
}

SunData a table which matches minetest set_sun parameters, no skylayer specifics.

MoonData a table which matches minetest set_moon parameters, no skylayer specifics.

StarsData a table with properties used for directly for set_stars with additional skylayer mod properties for gradient support.

stars_data = {
    -- same set of properties as set_stars api:
    visible = ..,
    count = ..,
    star_color = ..,
    scale = ..,

    -- skylayer-specific properties, if set some of above properties will be overiden: 
    gradient_star_colors = GradientSpec
}

CloundsData a table with properties used for directly for set_clouds with additional skylayer mod properties for gradient support.

clouds_data = {
    -- same set of properties as set_clouds api:
    density = ..,
    color = ..,
    ambient = ..,
    height = ..,
    height = ..,
    thickness = ..,
    speed = ..,

    -- skylayer-specific properties, if set some of above properties will be overiden: 
    gradient_colors = GradientSpec
    gradient_ambient_colors = GradientSpec
}

Usage samples

The Skylayer mod designed to be configured by other mods. See demo.lua for examples and pre-builds commands for quick tests. Demo by default is disabled and can be enabled by uncommenting file include inside init.lua.

Plain color without clouds

    local sl = {}
    sl.name = "plain_without_clouds_sky"
    sl.sky_data = {
        base_color = { r = 0, g = 0, b = 0 },
        clouds = false
    }
    skylayer.add_layer(player_name, sl)

Gradient plain color with clouds

    local sl = {}
    sl.name = "gradient_plain_with_clouds_sky"
    sl.sky_data = {
        gradient_colors = {
            { r = 68, g = 34, b = 153 },
            { r = 59, g = 12, b = 189 },
            { r = 51, g = 17, b = 187 },
            { r = 68, g = 68, b = 221 },
            { r = 17, g = 170, b = 187 },
            { r = 18, g = 189, b = 185 },
            { r = 34, g = 204, b = 170 },
            { r = 105, g = 208, b = 37 },
            { r = 170, g = 204, b = 34 },
            { r = 208, g = 195, b = 16 },
            { r = 204, g = 187, b = 51 },
            { r = 254, g = 174, b = 45 },
            { r = 255, g = 153, b = 51 },
            { r = 255, g = 102, b = 68 },
            { r = 255, g = 68, b = 34 },
            { r = 255, g = 51, b = 17 },
            { r = 248, g = 12, b = 18 },
            { r = 255, g = 51, b = 17 },
            { r = 255, g = 68, b = 34 },
            { r = 255, g = 102, b = 68 },
            { r = 255, g = 153, b = 51 },
            { r = 254, g = 174, b = 45 },
            { r = 204, g = 187, b = 51 },
            { r = 208, g = 195, b = 16 },
            { r = 170, g = 204, b = 34 },
            { r = 105, g = 208, b = 37 },
            { r = 34, g = 204, b = 170 },
            { r = 18, g = 189, b = 185 },
            { r = 17, g = 170, b = 187 },
            { r = 68, g = 68, b = 221 },
            { r = 51, g = 17, b = 187 },
            { r = 59, g = 12, b = 189 }
        }
    }
    sl.clouds_data = {
        gradient_colors = {
            { r = 34, g = 204, b = 170 },
            { r = 105, g = 208, b = 37 },
            { r = 170, g = 204, b = 34 },
            { r = 208, g = 195, b = 16 },
            { r = 204, g = 187, b = 51 },
            { r = 254, g = 174, b = 45 },
            { r = 255, g = 68, b = 34 },
            { r = 255, g = 102, b = 68 },
            { r = 255, g = 153, b = 51 },
            { r = 254, g = 174, b = 45 },
            { r = 59, g = 12, b = 189 }
        },
        speed = { x = 110, z = -400 }
    }
    sl.sun_data = {
        visible = false
    }
    sl.moon_data = {
        visible = false
    }
    skylayer.add_layer(player_name, sl)

Gradient plain sky colors

    local sl = {}
    sl.name = "gradient_plain_sky_colors_with_defaults_sky"
    sl.sky_data = {
        gradient_sky = {
            day_sky = {
                { r = 100, g = 0, b = 6},
                { r = 6, g = 100, b = 0},
                { r = 0, g = 6, b = 100}
            },
            day_horizon = {
                { r = 100, g = 56, b = 0},
                { r = 42, g = 100, b = 0},
                { r = 92, g = 100, b = 0}
            },
            night_sky = {
                { r = 0, g = 255, b = 87},
                { r = 250, g = 187, b = 100},
                { r = 255, g = 82, b = 0}
            },
            night_horizon = {
                { r = 87, g = 100, b = 0},
                { r = 0, g = 87, b = 100},
                { r = 100, g = 0, b = 87}
            },
        }
    }
    skylayer.add_layer(player_name, sl)

Media

Textures used for demo is all created by me with public domain (CC0):

  • skylayer_demo_cold_moon.png
  • skylayer_demo_hot_sun.png
  • skylayer_demo_stars_sky.png