2014-06-21 12:44:31 +02:00
local S
if intllib then
S = intllib.Getter ( )
else
S = function ( s ) return s end
end
2014-05-05 09:39:03 +02:00
unified_inventory.hud_colors = {
2014-06-21 12:44:31 +02:00
{ " #FFFFFF " , 0xFFFFFF , S ( " White " ) } ,
{ " #DBBB00 " , 0xf1d32c , S ( " Yellow " ) } ,
{ " #DD0000 " , 0xDD0000 , S ( " Red " ) } ,
{ " #2cf136 " , 0x2cf136 , S ( " Green " ) } ,
{ " #2c4df1 " , 0x2c4df1 , S ( " Blue " ) } ,
2014-05-05 09:39:03 +02:00
}
unified_inventory.hud_colors_max = # unified_inventory.hud_colors
unified_inventory.register_page ( " waypoints " , {
get_formspec = function ( player )
local waypoints = datastorage.get_container ( player , " waypoints " )
2014-06-24 12:39:12 +02:00
local formspec = " background[0,4.5;8,4;ui_main_inventory.png] " ..
" image[0,0;1,1;ui_waypoints_icon.png] " ..
" label[1,0; " .. S ( " Waypoints " ) .. " ] "
2014-05-05 09:39:03 +02:00
-- Tabs buttons:
local i
for i = 1 , 5 , 1 do
2014-06-22 00:34:35 +02:00
formspec = formspec ..
2014-06-24 12:39:12 +02:00
" image_button[0.0, " .. 0.2 + i * 0.7 .. " ;.8,.8; " ..
( i == waypoints.selected and " ui_blue_icon_background.png^ " or " " ) ..
" ui_ " .. i .. " _icon.png; " ..
" select_waypoint " .. i .. " ;] " ..
" tooltip[select_waypoint " .. i .. " ; " .. minetest.formspec_escape ( S ( " Select Waypoint #%d " ) : format ( i ) ) .. " ] "
2014-05-05 09:39:03 +02:00
end
i = waypoints.selected
-- Main buttons:
formspec = formspec ..
2014-06-22 00:34:35 +02:00
" image_button[4.5,3.7;.8,.8; " ..
" ui_waypoint_set_icon.png; " ..
2014-06-24 12:39:12 +02:00
" set_waypoint " .. i .. " ;] " ..
" tooltip[set_waypoint " .. i .. " ; " .. minetest.formspec_escape ( S ( " Set waypoint to current location " ) ) .. " ] "
2014-05-05 09:39:03 +02:00
2014-06-22 00:34:35 +02:00
formspec = formspec ..
" image_button[5.2,3.7;.8,.8; " ..
( waypoints [ i ] . active and " ui_on_icon.png " or " ui_off_icon.png " ) .. " ; " ..
2014-06-24 12:39:12 +02:00
" toggle_waypoint " .. i .. " ;] " ..
" tooltip[toggle_waypoint " .. i .. " ; " .. minetest.formspec_escape ( S ( " Make waypoint " .. ( waypoints [ i ] . active and " invisible " or " visible " ) ) ) .. " ] "
2014-05-05 09:39:03 +02:00
formspec = formspec ..
2014-06-22 00:34:35 +02:00
" image_button[5.9,3.7;.8,.8; " ..
( waypoints [ i ] . display_pos and " ui_green_icon_background.png " or " ui_red_icon_background.png " ) .. " ^ui_xyz_icon.png; " ..
2014-06-24 12:39:12 +02:00
" toggle_display_pos " .. i .. " ;] " ..
" tooltip[toggle_display_pos " .. i .. " ; " .. minetest.formspec_escape ( S ( ( waypoints [ i ] . display_pos and " Disable " or " Enable " ) .. " display of waypoint coordinates " ) ) .. " ] "
2014-06-22 00:34:35 +02:00
formspec = formspec ..
" image_button[6.6,3.7;.8,.8; " ..
" ui_circular_arrows_icon.png; " ..
2014-06-24 12:39:12 +02:00
" toggle_color " .. i .. " ;] " ..
" tooltip[toggle_color " .. i .. " ; " .. minetest.formspec_escape ( S ( " Change color of waypoint display " ) ) .. " ] "
2014-06-22 00:34:35 +02:00
formspec = formspec ..
" image_button[7.3,3.7;.8,.8; " ..
" ui_pencil_icon.png; " ..
2014-06-24 12:39:12 +02:00
" rename_waypoint " .. i .. " ;] " ..
" tooltip[rename_waypoint " .. i .. " ; " .. minetest.formspec_escape ( S ( " Edit waypoint name " ) ) .. " ] "
2014-05-05 09:39:03 +02:00
-- Waypoint's info:
if waypoints [ i ] . active then
2014-06-21 12:44:31 +02:00
formspec = formspec .. " label[1,0.8; " .. S ( " Waypoint active " ) .. " ] "
2014-05-05 09:39:03 +02:00
else
2014-06-21 12:44:31 +02:00
formspec = formspec .. " label[1,0.8; " .. S ( " Waypoint inactive " ) .. " ] "
2014-05-05 09:39:03 +02:00
end
if waypoints [ i ] . edit then
formspec = formspec ..
" field[1.3,3.2;6,.8;rename_box " .. i .. " ;; " .. waypoints [ i ] . name .. " ] " ..
2014-06-22 00:34:35 +02:00
" image_button[7.3,2.9;.8,.8; " ..
" ui_ok_icon.png; " ..
2014-06-24 12:39:12 +02:00
" confirm_rename " .. i .. " ;] " ..
" tooltip[confirm_rename " .. i .. " ; " .. minetest.formspec_escape ( S ( " Finish editing " ) ) .. " ] "
2014-05-05 09:39:03 +02:00
end
2014-06-21 12:44:31 +02:00
formspec = formspec .. " label[1,1.3; " .. S ( " World position " ) .. " : " ..
2014-05-05 09:39:03 +02:00
minetest.pos_to_string ( waypoints [ i ] . world_pos ) .. " ] " ..
2014-06-21 12:44:31 +02:00
" label[1,1.8; " .. S ( " Name " ) .. " : " .. waypoints [ i ] . name .. " ] " ..
" label[1,2.3; " .. S ( " HUD text color " ) .. " : " ..
2014-05-05 09:39:03 +02:00
unified_inventory.hud_colors [ waypoints [ i ] . color ] [ 3 ] .. " ] "
return { formspec = formspec }
end ,
} )
unified_inventory.register_button ( " waypoints " , {
type = " image " ,
image = " ui_waypoints_icon.png " ,
2014-06-22 00:34:35 +02:00
tooltip = S ( " Waypoints " ) ,
2014-05-05 09:39:03 +02:00
} )
unified_inventory.update_hud = function ( player , waypoint )
local name
if waypoint.display_pos then
name = " ( " ..
waypoint.world_pos . x .. " , " ..
waypoint.world_pos . y .. " , " ..
waypoint.world_pos . z .. " ) "
if waypoint.name ~= " " then
name = name .. " , " ..
waypoint.name
end
else
name = waypoint.name
end
2014-05-26 11:43:25 +02:00
if waypoint.hud then
2014-05-05 09:39:03 +02:00
player : hud_remove ( waypoint.hud )
2014-05-26 11:43:25 +02:00
end
if waypoint.active then
2014-05-05 09:39:03 +02:00
waypoint.hud = player : hud_add ( {
hud_elem_type = " waypoint " ,
number = unified_inventory.hud_colors [ waypoint.color ] [ 2 ] ,
name = name ,
text = " m " ,
world_pos = waypoint.world_pos
} )
else
2014-05-26 11:43:25 +02:00
waypoint.hud = nil
2014-05-05 09:39:03 +02:00
end
end
minetest.register_on_player_receive_fields ( function ( player , formname , fields )
if formname ~= " " then
return
end
local update_formspec = false
local update_hud = false
local waypoints = datastorage.get_container ( player , " waypoints " )
for i = 1 , 5 , 1 do
if fields [ " select_waypoint " .. i ] then
waypoints.selected = i
update_formspec = true
end
if fields [ " toggle_waypoint " .. i ] then
waypoints [ i ] . active = not ( waypoints [ i ] . active )
update_hud = true
update_formspec = true
end
if fields [ " set_waypoint " .. i ] then
local pos = player : getpos ( )
pos.x = math.floor ( pos.x )
pos.y = math.floor ( pos.y )
pos.z = math.floor ( pos.z )
waypoints [ i ] . world_pos = pos
update_hud = true
update_formspec = true
end
if fields [ " rename_waypoint " .. i ] then
waypoints [ i ] . edit = true
update_formspec = true
end
if fields [ " toggle_display_pos " .. i ] then
waypoints [ i ] . display_pos = not waypoints [ i ] . display_pos
update_hud = true
update_formspec = true
end
if fields [ " toggle_color " .. i ] then
local color = waypoints [ i ] . color
color = color + 1
if color > unified_inventory.hud_colors_max then
color = 1
end
waypoints [ i ] . color = color
update_hud = true
update_formspec = true
end
if fields [ " confirm_rename " .. i ] then
waypoints [ i ] . edit = false
waypoints [ i ] . name = fields [ " rename_box " .. i ]
update_hud = true
update_formspec = true
end
if update_hud then
unified_inventory.update_hud ( player , waypoints [ i ] )
end
if update_formspec then
unified_inventory.set_inventory_formspec ( player , " waypoints " )
end
end
end )
minetest.register_on_joinplayer ( function ( player )
local waypoints = datastorage.get_container ( player , " waypoints " )
local need_save = false
-- Create new waypoints data
for i = 1 , 5 , 1 do
if waypoints [ i ] == nil then
need_save = true
waypoints [ i ] = {
edit = false ,
active = false ,
display_pos = true ,
color = 1 ,
name = " Waypoint " .. i ,
world_pos = { x = 0 , y = 0 , z = 0 } ,
}
end
end
if need_save then datastorage.save_container ( player ) end
-- Initialize waypoints
minetest.after ( 0.5 , function ( )
waypoints.selected = 1
for i = 1 , 5 , 1 do
waypoints [ i ] . edit = false
unified_inventory.update_hud ( player , waypoints [ i ] )
end
end )
end )