Add WIP graphics settings form

This commit is contained in:
Wuzzy 2024-08-13 03:43:07 +02:00
parent 900c2eb408
commit 4fac7e52a4
5 changed files with 95 additions and 0 deletions

View File

@ -21,6 +21,7 @@ lzr_globals.MENU_SHIP_STARTBOOK_OFFSET = vector.new(7, 10, 31)
lzr_globals.MENU_SHIP_CUSTOMBOOK_OFFSET = vector.new(8, 10, 31)
lzr_globals.MENU_SHIP_EDITOR_OFFSET = vector.new(13, 10, 31)
lzr_globals.MENU_SHIP_SPEAKER_OFFSET = vector.new(6, 9, 25)
lzr_globals.MENU_SHIP_TELEVISION_OFFSET = vector.new(5, 9, 25)
lzr_globals.MENU_PLAYER_SPAWN_POS = vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET)
lzr_globals.WATER_LEVEL = 0
lzr_globals.SEABED_LEVEL = -1000

View File

@ -1,4 +1,5 @@
local S = minetest.get_translator("lzr_menu")
local FS = function(...) return minetest.formspec_escape(S(...)) end
local SPEAKER_POS = vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_SPEAKER_OFFSET)
@ -8,6 +9,7 @@ local build_ship = function(pos)
minetest.set_node(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_CUSTOMBOOK_OFFSET), {name="lzr_menu:startbook_custom", param2=0})
minetest.set_node(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_EDITOR_OFFSET), {name="lzr_menu:editorbook", param2=3})
minetest.set_node(SPEAKER_POS, {name="lzr_menu:speaker", param2=2})
minetest.set_node(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_TELEVISION_OFFSET), {name="lzr_menu:television", param2=2})
end
local emerge_callback = function(blockpos, action, calls_remaining, param)
@ -238,6 +240,98 @@ lzr_ambience.register_on_ambience_change(function(state)
update_speaker_infotext(SPEAKER_POS)
end)
local graphics_settings_initial_state = {
opaque_lasers = minetest.settings:get_bool("lzr_opaque_lasers", false),
patterned_lasers = minetest.settings:get_bool("lzr_patterned_lasers", false),
}
local graphics_settings_state = table.copy(graphics_settings_initial_state)
local open_graphics_settings = function(player)
local form = "formspec_version[4]size[10,10]"..
"checkbox[1,1;opaque_lasers;"..FS("Opaque lasers")..";"..tostring(graphics_settings_state.opaque_lasers).."]"..
"checkbox[1,2;patterned_lasers;"..FS("Laser color patterns")..";"..tostring(graphics_settings_state.patterned_lasers).."]"..
"tooltip[patterned_lasers;"..FS("If activated, special patterns will be drawn on the lasers, one for each color. Helps to distinguish lasers without relying on color alone").."]"..
"button_exit[1,4;3,1;apply;"..FS("Apply").."]"..
"button_exit[5,4;3,1;cancel;"..FS("Cancel").."]"
minetest.show_formspec(player:get_player_name(), "lzr_menu:graphics_settings", form)
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname == "lzr_menu:graphics_settings" then
if fields.opaque_lasers == "true" then
graphics_settings_state.opaque_lasers = true
elseif fields.opaque_lasers == "false" then
graphics_settings_state.opaque_lasers = false
end
if fields.patterned_lasers == "true" then
graphics_settings_state.patterned_lasers = true
elseif fields.patterned_lasers == "false" then
graphics_settings_state.patterned_lasers = false
end
if fields.quit then
if fields.apply then
if graphics_settings_initial_state.opaque_lasers == graphics_settings_state.opaque_lasers and
graphics_settings_initial_state.patterned_lasers == graphics_settings_state.patterned_lasers then
minetest.log("error", "INO")
-- Nothing has changed: Nothing to do.
return
end
minetest.log("error", "IN")
minetest.settings:set_bool("lzr_opaque_lasers", graphics_settings_state.opaque_lasers)
minetest.settings:set_bool("lzr_patterned_lasers", graphics_settings_state.patterned_lasers)
local form = "formspec_version[4]size[6,3]"..
"label[1,1;"..FS("The game needs to be restarted for the new graphics settings to take effect.").."]"..
"button_exit[1,3;3,1;restart;"..FS("Restart now").."]"..
"button_exit[6,3;3,1;cancel;"..FS("Keep playing").."]"
minetest.show_formspec(player:get_player_name(), "lzr_menu:confirm_restart", form)
else
graphics_settings_state = {
opaque_lasers = tostring(minetest.settings:get_bool("lzr_opaque_lasers", false)),
patterned_lasers = tostring(minetest.settings:get_bool("lzr_patterned_lasers", false)),
}
end
end
elseif formname == "lzr_menu:confirm_restart" then
if fields.restart then
minetest.disconnect_player(player, S("Start the game again for the settings to take effect."))
end
end
end)
local function on_rightclick_television(_, _, player)
open_graphics_settings(player)
end
local function on_punch_television(_, _, player)
open_graphics_settings(player)
end
-- Television to update graphics settings
minetest.register_node("lzr_menu:television", {
description = S("Television"),
tiles = {
"xdecor_television_left.png",
"xdecor_television_left.png",
"xdecor_television_left.png",
"xdecor_television_left.png",
"xdecor_television_back.png",
{ name = "xdecor_television_front_animated.png", animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1 } },
},
paramtype2 = "4dir",
groups = { breakable = 1, rotatable = 1, not_in_creative_inventory = 1},
sounds = lzr_sounds.node_sound_metal_defaults(),
is_ground_content = false,
on_punch = on_punch_television,
on_rightclick = on_rightclick_television,
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("infotext", S("Change graphics settings"))
end,
})
lzr_gamestate.register_on_enter_state(function(state)
if state == lzr_gamestate.MENU then
local player = minetest.get_player_by_name("singleplayer")

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 B