4 Copyright (C) 2017 - Auke Kok <sofar@foo-projects.org>
6 "skybox" is free software; you can redistribute it and/or modify
7 it under the terms of the GNU Lesser General Public License as
8 published by the Free Software Foundation; either version 2.1
9 of the license, or (at your option) any later version.
13 local S
= minetest
.get_translator("skybox")
15 -- Builtin sky box textures and color/shadings, clouds
19 {"DarkStormy", "#1f2226", 0.5, { density
= 0.5, color
= "#aaaaaae0", ambient
= "#000000",
20 height
= 96, thickness
= 32, speed
= {x
= 6, y
= -6},}},
21 {"CloudyLightRays", "#5f5f5e", 0.9, { density
= 0.4, color
= "#efe3d5d0", ambient
= "#000000",
22 height
= 104, thickness
= 24, speed
= {x
= 4, y
= 0},}},
23 {"FullMoon", "#24292c", 0.2, { density
= 0.25, color
= "#ffffff80", ambient
= "#404040",
24 height
= 140, thickness
= 8, speed
= {x
= -2, y
= 2},}},
25 {"SunSet", "#72624d", 0.4, { density
= 0.2, color
= "#f8d8e8e0", ambient
= "#000000",
26 height
= 120, thickness
= 16, speed
= {x
= 0, y
= -2},}},
27 {"ThickCloudsWater", "#a57850", 0.8, { density
= 0.35, color
= "#ebe4ddfb", ambient
= "#000000",
28 height
= 104, thickness
= 32, speed
= {x
= 4, y
= 3},}},
29 {"TropicalSunnyDay", "#f1f4ee", 1.0, { density
= 0.25, color
= "#fffffffb", ambient
= "#000000",
30 height
= 120, thickness
= 8, speed
= {x
= -2, y
= 0},}},
39 skybox
.set
= function(player
, number)
46 local sky
= skies
[number]
50 player
:override_day_night_ratio(sky
[3])
54 sky
[1] .. "Front.jpg",
57 sky
[1] .. "Right.jpg",
59 if player
.get_sky_color
~= nil then
67 player
:set_sky(sky
[2], "skybox", textures
, true)
69 player
:set_clouds(sky
[4])
70 -- FIXME extend list with 5/6/7 for these instead
71 player
:set_sun({visible
= false, sunrise_visible
= false})
72 player
:set_stars({visible
= false})
73 player
:set_moon({visible
= false})
77 skybox
.clear
= function(player
)
81 player
:override_day_night_ratio(nil)
82 if player
.get_sky_color
~= nil then
83 player
:set_sky({base_color
= "white", type = "regular"})
85 player
:set_sky("white", "regular")
93 speed
= {x
= 0, y
= -2},
95 player
:set_sun({visible
= false, sunrise_visible
= false})
96 player
:set_stars({visible
= false})
97 player
:set_moon({visible
= false})
100 minetest
.register_privilege("skybox", {
101 description
= S("Change sky box for yourself"),
104 minetest
.register_chatcommand("skybox", {
105 params
= S("<skybox> or <number> or \"off\" or empty to list skyboxes"),
106 description
= S("Change your sky box set"),
107 privs
= {skybox
= true},
108 func
= function(name
, param
)
109 local player
= minetest
.get_player_by_name(name
)
113 if param
== nil or param
== "" then
114 minetest
.chat_send_player(name
, S("Available sky boxes:"))
115 for _
, v
in ipairs(skies
) do
116 minetest
.chat_send_player(name
, v
[1])
119 elseif tonumber(param
) ~= nil and tonumber(param
) >= 1 and tonumber(param
) <= #skies
then
120 skybox
.set(player
, tonumber(param
))
122 elseif param
== "off" or param
== "0" then
126 for k
, v
in ipairs(skies
) do
127 if v
[1] == param
then
128 skybox
.set(player
, k
)
132 minetest
.chat_send_player(name
, S("Could not find that sky box."))
136 minetest
.register_node("skybox:skybox", {
137 description
= S("Skybox changer").."\n"..S("Left/right-click to change the skybox"),
139 "ThickCloudsWaterUp.jpg^[resize:16x16",
140 "ThickCloudsWaterDown.jpg^[resize:16x16",
141 "ThickCloudsWaterFront.jpg^[resize:16x16",
142 "ThickCloudsWaterBack.jpg^[resize:16x16",
143 "ThickCloudsWaterLeft.jpg^[resize:16x16",
144 "ThickCloudsWaterRight.jpg^[resize:16x16",
146 groups
= {node
= 1, unbreakable
= 1, trigger
= 1},
147 sounds
= sounds
.wood
,
148 on_punch
= function(pos
, node
, puncher
, pointed_thing
)
149 local name
= puncher
:get_player_name()
150 if not puncher
or not boxes
.players_editing_boxes
[name
] then
153 local meta
= minetest
.get_meta(pos
)
154 local s
= meta
:get_int("skybox") + 1
158 minetest
.chat_send_player(name
, S("skybox = @1", s
))
159 meta
:set_int("skybox", s
)
161 on_rightclick
= function(pos
, node
, puncher
, itemstack
, pointed_thing
)
162 local name
= puncher
:get_player_name()
163 if not puncher
or not boxes
.players_editing_boxes
[name
] then
166 local meta
= minetest
.get_meta(pos
)
167 local s
= meta
:get_int("skybox") - 1
171 minetest
.chat_send_player(name
, S("skybox = @1", s
))
172 meta
:set_int("skybox", s
)
174 on_trigger
= function(pos
)
175 local box
= boxes
.find_box(pos
)
179 local p
= minetest
.get_player_by_name(box
.name
)
183 local meta
= minetest
.get_meta(pos
)
184 local s
= meta
:get_int("skybox")
187 on_untrigger
= function(pos
)
188 local box
= boxes
.find_box(pos
)
192 local p
= minetest
.get_player_by_name(box
.name
)
196 skybox
.set(p
, box
.skybox
or 0)
198 on_reveal
= function(name
, pos
)
199 local meta
= minetest
.get_meta(pos
)
200 local s
= meta
:get_int("skybox")
205 minetest
.chat_send_player(name
, minetest
.colorize( "#4444ff",
206 S("> skybox = @1", t
)))