UE4引擎输入命令代码,方便查找原理实现

bool UEngine::Exec( UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar )
{
    // If we don't have a viewport specified to catch the stat commands, use to the game viewport
    if (GStatProcessingViewportClient == NULL)
    {
        GStatProcessingViewportClient = GameViewport;
    }


    // See if any other subsystems claim the command.
    if (StaticExec(InWorld, Cmd,Ar) == true)
    {
        return true;
    }


    if (GDebugToolExec && (GDebugToolExec->Exec( InWorld, Cmd,Ar) == true))
    {
        return true;
    }

    if (GMalloc && (GMalloc->Exec( InWorld, Cmd,Ar) == true))
    {
        return true;
    }

    if (GSystemSettings.Exec( InWorld, Cmd,Ar) == true)
    {
        return true;
    }

    FAudioDevice* AudioDevice = nullptr;
    if (InWorld)
    {
        AudioDevice = InWorld->GetAudioDevice();
    }
    else
    {
        AudioDevice = GetMainAudioDevice();
    }

    if (AudioDevice && AudioDevice->Exec(InWorld, Cmd, Ar) == true)
    {
        return true;
    }

    if (FPlatformMisc::Exec( InWorld, Cmd,Ar) == true)
    {
        return true;
    }

#if ENABLE_LOW_LEVEL_MEM_TRACKER
    if (FLowLevelMemTracker::Get().Exec(Cmd, Ar))
    {
        return true;
    }
#endif

    {
        FString CultureName;
        if (FParse::Value(Cmd, TEXT("CULTURE="), CultureName))
        {
            FInternationalization::Get().SetCurrentCulture(CultureName);
            return true;
        }
    }

    {
        FString LanguageName;
        if (FParse::Value(Cmd, TEXT("LANGUAGE="), LanguageName))
        {
            FInternationalization::Get().SetCurrentLanguage(LanguageName);
            return true;
        }
    }

    {
        FString LocaleName;
        if (FParse::Value(Cmd, TEXT("LOCALE="), LocaleName))
        {
            FInternationalization::Get().SetCurrentLocale(LocaleName);
            return true;
        }
    }

#if ENABLE_LOC_TESTING
    {
        FString ConfigFilePath;
        if (FParse::Value(Cmd, TEXT("REGENLOC="), ConfigFilePath))
        {
            ILocalizationModule::Get().HandleRegenLocCommand(ConfigFilePath, /*bSkipSourceCheck*/false);
        }
    }
#endif

    // Handle engine command line.
    if ( FParse::Command(&Cmd,TEXT("FLUSHLOG")) )
    {
        return HandleFlushLogCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd, TEXT("GAMEVER")) ||  FParse::Command(&Cmd, TEXT("GAMEVERSION")))
    {
        return HandleGameVerCommand( Cmd, Ar );
    }
#if 0
    else if (FParse::Command(&Cmd, TEXT("HOTFIXTEST")))
    {
        FTestHotFixPayload Test;
        Test.ValueToReturn = true;
        Test.Result = false;
        Test.Message = FString(TEXT("Hi there"));
        FCoreDelegates::GetHotfixDelegate(EHotfixDelegates::Test).ExecuteIfBound(&Test, sizeof(FTestHotFixPayload));
        check(Test.ValueToReturn == Test.Result);
    }
#endif
    else if( FParse::Command(&Cmd,TEXT("STAT")) )
    {
        return HandleStatCommand(InWorld, GStatProcessingViewportClient, Cmd, Ar);
    }
    else if( FParse::Command(&Cmd,TEXT("STOPMOVIECAPTURE")) && GIsEditor )
    {
        return HandleStopMovieCaptureCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("CRACKURL")) )
    {
        return HandleCrackURLCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("DEFER")) )
    {
        return HandleDeferCommand( Cmd, Ar );
    }
    else if( FParse::Command( &Cmd, TEXT("OPEN") ) )
    {
        return HandleOpenCommand( Cmd, Ar, InWorld );
    }
    else if( FParse::Command( &Cmd, TEXT("STREAMMAP")) )
    {
        return HandleStreamMapCommand( Cmd, Ar, InWorld );
    }
