Add events
parent
eb7fd3cb9e
commit
76f15ea1bd
149
biome.lua
149
biome.lua
|
@ -1,57 +1,16 @@
|
|||
-- Functions and data related to the biome mode
|
||||
|
||||
skygen.biome_names = {
|
||||
"cold_desert",
|
||||
"cold_desert_under",
|
||||
"cold_desert_ocean",
|
||||
"desert",
|
||||
"desert_ocean",
|
||||
"desert_under",
|
||||
"taiga",
|
||||
"taiga_ocean",
|
||||
"taiga_under",
|
||||
"snowy_grassland",
|
||||
"snowy_grassland_under",
|
||||
"snowy_grassland_ocean",
|
||||
"grassland",
|
||||
"grassland_ocean",
|
||||
"grassland_dunes",
|
||||
"grassland_under",
|
||||
"coniferous_forest",
|
||||
"coniferous_forest_dunes",
|
||||
"coniferous_forest_ocean",
|
||||
"coniferous_forest_under",
|
||||
"deciduous_forest",
|
||||
"deciduous_forest_ocean",
|
||||
"deciduous_forest_under",
|
||||
"deciduous_forest_shore",
|
||||
"rainforest",
|
||||
"rainforest_ocean",
|
||||
"rainforest_swamp",
|
||||
"rainforest_under",
|
||||
"icesheet",
|
||||
"icesheet_ocean",
|
||||
"icesheet_under",
|
||||
"tundra",
|
||||
"tundra_highland",
|
||||
"tundra_beach",
|
||||
"tundra_ocean",
|
||||
"tundra_under",
|
||||
"sandstone_desert",
|
||||
"sandstone_desert_ocean",
|
||||
"sandstone_desert_under",
|
||||
"savanna",
|
||||
"savanna_shore",
|
||||
"savanna_ocean",
|
||||
"savanna_under"
|
||||
}
|
||||
-- Functions related to the biome mode
|
||||
|
||||
skygen.previous_biome = {}
|
||||
|
||||
skygen.transition_frames = 16
|
||||
|
||||
skygen.set_sky = function(player, biome_name)
|
||||
local base_values = skygen.biomes[biome_name].colors
|
||||
local base_values = {}
|
||||
if skygen.event == "none" then
|
||||
base_values = skygen.biomes[biome_name].colors
|
||||
else
|
||||
base_values = skygen.biomes[biome_name].event_colors
|
||||
end
|
||||
player:set_sky({
|
||||
type = "regular",
|
||||
sky_color = {
|
||||
|
@ -72,8 +31,13 @@ end
|
|||
skygen.init_transition = function(player, prev_biome_name, biome_name)
|
||||
skygen.sky_state[player:get_player_name()] = "transition"
|
||||
local base_colors = {}
|
||||
base_colors[1] = skygen.biomes[prev_biome_name].colors[3] -- Sun tint
|
||||
base_colors[2] = skygen.biomes[prev_biome_name].colors[4] -- Moon tint
|
||||
if skygen.event == "none" then
|
||||
base_colors[1] = skygen.biomes[prev_biome_name].colors[3] -- Sun tint
|
||||
base_colors[2] = skygen.biomes[prev_biome_name].colors[4] -- Moon tint
|
||||
else
|
||||
base_colors[1] = skygen.biomes[prev_biome_name].event_colors[3] -- Sun tint
|
||||
base_colors[2] = skygen.biomes[prev_biome_name].event_colors[4] -- Moon tint
|
||||
end
|
||||
local base_params = {}
|
||||
base_params[1] = minetest.registered_biomes[prev_biome_name].heat_point
|
||||
base_params[2] = minetest.registered_biomes[prev_biome_name].humidity_point
|
||||
|
@ -99,16 +63,34 @@ skygen.transition = function(player, base_colors, base_params, color_diffs, para
|
|||
end
|
||||
local sun = base_colors[1]
|
||||
local moon = base_colors[2]
|
||||
local cloud_color = {}
|
||||
if skygen.event == "none" then
|
||||
cloud_color = {r = 255, g = 255, b = 255, a = 255 * humidity}
|
||||
else
|
||||
local colorset = skygen.event_data[skygen.event].color_cloud
|
||||
cloud_color = {r = colorset[1], g = colorset[2], b = colorset[3], a = 255 * humidity}
|
||||
end
|
||||
player:set_clouds({
|
||||
density = humidity/1.5,
|
||||
color = {r = 255, g = 255, b = 255, a = 255 * humidity},
|
||||
color = cloud_color,
|
||||
thickness = humidity * 80
|
||||
})
|
||||
local sun_texture
|
||||
local moon_texture
|
||||
if skygen.event ~= "none" then
|
||||
sun_texture = skygen.event_data[skygen.event].sun_texture
|
||||
moon_texture = skygen.event_data[skygen.event].moon_texture
|
||||
else
|
||||
sun_texture = "sun.png"
|
||||
moon_texture = "moon.png"
|
||||
end
|
||||
player:set_sun({
|
||||
scale = ((heat/255) + 0.1)*2
|
||||
texture = sun_texture,
|
||||
scale = ((heat/255) + 0.1)*2,
|
||||
})
|
||||
player:set_moon({
|
||||
scale = ((heat/255) + 0.1)*4
|
||||
texture = moon_texture,
|
||||
scale = ((heat/255) + 0.1)*4,
|
||||
})
|
||||
if skygen.colorize_stars == true then
|
||||
player:set_stars({
|
||||
|
@ -116,9 +98,9 @@ skygen.transition = function(player, base_colors, base_params, color_diffs, para
|
|||
count = (1.5 - humidity) * 4 * 10
|
||||
})
|
||||
else
|
||||
player:set_stars(
|
||||
player:set_stars({
|
||||
count = (1.5 - humidity) * 4 * 10
|
||||
)
|
||||
})
|
||||
end
|
||||
minetest.after(1 / skygen.transition_frames, function()
|
||||
skygen.transition(player, base_colors, base_params, color_diffs, param_diffs, progress, biome)
|
||||
|
@ -137,20 +119,43 @@ skygen.colorize = function(color, colorizer, amount)
|
|||
end
|
||||
|
||||
skygen.set_all = function(player, biome_name) -- For initial case
|
||||
sun = skygen.biomes[biome_name].colors[3] -- Sun tint
|
||||
moon = skygen.biomes[biome_name].colors[4] -- Moon tint
|
||||
if skygen.event == "none" then
|
||||
sun = skygen.biomes[biome_name].colors[3] -- Sun tint
|
||||
moon = skygen.biomes[biome_name].colors[4] -- Moon tint
|
||||
else
|
||||
sun = skygen.biomes[biome_name].event_colors[3] -- Sun tint
|
||||
moon = skygen.biomes[biome_name].event_colors[4] -- Moon tint
|
||||
end
|
||||
heat = minetest.registered_biomes[biome_name].heat_point*2.55
|
||||
humidity = minetest.registered_biomes[biome_name].humidity_point/100
|
||||
local cloud_color = {}
|
||||
if skygen.event == "none" then
|
||||
cloud_color = {r = 255, g = 255, b = 255, a = 255 * humidity}
|
||||
else
|
||||
local colorset = skygen.event_data[skygen.event].color_cloud
|
||||
cloud_color = {r = colorset[1], g = colorset[2], b = colorset[3], a = 255 * humidity}
|
||||
end
|
||||
player:set_clouds({
|
||||
density = humidity/1.5,
|
||||
color = {r = 255, g = 255, b = 255, a = 255 * humidity},
|
||||
color = cloud_color,
|
||||
thickness = humidity * 80
|
||||
})
|
||||
local sun_texture
|
||||
local moon_texture
|
||||
if skygen.event ~= "none" then
|
||||
sun_texture = skygen.event_data[skygen.event].sun_texture
|
||||
moon_texture = skygen.event_data[skygen.event].moon_texture
|
||||
else
|
||||
sun_texture = "sun.png"
|
||||
moon_texture = "moon.png"
|
||||
end
|
||||
player:set_sun({
|
||||
scale = ((heat/255) + 0.1)*2
|
||||
texture = sun_texture,
|
||||
scale = ((heat/255) + 0.1)*2,
|
||||
})
|
||||
player:set_moon({
|
||||
scale = ((heat/255) + 0.1)*4
|
||||
texture = moon_texture,
|
||||
scale = ((heat/255) + 0.1)*4,
|
||||
})
|
||||
if skygen.colorize_stars == true then
|
||||
player:set_stars({
|
||||
|
@ -165,9 +170,16 @@ end
|
|||
skygen.set_clouds = function(player, biome_name) -- Cause minetest sets them to default every now and then
|
||||
local heat = minetest.registered_biomes[biome_name].heat_point*2.55
|
||||
local humidity = minetest.registered_biomes[biome_name].humidity_point/100
|
||||
local cloud_color = {}
|
||||
if skygen.event == "none" then
|
||||
cloud_color = {r = 255, g = 255, b = 255, a = 255 * humidity}
|
||||
else
|
||||
local colorset = skygen.event_data[skygen.event].color_cloud
|
||||
cloud_color = {r = colorset[1], g = colorset[2], b = colorset[3], a = 255 * humidity}
|
||||
end
|
||||
player:set_clouds({
|
||||
density = humidity/1.5,
|
||||
color = {r = 255, g = 255, b = 255, a = 255 * humidity},
|
||||
color = cloud_color,
|
||||
thickness = humidity * 80
|
||||
})
|
||||
end
|
||||
|
@ -185,11 +197,18 @@ end
|
|||
|
||||
skygen.get_color_diffs = function(prev_biome_name, biome_name)
|
||||
local prev_colorset = {}
|
||||
prev_colorset[1] = skygen.biomes[prev_biome_name].colors[3] -- Sun tint
|
||||
prev_colorset[2] = skygen.biomes[prev_biome_name].colors[4] -- Moon tint
|
||||
local colorset = {}
|
||||
colorset[1] = skygen.biomes[biome_name].colors[3] -- Sun tint
|
||||
colorset[2] = skygen.biomes[biome_name].colors[4] -- Moon tint
|
||||
if skygen.event == "none" then
|
||||
prev_colorset[1] = skygen.biomes[prev_biome_name].colors[3] -- Sun tint
|
||||
prev_colorset[2] = skygen.biomes[prev_biome_name].colors[4] -- Moon tint
|
||||
colorset[1] = skygen.biomes[biome_name].colors[3] -- Sun tint
|
||||
colorset[2] = skygen.biomes[biome_name].colors[4] -- Moon tint
|
||||
else
|
||||
prev_colorset[1] = skygen.biomes[prev_biome_name].event_colors[3] -- Sun tint
|
||||
prev_colorset[2] = skygen.biomes[prev_biome_name].event_colors[4] -- Moon tint
|
||||
colorset[1] = skygen.biomes[biome_name].event_colors[3] -- Sun tint
|
||||
colorset[2] = skygen.biomes[biome_name].event_colors[4] -- Moon tint
|
||||
end
|
||||
local result = {{}, {}}
|
||||
for k=1,2 do
|
||||
for i=1,3 do
|
||||
|
|
46
colors.lua
46
colors.lua
|
@ -5,6 +5,52 @@
|
|||
-- Stars are colorized using the sun tint as well
|
||||
-- Clouds are changed in three different functions already and colorizing them would be a bit more expensive due to the required transition functions
|
||||
|
||||
skygen.biome_names = {
|
||||
"cold_desert",
|
||||
"cold_desert_under",
|
||||
"cold_desert_ocean",
|
||||
"desert",
|
||||
"desert_ocean",
|
||||
"desert_under",
|
||||
"taiga",
|
||||
"taiga_ocean",
|
||||
"taiga_under",
|
||||
"snowy_grassland",
|
||||
"snowy_grassland_under",
|
||||
"snowy_grassland_ocean",
|
||||
"grassland",
|
||||
"grassland_ocean",
|
||||
"grassland_dunes",
|
||||
"grassland_under",
|
||||
"coniferous_forest",
|
||||
"coniferous_forest_dunes",
|
||||
"coniferous_forest_ocean",
|
||||
"coniferous_forest_under",
|
||||
"deciduous_forest",
|
||||
"deciduous_forest_ocean",
|
||||
"deciduous_forest_under",
|
||||
"deciduous_forest_shore",
|
||||
"rainforest",
|
||||
"rainforest_ocean",
|
||||
"rainforest_swamp",
|
||||
"rainforest_under",
|
||||
"icesheet",
|
||||
"icesheet_ocean",
|
||||
"icesheet_under",
|
||||
"tundra",
|
||||
"tundra_highland",
|
||||
"tundra_beach",
|
||||
"tundra_ocean",
|
||||
"tundra_under",
|
||||
"sandstone_desert",
|
||||
"sandstone_desert_ocean",
|
||||
"sandstone_desert_under",
|
||||
"savanna",
|
||||
"savanna_shore",
|
||||
"savanna_ocean",
|
||||
"savanna_under"
|
||||
}
|
||||
|
||||
skygen.biomes = {
|
||||
cold_desert = {
|
||||
name = "Cold Desert",
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
-- Event data here
|
||||
|
||||
skygen.event_data.test = {
|
||||
description = "Test",
|
||||
moon = "moonfall_moon.png",
|
||||
sun = "sun.png^[colorize:#FFFFFF",
|
||||
color = {0, 255, 0},
|
||||
color_night = {0, 255, 0},
|
||||
color_cloud = {255, 0, 0},
|
||||
color_sun = {0, 255, 0},
|
||||
color_moon = {0, 255, 0},
|
||||
}
|
81
init.lua
81
init.lua
|
@ -6,10 +6,15 @@ skygen.save_timer = 0
|
|||
skygen.save_interval = 1000
|
||||
skygen.sky_state = {}
|
||||
skygen.active = true
|
||||
skygen.event = "none"
|
||||
|
||||
skygen.events = {"test"} -- Add event names here
|
||||
|
||||
skygen.skybox_names = {"test_sky"} -- Add skybox names here
|
||||
skygen.skyboxes = {}
|
||||
skygen.event_data = {}
|
||||
skygen.save_file = minetest.get_worldpath() .. "/skygen"
|
||||
skygen.event_save_file = minetest.get_worldpath() .. "/skygen_event"
|
||||
|
||||
skygen.colorize_stars = true
|
||||
|
||||
|
@ -18,12 +23,20 @@ local skybox_path = minetest.get_modpath("skygen") .. "/skyboxes"
|
|||
dofile(path.."/colors.lua")
|
||||
dofile(path.."/biome.lua")
|
||||
dofile(path.."/skybox.lua")
|
||||
dofile(path.."/events.lua")
|
||||
|
||||
for i=1,#skygen.skybox_names do
|
||||
dofile(skybox_path .. "/" .. skygen.skybox_names[i] .. "/skydef.lua")
|
||||
end
|
||||
|
||||
function skygen.load_saves()
|
||||
local event_input = io.open(skygen.event_save_file, "r")
|
||||
if not event_input then
|
||||
return
|
||||
else
|
||||
skygen.event = event_input:read("*a")
|
||||
end
|
||||
event_input:close()
|
||||
local input = io.open(skygen.save_file, "r")
|
||||
if not input then
|
||||
return
|
||||
|
@ -38,7 +51,6 @@ function skygen.load_saves()
|
|||
skygen.sky_state[name] = state
|
||||
skygen.skybox_status[name] = skybox
|
||||
end
|
||||
print(dump(skygen.sky_state))
|
||||
input:close()
|
||||
end
|
||||
|
||||
|
@ -61,9 +73,21 @@ function skygen.save()
|
|||
return true
|
||||
end
|
||||
|
||||
function skygen.event_save()
|
||||
local data = {}
|
||||
local output = io.open(skygen.event_save_file, "w")
|
||||
if output then
|
||||
output:write(skygen.event)
|
||||
io.close(output)
|
||||
return true
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
skygen.load_saves()
|
||||
minetest.register_on_shutdown(function()
|
||||
skygen.save()
|
||||
skygen.event_save()
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
|
@ -118,11 +142,34 @@ minetest.register_globalstep(function()
|
|||
biome_colors[7] = skygen.colorize(biome_colors[1], biome_colors[4], 0.75) -- Night
|
||||
biome_colors[8] = skygen.colorize(biome_colors[2], biome_colors[4], 0.75) -- Night Horizon
|
||||
end
|
||||
skygen.sky_globalstep(players)
|
||||
if skygen.event == "none" then
|
||||
skygen.sky_globalstep(players)
|
||||
else
|
||||
for i=1,#skygen.events do
|
||||
if skygen.event == skygen.events[i] then
|
||||
for i=1, #skygen.biome_names do
|
||||
local biome_name = skygen.biome_names[i]
|
||||
local biome_colors = skygen.biomes[biome_name].colors
|
||||
local event_biome_colors = {}
|
||||
event_biome_colors[1] = skygen.colorize(biome_colors[1], skygen.event_data[skygen.event].color, 0.75) -- Day
|
||||
event_biome_colors[2] = skygen.colorize(biome_colors[2], skygen.event_data[skygen.event].color, 0.75) -- Day Horizon
|
||||
event_biome_colors[3] = skygen.colorize(biome_colors[3], skygen.event_data[skygen.event].color_sun, 0.75) -- Sun
|
||||
event_biome_colors[4] = skygen.colorize(biome_colors[4], skygen.event_data[skygen.event].color_moon, 0.75) -- Moon
|
||||
event_biome_colors[5] = skygen.colorize(biome_colors[5], skygen.event_data[skygen.event].color_sun, 0.75) -- Dawn
|
||||
event_biome_colors[6] = skygen.colorize(biome_colors[6], skygen.event_data[skygen.event].color_sun, 0.75) -- Dawn Horizon
|
||||
event_biome_colors[7] = skygen.colorize(biome_colors[7], skygen.event_data[skygen.event].color_night, 0.75) -- Night
|
||||
event_biome_colors[8] = skygen.colorize(biome_colors[8], skygen.event_data[skygen.event].color_night, 0.75) -- Night Horizon
|
||||
skygen.biomes[biome_name].event_colors = event_biome_colors
|
||||
end
|
||||
end
|
||||
end
|
||||
skygen.sky_globalstep(players)
|
||||
end
|
||||
else
|
||||
skygen.sky_globalstep(players)
|
||||
if (skygen.save_timer > skygen.save_interval) then
|
||||
skygen.save()
|
||||
skygen.event_save()
|
||||
skygen.save_timer = 0
|
||||
else
|
||||
skygen.save_timer = skygen.save_timer + 1
|
||||
|
@ -153,16 +200,40 @@ minetest.register_chatcommand("skygen", {
|
|||
end
|
||||
if parameters[1] == "off" then
|
||||
skygen.deactivate(name)
|
||||
minetest.chat_send_player("The sky is now set to be Minetest default")
|
||||
minetest.chat_send_player(name, "The sky is now set to be Minetest default")
|
||||
elseif parameters[1] == "biome" then
|
||||
skygen.biome_mode(name)
|
||||
minetest.chat_send_player("The sky is now set to be biome-adaptive")
|
||||
minetest.chat_send_player(name, "The sky is now set to be biome-adaptive")
|
||||
elseif parameters[1] == "skybox" then
|
||||
for i=1, #skygen.skybox_names do
|
||||
if skygen.skybox_names[i] == parameters[2] then
|
||||
local sky_description = skygen.skyboxes[parameters[2]].description
|
||||
skygen.set_skybox(minetest.get_player_by_name(name), parameters[2])
|
||||
minetest.chat_send_player("The sky is now set to be a skybox, " .. sky_description)
|
||||
minetest.chat_send_player(name, "The sky is now set to be a skybox, " .. sky_description)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("skygen_event", {
|
||||
params = "<event_name>",
|
||||
description = "Initiate an event",
|
||||
func = function(name, param)
|
||||
if param == "deactivate" then
|
||||
if skygen.event ~= "none" then
|
||||
local previous_event = skygen.event_data[skygen.event].description
|
||||
minetest.chat_send_all("The " .. previous_event .. " has ended!")
|
||||
skygen.event = "none"
|
||||
skygen.start = 1
|
||||
end
|
||||
else
|
||||
for i=1,#skygen.events do
|
||||
if skygen.events[i] == param then
|
||||
local new_event = skygen.event_data[param].description
|
||||
skygen.event = param
|
||||
skygen.start = 1
|
||||
minetest.chat_send_all("The " .. new_event .. " has arrived!")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 5.4 KiB |
Loading…
Reference in New Issue