mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-31 23:45:22 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local player_huds = {}
 | |
| 
 | |
| local states = {
 | |
| 	{0, "Normal font"},
 | |
| 	{1, "Bold font"},
 | |
| 	{2, "Italic font"},
 | |
| 	{3, "Bold and italic font"},
 | |
| 	{4, "Monospace font"},
 | |
| 	{5, "Bold and monospace font"},
 | |
| 	{7, "ZOMG all the font styles"},
 | |
| }
 | |
| 
 | |
| 
 | |
| local default_def = {
 | |
| 	hud_elem_type = "text",
 | |
| 	position = {x = 0.5, y = 0.5},
 | |
| 	scale = {x = 2, y = 2},
 | |
| 	alignment = { x = 0, y = 0 },
 | |
| }
 | |
| 
 | |
| local function add_hud(player, state)
 | |
| 	local def = table.copy(default_def)
 | |
| 	local statetbl = states[state]
 | |
| 	def.offset = {x = 0, y = 32 * state}
 | |
| 	def.style = statetbl[1]
 | |
| 	def.text = statetbl[2]
 | |
| 	return player:hud_add(def)
 | |
| end
 | |
| 
 | |
| minetest.register_on_leaveplayer(function(player)
 | |
| 	player_huds[player:get_player_name()] = nil
 | |
| end)
 | |
| 
 | |
| local etime = 0
 | |
| local state = 0
 | |
| 
 | |
| minetest.register_globalstep(function(dtime)
 | |
| 	etime = etime + dtime
 | |
| 	if etime < 1 then
 | |
| 		return
 | |
| 	end
 | |
| 	etime = 0
 | |
| 	for _, player in ipairs(minetest.get_connected_players()) do
 | |
| 		local huds = player_huds[player:get_player_name()]
 | |
| 		if huds then
 | |
| 			for i, hud_id in ipairs(huds) do
 | |
| 				local statetbl = states[(state + i) % #states + 1]
 | |
| 				player:hud_change(hud_id, "style", statetbl[1])
 | |
| 				player:hud_change(hud_id, "text", statetbl[2])
 | |
| 			end
 | |
| 		end
 | |
| 	end
 | |
| 	state = state + 1
 | |
| end)
 | |
| 
 | |
| minetest.register_chatcommand("hudfonts", {
 | |
| 	params = "",
 | |
| 	description = "Show/Hide some text on the HUD with various font options",
 | |
| 	func = function(name, param)
 | |
| 		local player = minetest.get_player_by_name(name)
 | |
| 		local param = tonumber(param) or 0
 | |
| 		param = math.min(math.max(param, 1), #states)
 | |
| 		if player_huds[name] == nil then
 | |
| 			player_huds[name] = {}
 | |
| 			for i = 1, param do
 | |
| 				table.insert(player_huds[name], add_hud(player, i))
 | |
| 			end
 | |
| 			minetest.chat_send_player(name, ("%d HUD element(s) added."):format(param))
 | |
| 		else
 | |
| 			local huds = player_huds[name]
 | |
| 			if huds then
 | |
| 				for _, hud_id in ipairs(huds) do
 | |
| 					player:hud_remove(hud_id)
 | |
| 				end
 | |
| 				minetest.chat_send_player(name, "All HUD elements removed.")
 | |
| 			end
 | |
| 			player_huds[name] = nil
 | |
| 		end
 | |
| 		return true
 | |
| 	end,
 | |
| })
 |