Source code for uetools.commands.editor.editor

from __future__ import annotations

from dataclasses import dataclass
from typing import Optional

from argklass.arguments import add_arguments
from argklass.command import Command, newparser

from uetools.core.conf import editor_cmd, find_project
from uetools.core.run import popen_with_format
from uetools.core.util import command_builder, deduce_project
from uetools.format.base import Formatter

EDITOR_COMMANDSS = [
    # "debug {0}"
    "automation list",
    "runtests",
    "runall",
]

# fmt: off
[docs] @dataclass class Vector: """Position vector""" x: float | None = 0 y: float | None = 0 z: float | None = 0
[docs] def to_ue_cmd(self, name, cmd): """Convert the vector into a command line argument""" cmd.append(f"-{name}=(X={self.x},Y={self.y},Z={self.z})")
[docs] @dataclass class Rotation: """Rotation vector""" pitch : float | None = 0 yaw : float | None = 0 roll : float | None = 0
[docs] def to_ue_cmd(self, name, cmd): """Convert the rotation into a command line argument""" cmd.append(f"-{name}=(Pitch={self.pitch},Yaw={self.yaw},Roll={self.roll})")
[docs] @dataclass class DevArguments: """Development arguments""" abslog : str | None = None # Same as LOG= but without a filename length check. allusers : bool = False # Add the game for all users when INSTALLGE is specified. auto : bool = False # Assume yes on all questions. (for example during compile) autocheckoutpackages : bool = False # Automatically checkout packages that need to be saved. automatedmapbuild : bool = False # Perform an automated build of a specified map. biascompressionforsize : bool = False # Override compression settings with respect to size. buildmachine : bool = False # Set as build machine. Used for deciding if debug output is enabled. bulkimportingsounds : bool = False # Use when importing sounds in bulk. (Content Browser specific.) check_native_class_sizes : bool = False # Enable checking of native class sizes. Note: Native classes on console platforms will cause native class size checks to fail even though they are assumed to be correct. codermode : bool = False # Enables Coder mode. compatscale : bool = False # Set compatibility settings manually to override PCCompat tool settings. conformdir : bool = False # Directory to use when conforming packages. cookfordemo : bool = False # Specify as cooking packages for the demo. cookpackages : bool = False # Tag to specify cooking packages. crashreports : bool = False # Always report crashes of the engine. d3ddebug : bool = False # Use a d3d debug device. devcon : bool = False # Disable secure connections for developers. (Uses unencrypted sockets.) dumpfileiostats : bool = False # Track and log File IO statistics. fixedseed : bool = False # Initialize the random number generator with a fixed value, 0. fixuptangents : bool = False # Fix legacy tangents in distributions automatically. forcelogflush : bool = False # Force a log flush after each line. forcepvrtc : bool = False # Force pvrtc texture compression for mobile platform. forcesoundrecook : bool = False # Force a complete re-cook of all sounds. genericbrowser : bool = False # Use the Generic Browser. installed : bool = False # For development purposes, run the game as if installed. installfw : bool = False # Set whether the handling of the firewall integration should be performed. uninstallfw : bool = False # Set whether the handling of the firewall integration should be performed. installge : bool = False # Add the game to the Game Explorer. cultureforcooking : bool = False # Set language to be used for cooking. lightmassdebug : bool = False # Launch lightmass manually with -debug and allow lightmass to be executed multiple times. lightmassstats : bool = False # Force all lightmass agents to report detailed stats to the log. log : str | None = None # When used as a switch (-log), opens a separate window to display the contents of the log in real time. When used as a setting (LOG=filename.log), tells the engine to use the log filename of the string that immediately follows. logtimes : bool = False # Print time with log output. (Default, same as setting LogTimes=True in the [LogFiles] section of *Engine.ini*.) noconform : bool = False # Tell the engine not to conform packages as they are compiled. nocontentbrowser : bool = False # Disable the Content Browser. noinnerexception : bool = False # Disable the exception handler within native C++. noloadstartuppackages : bool = False # Force startup packages not to be loaded. You can use this if objects in a startup package must be deleted from within the editor. nologtimes : bool = False # Do not print time with log output. (Same as setting LogTimes=False in the [LogFiles] section of *Engine.ini*.) nopause : bool = False # Close the log window automatically on exit. nopauseonsuccess : bool = False # Close the log window automatically on exit as long as no errors were present. norc : bool = False # Disable the remote control. Used for dedicated servers. noverifygc : bool = False # Do not verify garbage compiler assumptions. nowrite : bool = False # Disable output to log. seekfreeloading : bool = False # Only use cooked data. seekfreepackagemap : bool = False # Override the package map with the seekfree (cooked) version. seekfreeloadingpcconsole : bool = False # Only use cooked data for PC console mode. seekfreeloadingserver : bool = False # Only use cooked data for server. setthreadnames : bool = False # (Xbox only) Force thread names to be set. This can mess up the XDK COM API which is why it must be explicitly set to be performed if desired. showmissingloc : bool = False # If missing localized text, return error string instead of English text. silent : bool = False # Disable output and feedback. traceanimusage : bool = False # Trace animation usage. treatloadwarningsaserrors: bool = False # Force load warnings to be treated as errors. unattended : bool = False # Set as unattended. Disable anything requiring feedback from user. uninstallge : bool = False # Remove the game from the Game Explorer. useunpublished : bool = False # Force packages in the Unpublished folder to be used. vadebug : bool = False # Use the Visual Studio debugger interface. verbose : bool = False # Set compiler to use verbose output. verifygc : bool = False # Force garbage compiler assumptions to be verified. warningsaserrors : bool = False # Treat warnings as errors.
[docs] @dataclass class RenderingArguments: """Rendering arguments""" consolex : int | None = None # Set the horizontal position for console output window. consoley : int | None = None # Set the vertical position for console output window. winx : int | None = None # Set the horizontal position of the game window on the screen. winy : int | None = None # Set the vertical position of the game window on the screen. resx : int | None = None # Set horizontal resolution for game window. resy : int | None = None # Set vertical resolution for game window. vsync : bool | None = None # Activate the VSYNC via command line. Pprevents tearing of the image but costs fps and causes input latency.) novsync : bool | None = None # Deactivate the VSYNC via command line. benchmark : bool | None = None # Run game at fixed-step in order to process each frame without skipping any frames. This is useful in conjunction with DUMPMOVIE options. dumpmovie : bool | None = None # Dump rendered frames to files using current resolution of game. exec : str | None = None # Executes the specified exec file. fps : int | None = None # Set the frames per second for benchmarking. fullscreen : bool | None = None # Set game to run in fullscreen mode. seconds : float | None = None # Set the maximum tick time. windowed : bool | None = None # Set game to run in windowed mode.
[docs] @dataclass class NetworkArguments: """Network arguments""" lanplay : bool = False # Tell the engine to not cap client bandwidth when connecting to servers. Causes double the amount of server updates and can saturate client's bandwidth. limitclientticks : bool = False # Force throttling of network updates. multihome : bool = False # Tell the engine to use a multihome address for networking. networkprofiler : bool = False # Enable network profiler tracking. nosteam : bool = False # Set steamworks to not be used. port : int | None = None # Tell the engine to use a specific port number. primarynet : bool = False # Affect how the engine handles network binding.
[docs] @dataclass class UserArguments: """User Arguments""" nohomedir : bool = False # Override use of My Documents folder as home directory. noforcefeedback : bool = False # Disable force feedback in the engine. nosound : bool = False # Disable any sound output from the engine. nosplash : bool = False # Disable use of splash image when loading the game. notexturestreaming : bool = False # Disable texture streaming. Highest quality textures are always loaded. onethread : bool = False # Run the engine using a single thread instead of multi-threading. paths : str | None = None # Set what paths to use for testing wrangled content. Not used for shipping releases. preferredprocessor : bool = False # Set the thread affinity for a specific processor. useallavailablecores: bool = False # Force the use of all available cores on the target platform.
[docs] @dataclass class ServerArguments: """Server arguments""" login : bool = False # Set username to use when logging in. password : bool = False # Set password to use when logging in.
[docs] @dataclass class GameStatsArguments: """Game stats arguments""" nodatabase : bool = False # Do not use database, and ignore database connection errors. nolivetags : bool = False # Skip loading unverified tag changes from SQL database. Only load for current user.
[docs] @dataclass class ConfigArguments: """Configuration related arguments.""" englishcoalesced : bool = False # Revert to the default (English) coalesced .ini if the language-localized version cannot be found. noautoiniupdate : bool = False # Suppress prompts to update .ini files. noini : bool = False # Do not update the .ini files. regenerateinis : bool = False # Forces .ini files to be regenerated. defeditorini : str | None = None # Set the default editor .ini file to use. editorini : str | None = None # Set the editor .ini file to use. defeditorusersettingsini: str | None = None # Set the default editor user settings .ini file to use. editorusersettingsini : str | None = None # Set the editor user settings .ini file to use. defcompatini : str | None = None # Set the default compatibility .ini file to use. compatini : str | None = None # Set the compatibility .ini file to use. deflightmassini : str | None = None # Set the default lightmass .ini file to use. lightmassini : str | None = None # Set the lightmass .ini file to use. defengineini : str | None = None # Set the default engine .ini file to use. engineini : str | None = None # Set the engine .ini file to use. defgameini : str | None = None # Set the default game .ini file to use. gameini : str | None = None # Set the game .ini file to use. definputini : str | None = None # Set the default input .ini file to use. inputini : str | None = None # Set the input .ini file to use. defuiini : str | None = None # Set the default UI .ini file to use. uiini : str | None = None # Set the UI .ini file to use.
[docs] @dataclass class DebugArguments: """Debugging arguments""" bugloc : str | None = None # (e.g. BugLoc=(X=1798.8569,Y=475.9513,Z=-8.8500)) bugrot : str | None = None # (e.g. BugRot=(Pitch=-1978,Yaw=-7197,Roll=0))
[docs] @dataclass class MiscArguments: """Other arguments""" timelimit : float | None = None # (e.g. timelimit=[time]) goalscore : float | None = None # (e.g. goalscore=[score]) numbots : int | None = None # (e.g. numbots=[num])
[docs] @dataclass class CLIArguments: """Arguments to make the editor run in command line mode.""" fullstdoutlogoutput : bool = False # Force all log to be output to stdout. utf8output : bool = False # Force all output to be UTF-8. nullrhi : bool = False # Prevent rendering warningsaserror : bool = False # Treat warnings as errors.
[docs] @dataclass class Arguments: """Unreal Editor arguments""" project : Optional[str] = deduce_project() # Project name, example: <project>.uproject cli : bool = False # Enable a group of arguments to make the editor as a command line tool dry : bool = False # Print the command it will execute without running it map : str | None = None # Path to the map game : bool = False # Launch the game server : bool = False # Launch the game as a server address : str | None = None # Address to connect to
# fmt: on
[docs] class Editor(Command): """Runs Editor as is. This command exposes a lot of arguments. Notes ----- To make your intention clear, you should implement your own Command with a more defined goal. Examples -------- .. code-block:: console # Launch the uncooked game (no editor, standalone) uecli editor RTSGame -game # Launch a listen server (Host other clients, 1 local player) uecli editor RTSGame /Game/Maps/MyMap?Listen --game # Launch a dedicated server (no local players) uecli editor RTSGame /Game/Maps/MyMap --server --game --port 8123 # Launch a client (1 local player) uecli editor RTSGame --address localhost --port 8123 --game """ name: str = "editor"
[docs] @staticmethod def examples(): return [ "uecli editor RTSGame -game", "uecli editor RTSGame /Game/Maps/MyMap --server --game --port 8123", ]
[docs] @staticmethod def arguments(subparsers): """Adds the arguments for this command to the given parser""" parser = newparser(subparsers, Editor) add_arguments(parser, Arguments) add_arguments(parser, DevArguments) add_arguments(parser, RenderingArguments) add_arguments(parser, NetworkArguments) add_arguments(parser, UserArguments) add_arguments(parser, ServerArguments) add_arguments(parser, GameStatsArguments) add_arguments(parser, DebugArguments) add_arguments(parser, MiscArguments)
[docs] @staticmethod def execute(args): if args.cli: args.fullstdoutlogoutput = True args.utf8output = True args.nullrhi = True args.warningsaserror = True args.nosplash = True args.nosound = True args.nopause = True args.unattended = True project = vars(args).pop("project") if project is not None and not project.endswith(".uproject"): project = find_project(project) cmd = [editor_cmd()] + ([project] if project else []) + command_builder(args) print(" ".join(cmd)) if not args.dry: fmt = Formatter() return popen_with_format(fmt, cmd) return 0
COMMANDS = Editor