diff --git a/.luacheckrc b/.luacheckrc index fd88f49..1363d30 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -1,4 +1,8 @@ +globals = { + "epic_skybox" +} + read_globals = { -- Stdlib string = {fields = {"split"}}, @@ -10,5 +14,5 @@ read_globals = { "dump", "VoxelArea", -- deps - "epic" + "epic", "screwdriver" } diff --git a/alias.lua b/alias.lua new file mode 100644 index 0000000..c45888e --- /dev/null +++ b/alias.lua @@ -0,0 +1,2 @@ + +minetest.register_alias("epic:setskybox", "epic_skybox:set") diff --git a/chatcommands.lua b/chatcommands.lua new file mode 100644 index 0000000..1b4fe0c --- /dev/null +++ b/chatcommands.lua @@ -0,0 +1,13 @@ + + +minetest.register_chatcommand("skybox_list", { + description = "Lists all available skyboxes", + func = function() + local list = "" + for _, skyboxdef in ipairs(epic_skybox.list) do + list = list .. skyboxdef.name .. "," + end + + return true, list + end +}) diff --git a/epic_block.lua b/epic_block.lua new file mode 100644 index 0000000..cff7019 --- /dev/null +++ b/epic_block.lua @@ -0,0 +1,81 @@ + + +local update_formspec = function(meta) + local skyboxname = meta:get_string("skyboxname") + + meta:set_string("infotext", "Set skybox block: name=" .. skyboxname) + + local selected = 1 + local list = "" + for i,skyboxdef in ipairs(epic_skybox.list) do + if skyboxdef.name == skyboxname then + selected = i + end + + list = list .. minetest.formspec_escape(skyboxdef.name) + if i < #epic_skybox.list then + -- not end of list + list = list .. "," + end + end + + meta:set_string("formspec", "size[8,6;]" .. + "textlist[0,0.1;8,5;skyboxname;" .. list .. ";" .. selected .. "]" .. + + "button_exit[0.1,5.5;8,1;save;Save]" .. + "") +end + +minetest.register_node("epic_skybox:set", { + description = "Epic set skybox block: sets the skybox for the player", + tiles = { + "epic_node_bg.png", + "epic_node_bg.png", + "epic_node_bg.png", + "epic_node_bg.png", + "epic_node_bg.png", + "epic_node_bg.png^epic_sky.png", + }, + paramtype2 = "facedir", + groups = {cracky=3,oddly_breakable_by_hand=3,epic=1}, + on_rotate = screwdriver.rotate_simple, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("skyboxname", "") + update_formspec(meta, pos) + end, + + on_receive_fields = function(pos, _, fields, sender) + if not sender or minetest.is_protected(pos, sender:get_player_name()) then + -- not allowed + return + end + + local meta = minetest.get_meta(pos) + + if fields.skyboxname then + local parts = fields.skyboxname:split(":") + if parts[1] == "CHG" then + local selected_box = tonumber(parts[2]) + local skyboxdef = epic_skybox.list[selected_box] + if skyboxdef and skyboxdef.name then + meta:set_string("skyboxname", skyboxdef.name) + end + update_formspec(meta, pos) + end + end + end, + + epic = { + on_enter = function(_, meta, player, ctx) + local skyboxname = meta:get_string("skyboxname") + for _, skyboxdef in ipairs(epic_skybox.list) do + if skyboxdef.name == skyboxname then + epic.set_skybox(player, skyboxdef) + end + end + ctx.next() + end + } +}) diff --git a/functions.lua b/functions.lua new file mode 100644 index 0000000..8456c61 --- /dev/null +++ b/functions.lua @@ -0,0 +1,12 @@ + + +-- sets a players skybox +function epic_skybox.set_skybox(player, skyboxdef) + if skyboxdef.textures then + player:set_sky({r=0, g=0, b=0}, "skybox", skyboxdef.textures) + elseif skyboxdef.color then + player:set_sky(skyboxdef.color, "plain", {}) + else + player:set_sky({r=0, g=0, b=0}, "regular", {}) + end +end diff --git a/init.lua b/init.lua index c326db5..e21d4e0 100644 --- a/init.lua +++ b/init.lua @@ -1,110 +1,14 @@ -epic.register_skybox({ - name = "Mars", - textures = { - "mars_up.jpg^[transformR270", - "mars_dn.jpg^[transformR90", - "mars_ft.jpg", - "mars_bk.jpg", - "mars_lf.jpg", - "mars_rt.jpg" - } -}) +epic_skybox = { + -- list + list = {} +} -epic.register_skybox({ - name = "Space with Earth", - textures = { - "space_sky.png", - "space_sky2.png", - "space_sky.png", - "space_sky.png", - "space_sky.png", - "space_sky.png" - } -}) +local MP = minetest.get_modpath("epic_skybox") -epic.register_skybox({ - name = "Moon", - textures = { - "space_sky.png", - "space_sky.png", - "space_sky.png", - "space_sky.png", - "space_sky.png", - "space_sky.png" - } -}) - -epic.register_skybox({ - name = "Deepspace", - textures = { - "sky_pos_z.png", - "sky_neg_z.png^[transformR180", - "sky_neg_y.png^[transformR270", - "sky_pos_y.png^[transformR270", - "sky_pos_x.png^[transformR270", - "sky_neg_x.png^[transformR90" - } -}) - - -epic.register_skybox({ - name = "Asteroids", - textures = { - "asteroids_up.jpg^[transformR270", - "asteroids_dn.jpg^[transformR90", - "asteroids_ft.jpg", - "asteroids_bk.jpg", - "asteroids_lf.jpg", - "asteroids_rt.jpg" - } -}) - -epic.register_skybox({ - name = "Nebulae", - textures = { - "nebulae_up.jpg^[transformR270", - "nebulae_dn.jpg^[transformR90", - "nebulae_ft.jpg", - "nebulae_bk.jpg", - "nebulae_lf.jpg", - "nebulae_rt.jpg" - } -}) - -epic.register_skybox({ - name = "Heaven", - textures = { - "heaven_up.jpg^[transformR270", - "heaven_dn.jpg^[transformR90", - "heaven_ft.jpg", - "heaven_bk.jpg", - "heaven_lf.jpg", - "heaven_rt.jpg" - } -}) - - -epic.register_skybox({ - name = "Arid 2", - textures = { - "arid2_up.jpg^[transformR270", - "arid2_dn.jpg^[transformR90", - "arid2_ft.jpg", - "arid2_bk.jpg", - "arid2_lf.jpg", - "arid2_rt.jpg" - } -}) - -epic.register_skybox({ - name = "Blizzard", - textures = { - "blizzard_up.jpg^[transformR270", - "blizzard_dn.jpg^[transformR90", - "blizzard_ft.jpg", - "blizzard_bk.jpg", - "blizzard_lf.jpg", - "blizzard_rt.jpg" - } -}) +dofile(MP.."/alias.lua") +dofile(MP.."/skyboxes.lua") +dofile(MP.."/functions.lua") +dofile(MP.."/register.lua") +dofile(MP.."/chatcommands.lua") +dofile(MP.."/epic_block.lua") diff --git a/mod.conf b/mod.conf index 5f89bea..7df5b7b 100644 --- a/mod.conf +++ b/mod.conf @@ -1,3 +1,3 @@ name = epic_skybox -description = skyboxes for the epic mod -depends = epic +description = skyboxe features for the epic mod +depends = epic, screwdriver diff --git a/register.lua b/register.lua new file mode 100644 index 0000000..304e9b3 --- /dev/null +++ b/register.lua @@ -0,0 +1,13 @@ + +--[[ +skyboxdef = { + name = "", + color = {r=0, g=0, b=0}, + textures = {} +} +--]] + +-- register a new skybox +epic_skybox.register = function(skyboxdef) + table.insert(epic_skybox.list, skyboxdef) +end diff --git a/skyboxes.lua b/skyboxes.lua new file mode 100644 index 0000000..1e917c8 --- /dev/null +++ b/skyboxes.lua @@ -0,0 +1,139 @@ + + +-- common (plain) skyboxes +epic_skybox.register({ name = "default" }) + +epic_skybox.register({ + name = "Plain Black", + color = {r=0, g=0, b=0} +}) + +epic_skybox.register({ + name = "Plain Red", + color = {r=255, g=0, b=0} +}) + +epic_skybox.register({ + name = "Plain Green", + color = {r=0, g=255, b=0} +}) + +epic_skybox.register({ + name = "Plain Blue", + color = {r=0, g=0, b=255} +}) + +epic_skybox.register({ + name = "Plain White", + color = {r=255, g=255, b=255} +}) + +epic_skybox.register({ + name = "Mars", + textures = { + "mars_up.jpg^[transformR270", + "mars_dn.jpg^[transformR90", + "mars_ft.jpg", + "mars_bk.jpg", + "mars_lf.jpg", + "mars_rt.jpg" + } +}) + +epic_skybox.register({ + name = "Space with Earth", + textures = { + "space_sky.png", + "space_sky2.png", + "space_sky.png", + "space_sky.png", + "space_sky.png", + "space_sky.png" + } +}) + +epic_skybox.register({ + name = "Moon", + textures = { + "space_sky.png", + "space_sky.png", + "space_sky.png", + "space_sky.png", + "space_sky.png", + "space_sky.png" + } +}) + +epic_skybox.register({ + name = "Deepspace", + textures = { + "sky_pos_z.png", + "sky_neg_z.png^[transformR180", + "sky_neg_y.png^[transformR270", + "sky_pos_y.png^[transformR270", + "sky_pos_x.png^[transformR270", + "sky_neg_x.png^[transformR90" + } +}) + + +epic_skybox.register({ + name = "Asteroids", + textures = { + "asteroids_up.jpg^[transformR270", + "asteroids_dn.jpg^[transformR90", + "asteroids_ft.jpg", + "asteroids_bk.jpg", + "asteroids_lf.jpg", + "asteroids_rt.jpg" + } +}) + +epic_skybox.register({ + name = "Nebulae", + textures = { + "nebulae_up.jpg^[transformR270", + "nebulae_dn.jpg^[transformR90", + "nebulae_ft.jpg", + "nebulae_bk.jpg", + "nebulae_lf.jpg", + "nebulae_rt.jpg" + } +}) + +epic_skybox.register({ + name = "Heaven", + textures = { + "heaven_up.jpg^[transformR270", + "heaven_dn.jpg^[transformR90", + "heaven_ft.jpg", + "heaven_bk.jpg", + "heaven_lf.jpg", + "heaven_rt.jpg" + } +}) + + +epic_skybox.register({ + name = "Arid 2", + textures = { + "arid2_up.jpg^[transformR270", + "arid2_dn.jpg^[transformR90", + "arid2_ft.jpg", + "arid2_bk.jpg", + "arid2_lf.jpg", + "arid2_rt.jpg" + } +}) + +epic_skybox.register({ + name = "Blizzard", + textures = { + "blizzard_up.jpg^[transformR270", + "blizzard_dn.jpg^[transformR90", + "blizzard_ft.jpg", + "blizzard_bk.jpg", + "blizzard_lf.jpg", + "blizzard_rt.jpg" + } +})