“初始化俯视角工程,带puerts,未编过”

This commit is contained in:
2024-12-01 02:11:25 +08:00
parent 04698dd585
commit 850d76173c
1491 changed files with 271579 additions and 0 deletions
@@ -0,0 +1,90 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "PEDirectoryWatcher.h"
#include "DirectoryWatcherModule.h"
#include "Modules/ModuleManager.h"
#include "HAL/FileManager.h"
#include "Misc/SecureHash.h"
UPEDirectoryWatcher::UPEDirectoryWatcher()
{
this->AddToRoot();
}
bool UPEDirectoryWatcher::Watch(const FString& InDirectory)
{
Directory = FPaths::IsRelative(InDirectory) ? FPaths::ConvertRelativePathToFull(InDirectory) : InDirectory;
// UE_LOG(LogTemp, Warning, TEXT("PEDirectoryWatcher::Watch: %s"), *InDirectory);
if (IFileManager::Get().DirectoryExists(*Directory))
{
auto Changed = IDirectoryWatcher::FDirectoryChanged::CreateLambda(
[&](const TArray<FFileChangeData>& FileChanges)
{
TArray<FString> Added;
TArray<FString> Modified;
TArray<FString> Removed;
for (auto Change : FileChanges)
{
//因为要算md5,所有过滤掉不关心的
if (!Change.Filename.EndsWith(TEXT(".ts")) && !Change.Filename.EndsWith(TEXT(".mts")) &&
!Change.Filename.EndsWith(TEXT(".tsx")) && !Change.Filename.EndsWith(TEXT(".json")) &&
!Change.Filename.EndsWith(TEXT(".js")))
{
continue;
}
FPaths::NormalizeFilename(Change.Filename);
Change.Filename = FPaths::ConvertRelativePathToFull(Change.Filename);
switch (Change.Action)
{
case FFileChangeData::FCA_Added:
if (Added.Contains(Change.Filename))
continue;
Added.Add(Change.Filename);
break;
case FFileChangeData::FCA_Modified:
if (Modified.Contains(Change.Filename))
continue;
Modified.Add(Change.Filename);
break;
case FFileChangeData::FCA_Removed:
if (Removed.Contains(Change.Filename))
continue;
Removed.Add(Change.Filename);
break;
default:
continue;
}
}
if (Added.Num() || Modified.Num() || Removed.Num())
{
OnChanged.Broadcast(Added, Modified, Removed);
}
});
FDirectoryWatcherModule& DirectoryWatcherModule =
FModuleManager::Get().LoadModuleChecked<FDirectoryWatcherModule>(TEXT("DirectoryWatcher"));
IDirectoryWatcher* DirectoryWatcher = DirectoryWatcherModule.Get();
DirectoryWatcher->RegisterDirectoryChangedCallback_Handle(
Directory, Changed, DelegateHandle, IDirectoryWatcher::IncludeDirectoryChanges);
return true;
}
return false;
}
void UPEDirectoryWatcher::UnWatch()
{
if (DelegateHandle.IsValid())
{
FDirectoryWatcherModule& DirectoryWatcherModule =
FModuleManager::Get().LoadModuleChecked<FDirectoryWatcherModule>(TEXT("DirectoryWatcher"));
IDirectoryWatcher* DirectoryWatcher = DirectoryWatcherModule.Get();
DirectoryWatcher->UnregisterDirectoryChangedCallback_Handle(Directory, DelegateHandle);
Directory = TEXT("");
}
}
UPEDirectoryWatcher::~UPEDirectoryWatcher()
{
UnWatch();
}