Started a map icon gen tool that will load the fonts and create tile sprites for everything I use.
This commit is contained in:
		
							parent
							
								
									056b0b307b
								
							
						
					
					
						commit
						dbc2000434
					
				
					 2 changed files with 69 additions and 0 deletions
				
			
		|  | @ -169,6 +169,13 @@ executable('zedcaster', | |||
|   override_options: exe_defaults, | ||||
|   dependencies: dependencies) | ||||
| 
 | ||||
| executable('icongen', | ||||
|   [ 'dbc.cpp', 'tools/icongen.cpp' ], | ||||
|   cpp_args: cpp_args, | ||||
|   link_args: link_args, | ||||
|   override_options: exe_defaults, | ||||
|   dependencies: dependencies) | ||||
| 
 | ||||
| executable('fragviewer', | ||||
|   [ 'textures.cpp', 'config.cpp', | ||||
|     'dbc.cpp', 'tools/fragviewer.cpp' ], | ||||
|  |  | |||
							
								
								
									
										62
									
								
								tools/icongen.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								tools/icongen.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,62 @@ | |||
| #include <fmt/core.h> | ||||
| #include "dbc.hpp" | ||||
| #include <SFML/Graphics.hpp> | ||||
| #include <SFML/Graphics/RenderWindow.hpp> | ||||
| #include "constants.hpp" | ||||
| 
 | ||||
| int main() { | ||||
|   unsigned int font_size = 30; | ||||
|   sf::Vector2u size{32, 32}; | ||||
| 
 | ||||
|   sf::RenderTexture render{size}; | ||||
|   render.setSmooth(false); | ||||
| 
 | ||||
|   sf::Font font{FONT_FILE_NAME}; | ||||
|   font.setSmooth(false); | ||||
| 
 | ||||
|   wchar_t display_char = 3848; | ||||
|   std::wstring content{display_char}; | ||||
|   sf::Text icon{font, content, font_size}; | ||||
| 
 | ||||
|   icon.setFillColor({0, 0, 0, 255}); | ||||
|   render.draw(icon); | ||||
|   render.clear({0,0,0,0}); | ||||
| 
 | ||||
|   // fit the glyph in our box height
 | ||||
|   auto glyph = font.getGlyph(content[0], font_size, false); | ||||
| 
 | ||||
|   while(glyph.textureRect.size.y < int(size.y)-1) { | ||||
|     font_size++; | ||||
|     glyph = font.getGlyph(content[0], font_size, false); | ||||
|   } | ||||
| 
 | ||||
|   auto font_texture = font.getTexture(font_size); | ||||
|   sf::Sprite sprite{font_texture, glyph.textureRect}; | ||||
|   auto t_size = glyph.textureRect.size; | ||||
| 
 | ||||
|   dbc::check(int(size.x - t_size.x) > 0, "font too big on x"); | ||||
|   dbc::check(int(size.y - t_size.y) > 0, "font too big on y"); | ||||
| 
 | ||||
|   sf::Vector2f center{ | ||||
|     (float(size.x) - float(t_size.x)) / 2.0f, | ||||
|     (float(size.y) - float(t_size.y)) / 2.0f}; | ||||
| 
 | ||||
|   sf::Vector2f scale{float(size.x) / float(t_size.x), float(size.y) / float(t_size.y)}; | ||||
| 
 | ||||
|   fmt::println("scale={},{}; t_size={},{}; size={},{}", | ||||
|       scale.x, scale.y, t_size.x, t_size.y, size.x, size.y); | ||||
| 
 | ||||
|   sprite.setScale(scale); | ||||
| 
 | ||||
|   sprite.setPosition({0,0}); | ||||
|   sprite.setColor({0, 0, 0, 255}); | ||||
| 
 | ||||
|   render.draw(sprite); | ||||
|   render.display(); | ||||
|   sf::Image out_img = render.getTexture().copyToImage(); | ||||
| 
 | ||||
|   bool worked = out_img.saveToFile("./screenshot.png"); | ||||
|   dbc::check(worked, "Failed to write screenshot.png"); | ||||
| 
 | ||||
|   return 0; | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Zed A. Shaw
						Zed A. Shaw