#if WITH_SERVER_CODE
    else if (FParse::Command(&Cmd, TEXT("SERVERTRAVEL")) )
    {
        return HandleServerTravelCommand( Cmd, Ar, InWorld );
    }
#endif // WITH_SERVER_CODE
    else if( FParse::Command( &Cmd, TEXT("DISCONNECT")) )
    {
        return HandleDisconnectCommand( Cmd, Ar, InWorld );
    }
    else if( FParse::Command( &Cmd, TEXT("RECONNECT")) )
    {
        return HandleReconnectCommand( Cmd, Ar, InWorld );
    }
    else if( FParse::Command( &Cmd, TEXT("TRAVEL") ) )
    {
        return HandleTravelCommand( Cmd, Ar, InWorld );
    }
    else if (FParse::Command(&Cmd, TEXT("CE")))
    {
        return HandleCeCommand( InWorld, Cmd, Ar );
    }
    else if (FParse::Command(&Cmd, TEXT("GAMMA") ) )
    {
        return HandleGammaCommand( Cmd, Ar );
    }
#if STATS
    else if( FParse::Command( &Cmd, TEXT("DUMPPARTICLEMEM") ) )
    {
        return HandleDumpParticleMemCommand( Cmd, Ar );
    }
#endif

#if WITH_PROFILEGPU
    else if( FParse::Command(&Cmd,TEXT("PROFILEGPU")) )
    {
        return HandleProfileGPUCommand( Cmd, Ar );
    }    
#endif // #if !UE_BUILD_SHIPPING

#if    !(UE_BUILD_SHIPPING || UE_BUILD_TEST) && WITH_HOT_RELOAD
    else if( FParse::Command(&Cmd,TEXT("HotReload")) )
    {
        return HandleHotReloadCommand( Cmd, Ar );
    }
#endif // !(UE_BUILD_SHIPPING || UE_BUILD_TEST) && WITH_HOT_RELOAD


