mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-31 15:35:21 +01:00 
			
		
		
		
	Add bold, italic and monospace font styling for HUD text elements (#11478)
Co-authored-by: Elias Fleckenstein <eliasfleckenstein@web.de>
This commit is contained in:
		
							
								
								
									
										81
									
								
								games/devtest/mods/testhud/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								games/devtest/mods/testhud/init.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| 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, | ||||
| }) | ||||
							
								
								
									
										2
									
								
								games/devtest/mods/testhud/mod.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								games/devtest/mods/testhud/mod.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| name = testhud | ||||
| description = For testing HUD functionality | ||||
		Reference in New Issue
	
	Block a user