formspec.lua 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. local function FS() return end
  2. local S = minetest.get_translator("skins_collectible")
  3. local locked_skin = {
  4. name = "???",
  5. description = "???",
  6. model = nil,
  7. texture = nil,
  8. tier = 1,
  9. img = "blank.png",
  10. author = ""
  11. }
  12. function skins_collectible.get_formspec(p_name, page, skin_ID)
  13. local selected_skin
  14. local skin_bg
  15. local skin_preview
  16. local skin_stars
  17. -- se la skin è bloccata o meno
  18. if skin_ID == "LOCKED" then
  19. selected_skin = locked_skin
  20. skin_bg = "skinscollectible_gui_bg_locked.png"
  21. skin_preview = "skinscollectible_locked.png"
  22. skin_stars = "blank.png"
  23. minetest.get_player_by_name(p_name):get_meta():set_int("skins_collectible:selected_skin_ID", -1) -- metadato per "Wear" se è bloccata
  24. else
  25. selected_skin = skins_collectible.get_skin(skin_ID)
  26. skin_bg = "skinscollectible_gui_bg_tier" .. selected_skin.tier .. ".png"
  27. skin_preview = skins_collectible.get_preview(skin_ID)
  28. skin_stars = "skinscollectible_gui_stars" .. selected_skin.tier .. ".png"
  29. minetest.get_player_by_name(p_name):get_meta():set_int("skins_collectible:selected_skin_ID", skin_ID) -- metadato per "Wear" se è sbloccata
  30. end
  31. local formspec = {
  32. -- immagini
  33. "image[0,0;16.15,9.24;" .. skin_bg .. "]",
  34. "image[0,0;16.15,9.24;" .. selected_skin.img .. "]",
  35. "image[0,0;16.15,9.24;skinscollectible_gui_overlay.png]",
  36. -- skin selezionata
  37. "image[1.95,0.85;1.05,0.15;" .. skin_stars .. "]",
  38. "image[1.77,0.92;1.5,2.34;" .. skin_preview .. "]",
  39. -- pulsanti
  40. "image_button[1.87,3.2;1.3,0.3;skinscollectible_gui_button_wear.png;WEAR;" .. S("Wear") .. "]",
  41. "image_button[0.2,6;0.7,1.2;skinscollectible_gui_arrow_left.png;GO_LEFT;]",
  42. "image_button[15.2,6;0.7,1.2;skinscollectible_gui_arrow_right.png;GO_RIGHT;]",
  43. -- testo
  44. "hypertext[3.6,0.85;4,1;name; <global size=23 font=mono color=#7a444a><b>" .. selected_skin.name .. "</b>]",
  45. "hypertext[3.6,1.25;3.2,2;desc; <global size=12 font=mono halign=justify color=#a05b53><i>" .. FS(selected_skin.description) .. "</i>]"
  46. }
  47. local skins_amount = skins_collectible.get_loaded_skins_amount()
  48. local first_idx = (math.floor(skins_amount / 16) + 1) * page
  49. -- creo slot in matrice x*y
  50. for y = 1, 2 do
  51. for x = 1, 8 do
  52. local skin_ID = (x + (8 * (y-1))) * first_idx
  53. -- se ho raggiunto il numero massimo di skin, interrompo
  54. if skin_ID > skins_amount then
  55. break
  56. end
  57. local size_x = 1.603
  58. local size_y = 2.462
  59. local pos_x = size_x * x
  60. local pos_y = size_y * y
  61. local indent_x = 0.04
  62. local indent_y = 1.8
  63. local slot_size = size_x .. "," .. size_y .. ";"
  64. local slot_pos = indent_x + pos_x .. "," .. indent_y + pos_y .. ";"
  65. if skins_collectible.is_skin_unlocked(p_name, x) then
  66. table.insert(formspec, skin_ID, "image_button[" .. slot_pos .. slot_size .. skins_collectible.get_preview(skin_ID) .. ";" .. skin_ID .. ";]")
  67. else
  68. table.insert(formspec, skin_ID, "image_button[" .. slot_pos .. slot_size .. "skinscollectible_gui_button.png;LOCKED;]")
  69. table.insert(formspec, skin_ID +1, "tooltip[" .. slot_pos .. slot_size .. FS(skins_collectible.get_skin(skin_ID).hint) .. " ;#dff6f5;#5a5353]")
  70. end
  71. end
  72. end
  73. -- aggiunte finali che hanno la priorità
  74. table.insert(formspec, 1, "formspec_version[4]")
  75. table.insert(formspec, 2, "size[16.15,9.24]")
  76. table.insert(formspec, 3, "no_prepend[]")
  77. table.insert(formspec, 4, "background[0,0;16.15,9.24;skinscollectible_gui_bg.png]")
  78. table.insert(formspec, 5, "style_type[image_button;border=false]")
  79. table.insert(formspec, 6, "style[wear;font=mono;textcolor=#dff6f5]")
  80. table.insert(formspec, 7, "bgcolor[;true]")
  81. return table.concat(formspec, "")
  82. end
  83. function FS(txt)
  84. return minetest.formspec_escape(S(txt))
  85. end
  86. ----------------------------------------------
  87. ---------------GESTIONE CAMPI-----------------
  88. ----------------------------------------------
  89. minetest.register_on_player_receive_fields(function(player, formname, fields)
  90. if formname ~= "skins_collectible:GUI" then return end
  91. if fields.quit or fields.key_up or fields.key_down then return end
  92. local p_name = player:get_player_name()
  93. -- se provo a indossarla
  94. if fields.WEAR then
  95. local skin_ID = player:get_meta():get_int("skins_collectible:selected_skin_ID")
  96. -- se è sbloccata, indosso la skin e chiudo il formspec
  97. if skin_ID ~= -1 then
  98. skins_collectible.set_skin(player, skin_ID, true)
  99. minetest.close_formspec(p_name, "skins_collectible:GUI")
  100. --TODO: suono + effetto particellare
  101. -- sennò riproduco un suono d'errore
  102. else
  103. minetest.sound_play("skinscollectible_deny", {to_player = p_name})
  104. end
  105. -- se provo a cambiar pagina
  106. elseif fields.GO_LEFT then
  107. elseif fields.GO_RIGHT then
  108. -- selezione skin
  109. elseif fields.LOCKED then
  110. minetest.show_formspec(p_name, "skins_collectible:GUI", skins_collectible.get_formspec(p_name, 1, "LOCKED"))
  111. else
  112. local skin_ID = tonumber(string.match(dump(fields), "(%d+)"))
  113. minetest.show_formspec(p_name, "skins_collectible:GUI", skins_collectible.get_formspec(p_name, 1, skin_ID))
  114. end
  115. end)