mirror of
				https://github.com/godotengine/godot.git
				synced 2025-11-03 23:21:15 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Functions used to generate source files during build time
 | 
						|
 | 
						|
All such functions are invoked in a subprocess on Windows to prevent build flakiness.
 | 
						|
"""
 | 
						|
 | 
						|
from platform_methods import subprocess_main
 | 
						|
from collections import OrderedDict
 | 
						|
 | 
						|
 | 
						|
def make_default_controller_mappings(target, source, env):
 | 
						|
    dst = target[0]
 | 
						|
    g = open(dst, "w")
 | 
						|
 | 
						|
    g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
 | 
						|
    g.write('#include "core/typedefs.h"\n')
 | 
						|
    g.write('#include "core/input/default_controller_mappings.h"\n')
 | 
						|
 | 
						|
    # ensure mappings have a consistent order
 | 
						|
    platform_mappings: dict = OrderedDict()
 | 
						|
    for src_path in source:
 | 
						|
        with open(src_path, "r") as f:
 | 
						|
            # read mapping file and skip header
 | 
						|
            mapping_file_lines = f.readlines()[2:]
 | 
						|
 | 
						|
        current_platform = None
 | 
						|
        for line in mapping_file_lines:
 | 
						|
            if not line:
 | 
						|
                continue
 | 
						|
            line = line.strip()
 | 
						|
            if len(line) == 0:
 | 
						|
                continue
 | 
						|
            if line[0] == "#":
 | 
						|
                current_platform = line[1:].strip()
 | 
						|
                if current_platform not in platform_mappings:
 | 
						|
                    platform_mappings[current_platform] = {}
 | 
						|
            elif current_platform:
 | 
						|
                line_parts = line.split(",")
 | 
						|
                guid = line_parts[0]
 | 
						|
                if guid in platform_mappings[current_platform]:
 | 
						|
                    g.write(
 | 
						|
                        "// WARNING - DATABASE {} OVERWROTE PRIOR MAPPING: {} {}\n".format(
 | 
						|
                            src_path, current_platform, platform_mappings[current_platform][guid]
 | 
						|
                        )
 | 
						|
                    )
 | 
						|
                platform_mappings[current_platform][guid] = line
 | 
						|
 | 
						|
    platform_variables = {
 | 
						|
        "Linux": "#if X11_ENABLED",
 | 
						|
        "Windows": "#ifdef WINDOWS_ENABLED",
 | 
						|
        "Mac OS X": "#ifdef MACOS_ENABLED",
 | 
						|
        "Android": "#if defined(__ANDROID__)",
 | 
						|
        "iOS": "#ifdef IOS_ENABLED",
 | 
						|
        "Web": "#ifdef WEB_ENABLED",
 | 
						|
        "UWP": "#ifdef UWP_ENABLED",
 | 
						|
    }
 | 
						|
 | 
						|
    g.write("const char* DefaultControllerMappings::mappings[] = {\n")
 | 
						|
    for platform, mappings in platform_mappings.items():
 | 
						|
        variable = platform_variables[platform]
 | 
						|
        g.write("{}\n".format(variable))
 | 
						|
        for mapping in mappings.values():
 | 
						|
            g.write('\t"{}",\n'.format(mapping))
 | 
						|
        g.write("#endif\n")
 | 
						|
 | 
						|
    g.write("\tnullptr\n};\n")
 | 
						|
    g.close()
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    subprocess_main(globals())
 |