“初始化俯视角工程,带puerts,未编过”
This commit is contained in:
+164
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making Puerts available.
|
||||
* Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
* Puerts is licensed under the BSD 3-Clause License, except for the third-party components listed in the file 'LICENSE' which may
|
||||
* be subject to their corresponding license terms. This file is subject to the terms and conditions defined in file 'LICENSE',
|
||||
* which is part of this source code package.
|
||||
*/
|
||||
|
||||
#include "CoreUObject.h"
|
||||
#include "Features/IModularFeatures.h"
|
||||
#include "Runtime/Launch/Resources/Version.h"
|
||||
#if ENGINE_MAJOR_VERSION < 5 || ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION < 2
|
||||
#include "IScriptGeneratorPluginInterface.h"
|
||||
#endif
|
||||
#include "Runtime/Launch/Resources/Version.h"
|
||||
#include "PropertyMacros.h"
|
||||
|
||||
#define LOCTEXT_NAMESPACE "FParamDefaultValueMetasModule"
|
||||
|
||||
class FParamDefaultValueMetasModule
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 2
|
||||
: public IModuleInterface
|
||||
#else
|
||||
: public IScriptGeneratorPluginInterface
|
||||
#endif
|
||||
{
|
||||
#if ENGINE_MAJOR_VERSION < 5 || ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION < 2
|
||||
public:
|
||||
virtual void StartupModule() override
|
||||
{
|
||||
IModularFeatures::Get().RegisterModularFeature(TEXT("ScriptGenerator"), this);
|
||||
}
|
||||
virtual void ShutdownModule() override
|
||||
{
|
||||
IModularFeatures::Get().UnregisterModularFeature(TEXT("ScriptGenerator"), this);
|
||||
}
|
||||
virtual FString GetGeneratedCodeModuleName() const override
|
||||
{
|
||||
return TEXT("JsEnv");
|
||||
}
|
||||
virtual bool SupportsTarget(const FString& TargetName) const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool ShouldExportClassesForModule(
|
||||
const FString& ModuleName, EBuildModuleType::Type ModuleType, const FString& ModuleGeneratedIncludeDirectory) const override
|
||||
{
|
||||
return ModuleType == EBuildModuleType::EngineRuntime ||
|
||||
ModuleType == EBuildModuleType::GameRuntime; // only 'EngineRuntime' and 'GameRuntime' are valid
|
||||
}
|
||||
|
||||
virtual void Initialize(const FString& RootLocalPath, const FString& RootBuildPath, const FString& OutputDirectory,
|
||||
const FString& IncludeBase) override
|
||||
{
|
||||
if (Finished)
|
||||
return;
|
||||
// UE_LOG(LogTemp, Warning, TEXT("FParamDefaultValueMetasModule OutputDirectory: %s, IncludeBase:%s"), *OutputDirectory,
|
||||
// *IncludeBase);
|
||||
GeneratedFileContent.Empty();
|
||||
OutputDir = OutputDirectory;
|
||||
}
|
||||
|
||||
virtual void ExportClass(
|
||||
UClass* Class, const FString& SourceHeaderFilename, const FString& GeneratedHeaderFilename, bool bHasChanged) override
|
||||
{
|
||||
if (Finished)
|
||||
return;
|
||||
if (Class->HasAnyClassFlags(CLASS_Interface))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (TFieldIterator<UFunction> FuncIt(Class, EFieldIteratorFlags::ExcludeSuper, EFieldIteratorFlags::ExcludeDeprecated);
|
||||
FuncIt; ++FuncIt)
|
||||
{
|
||||
UFunction* Function = *FuncIt;
|
||||
FuncDefGened = false;
|
||||
|
||||
TMap<FName, FString>* MetaMap = UMetaData::GetMapForObject(Function);
|
||||
if (!MetaMap)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (TFieldIterator<PropertyMacro> ParamIt(Function); ParamIt; ++ParamIt)
|
||||
{
|
||||
auto Property = *ParamIt;
|
||||
|
||||
FName KeyName = FName(*FString::Printf(TEXT("CPP_Default_%s"), *Property->GetName()));
|
||||
FString* ValuePtr = MetaMap->Find(KeyName);
|
||||
|
||||
if (ValuePtr)
|
||||
{
|
||||
FString EscapeValue = (*ValuePtr).Replace(TEXT("\""), TEXT("\\\""));
|
||||
if (Property->IsA<BoolPropertyMacro>())
|
||||
{
|
||||
EscapeValue = EscapeValue.Replace(TEXT("true"), TEXT("True")).Replace(TEXT("false"), TEXT("False"));
|
||||
}
|
||||
MakesureFunctinMeteExisted(Class, Function);
|
||||
GeneratedFileContent +=
|
||||
FString::Printf(TEXT("PF->Add(TEXT(\"%s\"), TEXT(\"%s\"));\r\n"), *Property->GetName(), *EscapeValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ClassDefGened)
|
||||
{
|
||||
ClassDefGened = false;
|
||||
|
||||
GeneratedFileContent += TEXT("\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
virtual void FinishExport() override
|
||||
{
|
||||
if (Finished)
|
||||
return;
|
||||
const FString FilePath = FString::Printf(TEXT("%s%s"), *OutputDir, TEXT("InitParamDefaultMetas.inl"));
|
||||
// UE_LOG(LogTemp, Error, TEXT("save to: %s"), *FilePath);
|
||||
// UE_LOG(LogTemp, Error, TEXT("context: %s"), *GeneratedFileContent);
|
||||
FString FileContent;
|
||||
bool bResult = FFileHelper::LoadFileToString(FileContent, *FilePath);
|
||||
if (!bResult || FileContent != GeneratedFileContent)
|
||||
{
|
||||
bResult = FFileHelper::SaveStringToFile(GeneratedFileContent, *FilePath);
|
||||
check(bResult);
|
||||
}
|
||||
Finished = true;
|
||||
}
|
||||
|
||||
virtual FString GetGeneratorName() const override
|
||||
{
|
||||
return TEXT("Puerts Parameter DefaultValue Metas Generator");
|
||||
}
|
||||
|
||||
private:
|
||||
bool ClassDefGened = false;
|
||||
bool FuncDefGened = false;
|
||||
|
||||
void MakesureFunctinMeteExisted(UClass* InClass, UFunction* InFunction)
|
||||
{
|
||||
if (!ClassDefGened)
|
||||
{
|
||||
GeneratedFileContent += FString::Printf(TEXT("PC = &ParamDefaultMetas.Add(TEXT(\"%s\"));\r\n"), *InClass->GetName());
|
||||
ClassDefGened = true;
|
||||
}
|
||||
if (!FuncDefGened)
|
||||
{
|
||||
GeneratedFileContent += FString::Printf(TEXT("PF = &PC->Add(TEXT(\"%s\"));\r\n"), *InFunction->GetName());
|
||||
FuncDefGened = true;
|
||||
}
|
||||
}
|
||||
|
||||
FString OutputDir;
|
||||
FString GeneratedFileContent;
|
||||
|
||||
bool Finished = false;
|
||||
#endif
|
||||
};
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
|
||||
IMPLEMENT_MODULE(FParamDefaultValueMetasModule, ParamDefaultValueMetas)
|
||||
Reference in New Issue
Block a user