diff options
| author | rubenwardy <rw@rubenwardy.com> | 2018-09-13 17:31:58 +0100 | 
|---|---|---|
| committer | rubenwardy <rw@rubenwardy.com> | 2018-09-13 17:33:04 +0100 | 
| commit | 29a1b97b3849daaf07e2d3789b54817101e9061c (patch) | |
| tree | 7fc5032035718ea9a03a8ef51475610153f5f0b2 /gui.lua | |
| parent | b856aea54dde26adcb81add8dd3e835ff6c801c1 (diff) | |
Improve code structure and awards formspec size
Diffstat (limited to 'gui.lua')
| -rw-r--r-- | gui.lua | 249 | 
1 files changed, 0 insertions, 249 deletions
| diff --git a/gui.lua b/gui.lua deleted file mode 100644 index 19da07d..0000000 --- a/gui.lua +++ /dev/null @@ -1,249 +0,0 @@ --- Copyright (c) 2013-18 rubenwardy. MIT. - -local S = awards.gettext - -local function order_awards(name) -	local hash_is_unlocked = {} -	local retval = {} - -	local data = awards.player(name) -	if data and data.unlocked then -		for awardname, _ in pairs(data.unlocked) do -			local def = awards.registered_awards[awardname] -			if def then -				hash_is_unlocked[awardname] = true -				local score = -100000 - -				local difficulty = def.difficulty or 1 -				if def.trigger and def.trigger.target then -					difficulty = difficulty * def.trigger.target -				end -				score = score + difficulty - -				retval[#retval + 1] = { -					name     = awardname, -					def      = def, -					unlocked = true, -					started  = true, -					score    = score, -				} -			end -		end -	end - -	for _, def in pairs(awards.registered_awards) do -		if not hash_is_unlocked[def.name] and def:can_unlock(data) then -			local started = false -			local score = def.difficulty or 1 -			if def.secret then -				score = 1000000 -			elseif def.trigger and def.trigger.target and def.getProgress then -				local progress = def:getProgress(data).perc -				score = score * (1 - progress) * def.trigger.target -				if progress < 0.001 then -					score = score + 100 -				else -					started = true -				end -			else -				score = 100 -			end - -			retval[#retval + 1] = { -				name     = def.name, -				def      = def, -				unlocked = false, -				started  = started, -				score    = score, -			} -		end -	end - -	table.sort(retval, function(a, b) -		return a.score < b.score -	end) -	return retval -end - -function awards.get_formspec(name, to, sid) -	local formspec = "" -	local awards_list = order_awards(name) -	local data  = awards.player(name) - -	if #awards_list == 0 then -		formspec = formspec .. "label[3.9,1.5;"..minetest.formspec_escape(S("Error: No achivements available.")).."]" -		formspec = formspec .. "button_exit[4.2,2.3;3,1;close;"..minetest.formspec_escape(S("OK")).."]" -		return formspec -	end -	sid = awards_list[sid] and sid or 1 - -	-- Sidebar -	local sitem = awards_list[sid] -	local sdef = sitem.def -	if sdef and sdef.secret and not sitem.unlocked then -		formspec = formspec .. "label[1,2.75;".. -				minetest.formspec_escape(S("(Secret Award)")).."]".. -				"image[1,0;3,3;awards_unknown.png]" -		if sdef and sdef.description then -			formspec = formspec	.. "textarea[0.25,3.25;4.8,1.7;;".. -					minetest.formspec_escape( -							S("Unlock this award to find out what it is."))..";]" -		end -	else -		local title = sitem.name -		if sdef and sdef.title then -			title = sdef.title -		end -		local status = "%s" -		if sitem.unlocked then -			status = S("%s (unlocked)") -		end - -		formspec = formspec .. "textarea[0.5,2.7;4.8,1.45;;" .. -			string.format(status, minetest.formspec_escape(title)) .. -			";]" - -		if sdef and sdef.icon then -			formspec = formspec .. "image[1,0;3,3;" .. sdef.icon .. "]" -		end -		local barwidth = 4.6 -		local perc = nil -		local label = nil -		if sdef.getProgress and data then -			local res = sdef:getProgress(data) -			perc = res.perc -			label = res.label -		end -		if perc then -			if perc > 1 then -				perc = 1 -			end -			formspec = formspec .. "background[0,4.80;" .. barwidth ..",0.25;awards_progress_gray.png;false]" -			formspec = formspec .. "background[0,4.80;" .. (barwidth * perc) ..",0.25;awards_progress_green.png;false]" -			if label then -				formspec = formspec .. "label[1.75,4.63;" .. minetest.formspec_escape(label) .. "]" -			end -		end -		if sdef and sdef.description then -			formspec = formspec	.. "textarea[0.25,3.75;4.8,1.7;;"..minetest.formspec_escape(sdef.description)..";]" -		end -	end - -	-- Create list box -	formspec = formspec .. "textlist[4.75,0;6,5;awards;" -	local first = true -	for _, award in pairs(awards_list) do -		local def = award.def -		if def then -			if not first then -				formspec = formspec .. "," -			end -			first = false - -			if def.secret and not award.unlocked then -				formspec = formspec .. "#707070"..minetest.formspec_escape(S("(Secret Award)")) -			else -				local title = award.name -				if def and def.title then -					title = def.title -				end -				-- title = title .. " [" .. award.score .. "]" -				if award.unlocked then -					formspec = formspec .. minetest.formspec_escape(title) -				elseif award.started then -					formspec = formspec .. "#c0c0c0".. minetest.formspec_escape(title) -				else -					formspec = formspec .. "#a0a0a0".. minetest.formspec_escape(title) -				end -			end -		end -	end -	return formspec .. ";"..sid.."]" -end - - -function awards.show_to(name, to, sid, text) -	if name == "" or name == nil then -		name = to -	end -	local data = awards.player(to) -	if name == to and data.disabled then -		minetest.chat_send_player(name, S("You've disabled awards. Type /awards enable to reenable.")) -		return -	end -	if text then -		local awards_list = order_awards(name) -		if #awards_list == 0 then -			minetest.chat_send_player(to, S("Error: No award available.")) -			return -		elseif not data or not data.unlocked  then -			minetest.chat_send_player(to, S("You have not unlocked any awards.")) -			return -		end -		minetest.chat_send_player(to, string.format(S("%s’s awards:"), name)) - -		for str, _ in pairs(data.unlocked) do -			local def = awards.registered_awards[str] -			if def then -				if def.title then -					if def.description then -						minetest.chat_send_player(to, string.format(S("%s: %s"), def.title, def.description)) -					else -						minetest.chat_send_player(to, def.title) -					end -				else -					minetest.chat_send_player(to, str) -				end -			end -		end -	else -		local deco = "" -		if minetest.global_exists("default") then -			deco = default.gui_bg .. default.gui_bg_img -		end -		-- Show formspec to user -		minetest.show_formspec(to,"awards:awards", -			"size[11,5]" .. deco .. -			awards.get_formspec(name, to, sid)) -	end -end - -if minetest.get_modpath("sfinv") then -	sfinv.register_page("awards:awards", { -		title = S("Awards"), -		on_enter = function(self, player, context) -			context.awards_idx = 1 -		end, -		is_in_nav = function(self, player, context) -			local data = awards.player(player:get_player_name()) -			return not data.disabled -		end, -		get = function(self, player, context) -			local name = player:get_player_name() -			return sfinv.make_formspec(player, context, -				awards.get_formspec(name, name, context.awards_idx), -				false, "size[11,5]") -		end, -		on_player_receive_fields = function(self, player, context, fields) -			if fields.awards then -				local event = minetest.explode_textlist_event(fields.awards) -				if event.type == "CHG" then -					context.awards_idx = event.index -					sfinv.set_player_inventory_formspec(player, context) -				end -			end -		end -	}) -end - -if minetest.get_modpath("unified_inventory") ~= nil then -	unified_inventory.register_button("awards", { -		type = "image", -		image = "awards_ui_icon.png", -		tooltip = S("Awards"), -		action = function(player) -			local name = player:get_player_name() -			awards.show_to(name, name, nil, false) -		end, -	}) -end | 