#if !UE_BUILD_SHIPPING
    else if (FParse::Command(&Cmd, TEXT("DumpConsoleCommands")))
    {
        return HandleDumpConsoleCommandsCommand( Cmd, Ar, InWorld );
    }
    else if (FParse::Command(&Cmd, TEXT("DUMPAVAILABLERESOLUTIONS")))
    {
        return HandleDumpAvailableResolutionsCommand( Cmd, Ar );
    }
    else if(FParse::Command(&Cmd,TEXT("ANIMSEQSTATS")))
    {
        return HandleAnimSeqStatsCommand( Cmd, Ar );
    }
    else if (FParse::Command(&Cmd,TEXT("CountDisabledParticleItems")))
    {
        return HandleCountDisabledParticleItemsCommand( Cmd, Ar );
    }
    else if( FParse::Command( &Cmd, TEXT("VIEWNAMES") ) )
    {
        return HandleViewnamesCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("FREEZESTREAMING")) )
    {
        return HandleFreezeStreamingCommand( Cmd, Ar, InWorld );
    }
    else if( FParse::Command(&Cmd,TEXT("FREEZEALL")) )
    {
        return HandleFreezeAllCommand( Cmd, Ar, InWorld );
    }

    else if( FParse::Command(&Cmd,TEXT("ToggleRenderingThread")) )
    {
        return HandleToggleRenderingThreadCommand( Cmd, Ar );
    }    
    else if (FParse::Command(&Cmd, TEXT("ToggleAsyncCompute")))
    {
        return HandleToggleAsyncComputeCommand(Cmd, Ar);
    }
    else if( FParse::Command(&Cmd,TEXT("RecompileShaders")) )                    
    {
        return HandleRecompileShadersCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("RecompileGlobalShaders")) )
    {
        return HandleRecompileGlobalShadersCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("DUMPSHADERSTATS")) )
    {
        return HandleDumpShaderStatsCommand( Cmd, Ar );        
    }
    else if( FParse::Command(&Cmd,TEXT("DUMPMATERIALSTATS")) )
    {
        return HandleDumpMaterialStatsCommand( Cmd, Ar );    
    }
    else if (FParse::Command(&Cmd, TEXT("DumpShaderPipelineStats")))
    {
        return HandleDumpShaderPipelineStatsCommand(Cmd, Ar);
    }
    else if (FParse::Command(&Cmd, TEXT("visrt")))
    {
        extern bool HandleVisualizeRT();
        return HandleVisualizeRT();
    }
    else if( FParse::Command(&Cmd,TEXT("PROFILE")) )
    {
        return HandleProfileCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("PROFILEGPUHITCHES")) )                    
    {
        return HandleProfileGPUHitchesCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("SHADERCOMPLEXITY")) )
    {
        return HandleShaderComplexityCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("FREEZERENDERING")) )
    {
        return HandleFreezeRenderingCommand( Cmd, Ar, InWorld );
    }
    else if (FParse::Command(&Cmd, TEXT("ShowSelectedLightmap")))
    {
        return HandleShowSelectedLightmapCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("SHOWLOG")) )
    {
        return HandleShowLogCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("STARTFPSCHART")) )
    {
        return HandleStartFPSChartCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("STOPFPSCHART")) )
    {
        return HandleStopFPSChartCommand( Cmd, Ar, InWorld );
    }
    else if (FParse::Command(&Cmd, TEXT("DumpLevelScriptActors")))
    {
        return HandleDumpLevelScriptActorsCommand( InWorld, Cmd, Ar );
    }
    else if (FParse::Command(&Cmd, TEXT("KE")) || FParse::Command(&Cmd, TEXT("KISMETEVENT")))
    {
        return HandleKismetEventCommand( InWorld, Cmd, Ar );
    }
    else if(FParse::Command(&Cmd,TEXT("LISTTEXTURES")))
    {
        return HandleListTexturesCommand( Cmd, Ar );
    }
    else if (FParse::Command(&Cmd, TEXT("LISTSTATICMESHES")))
    {
        return HandleListStaticMeshesCommand(Cmd, Ar);
    }
    else if (FParse::Command(&Cmd, TEXT("LISTSKELETALMESHES")))
    {
        return HandleListSkeletalMeshesCommand(Cmd, Ar);
    }
    else if (FParse::Command(&Cmd, TEXT("LISTANIMS")))
    {
        return HandleListAnimsCommand( Cmd, Ar );
    }
    else if(FParse::Command(&Cmd,TEXT("REMOTETEXTURESTATS")))
    {
        return HandleRemoteTextureStatsCommand( Cmd, Ar );
    }
    else if(FParse::Command(&Cmd,TEXT("LISTPARTICLESYSTEMS")))
    {
        return HandleListParticleSystemsCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("LISTSPAWNEDACTORS")) )
    {
        return HandleListSpawnedActorsCommand( Cmd, Ar, InWorld );
    }
    else if( FParse::Command( &Cmd, TEXT("MemReport") ) )
    {
        return HandleMemReportCommand( Cmd, Ar, InWorld );
    }
    else if( FParse::Command( &Cmd, TEXT("MemReportDeferred") ) )
    {
        return HandleMemReportDeferredCommand( Cmd, Ar, InWorld );
    }
    else if( FParse::Command( &Cmd, TEXT("PARTICLEMESHUSAGE") ) )
    {
        return HandleParticleMeshUsageCommand( Cmd, Ar );
    }
    else if( FParse::Command( &Cmd, TEXT("DUMPPARTICLECOUNTS") ) )
    {
        return HandleDumpParticleCountsCommand( Cmd, Ar );
    }
    // we can't always do an obj linkers, as cooked games have their linkers tossed out.  So we need to look at the actual packages which are loaded
    else if( FParse::Command( &Cmd, TEXT("ListLoadedPackages") ) )
    {
        return HandleListLoadedPackagesCommand( Cmd, Ar );
    }
    else if( FParse::Command( &Cmd,TEXT("MEM")) )
    {
        return HandleMemCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("LOGOUTSTATLEVELS")) )
    {
        return HandleLogoutStatLevelsCommand( Cmd, Ar, InWorld );
    }
    else if( FParse::Command( &Cmd, TEXT("DEBUG") ) )
    {
        return HandleDebugCommand( Cmd, Ar );
    }
    else if (FParse::Command(&Cmd,TEXT("MERGEMESH")))
    {
        return HandleMergeMeshCommand( Cmd, Ar, InWorld );
    }
    else if (FParse::Command(&Cmd, TEXT("CONTENTCOMPARISON")))
    {
        return HandleContentComparisonCommand( Cmd, Ar );
    }
    else if (FParse::Command(&Cmd, TEXT("TOGGLEGTPSYSLOD")))
    {
        return HandleTogglegtPsysLODCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("OBJ")) )
    {
        return HandleObjCommand( Cmd, Ar );
    }
    else if( FParse::Command( &Cmd, TEXT("TESTSLATEGAMEUI")) && InWorld && InWorld->IsGameWorld() )
    {
        return HandleTestslateGameUICommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("DIR")) )        // DIR [path\pattern]
    {
        return HandleDirCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("TRACKPARTICLERENDERINGSTATS")) )
    {
        return HandleTrackParticleRenderingStatsCommand( Cmd, Ar );
    }
    else if ( FParse::Command(&Cmd,TEXT("DUMPALLOCS")) )
    {
        return HandleDumpAllocatorStats( Cmd, Ar );
    }
    else if ( FParse::Command(&Cmd,TEXT("HEAPCHECK")) )
    {
        return HandleHeapCheckCommand( Cmd, Ar );
    }
    else if (FParse::Command(&Cmd,TEXT("TOGGLEONSCREENDEBUGMESSAGEDISPLAY")))
    {
        return HandleToggleOnscreenDebugMessageDisplayCommand( Cmd, Ar );
    }
    else if (FParse::Command(&Cmd,TEXT("TOGGLEONSCREENDEBUGMESSAGESYSTEM")))
    {
        return HandleToggleOnscreenDebugMessageSystemCommand( Cmd, Ar );
    }
    else if (FParse::Command(&Cmd,TEXT("DISABLEALLSCREENMESSAGES")) || FParse::Command(&Cmd,TEXT("DISABLESCREENMESSAGES")))
    {
        return HandleDisableAllScreenMessagesCommand( Cmd, Ar );
    }
    else if (FParse::Command(&Cmd,TEXT("ENABLEALLSCREENMESSAGES")) || FParse::Command(&Cmd,TEXT("ENABLESCREENMESSAGES")))
    {
        return HandleEnableAllScreenMessagesCommand( Cmd, Ar );
    }
    else if (FParse::Command(&Cmd,TEXT("TOGGLEALLSCREENMESSAGES")) || FParse::Command(&Cmd,TEXT("TOGGLESCREENMESSAGES")) || FParse::Command(&Cmd,TEXT("CAPTUREMODE")))
    {
        return HandleToggleAllScreenMessagesCommand( Cmd, Ar );
    }
    else if( FParse::Command(&Cmd,TEXT("CONFIGHASH")) )
    {
        return HandleConfigHashCommand( Cmd, Ar );
    }
    else if ( FParse::Command(&Cmd,TEXT("CONFIGMEM")) )
    {
        return HandleConfigMemCommand( Cmd, Ar );
    }
    else if (FParse::Command(&Cmd, TEXT("GETINI")))
    {
        return HandleGetIniCommand(Cmd, Ar);
    }
#endif // !UE_BUILD_SHIPPING

    else if ( FParse::Command(&Cmd,TEXT("SCALABILITY")) )
    {
        Scalability::ProcessCommand(Cmd, Ar);
        return true;
    }
    else if(IConsoleManager::Get().ProcessUserConsoleInput(Cmd, Ar, InWorld))
    {
        // console variable interaction (get value, set value or get help)
        return true;
    }
    else if (!IStreamingManager::HasShutdown() && IStreamingManager::Get().Exec( InWorld, Cmd,Ar ))
    {
        // The streaming manager has handled the exec command.
    }
    else if( FParse::Command(&Cmd, TEXT("DUMPTICKS")) )
    {
        return HandleDumpTicksCommand( InWorld, Cmd, Ar );
    }
    else if (FParse::Command(&Cmd, TEXT("CANCELASYNCLOAD")))
    {
        CancelAsyncLoading();
        return true;
    }
#if USE_NETWORK_PROFILER
    else if( FParse::Command(&Cmd,TEXT("NETPROFILE")) )
    {
        GNetworkProfiler.Exec( InWorld, Cmd, Ar );
    }
#endif
    else 
    {
        return false;
    }

    return true;
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值