Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- UWorld* CreateWorld()
- {
- uint32 RandomInt = FMath::RandRange(0, 9000);
- FString WorldName = FString::Printf(TEXT("ProceduralWorld_%d"), RandomInt);
- UPackage* Package = CreatePackage(*(FString::Printf(TEXT("/Game/World/%s"),*WorldName)));
- UWorldFactory* WorldFactory = NewObject<UWorldFactory>();
- UObject* ObjectWorld = WorldFactory->FactoryCreateNew(WorldFactory->SupportedClass, Package, *WorldName, EObjectFlags::RF_Standalone | EObjectFlags::RF_Public, nullptr, GWarn);
- UWorld* World = Cast<UWorld>(ObjectWorld);
- FAssetRegistryModule::AssetCreated(ObjectWorld);
- World->MarkPackageDirty();
- return World;
- }
- void FProceduralWorldModule::ParseMap()
- {
- GenWorld = CreateWorld();
- FString FileName = FString(TEXT("C:\\Users\\andre\\Desktop\\Texture_UE\\Mappa.png"));
- TArray<uint8> Buffer;
- FFileHelper::LoadFileToArray(Buffer, *FileName);
- UTexture2D* Texture = FImageUtils::ImportBufferAsTexture2D(Buffer);
- ADirectionalLight* Directional = GenWorld->SpawnActor<ADirectionalLight>();
- Directional->SetMobility(EComponentMobility::Movable);
- AStaticMeshActor* AFloor = GenWorld->SpawnActor<AStaticMeshActor>(Floor->GeneratedClass);
- FVector FloorSize = AFloor->GetStaticMeshComponent()->GetStaticMesh()->GetBounds().GetBox().GetSize();
- FVector FloorLocation = FVector(0, 0, 0);
- FloorLocation.X = ((Texture->GetSizeX() / 2) * 100) - 50;
- FloorLocation.Y = ((Texture->GetSizeY() / 2) * 100) - 50;
- FloorLocation.Z = -50;
- AFloor->SetActorLocation(FloorLocation);
- const FColor* FormatedImageData = static_cast<const FColor*>(Texture->PlatformData->Mips[0].BulkData.LockReadOnly());
- for (int32 X = 0; X < Texture->GetSizeX(); X++)
- {
- for (int32 Y = 0; Y < Texture->GetSizeY(); Y++)
- {
- FColor PixelColor = FormatedImageData[Y * Texture->GetSizeX() + X];
- ParseColor(PixelColor, X, Y);
- }
- }
- Texture->PlatformData->Mips[0].BulkData.Unlock();
- }
- bool FProceduralWorldModule::Exec(UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar)
- {
- if (FParse::Command(&Cmd, TEXT("Create")))
- {
- UPluginSettings* PluginSettings = GetMutableDefault<UPluginSettings>();
- DefaultWall = LoadObject<UBlueprint>(nullptr, *(PluginSettings->DefaultWall.GetAssetPathString()));
- DestroyableWall = LoadObject<UBlueprint>(nullptr, *(PluginSettings->DestroyableWall.GetAssetPathString()));
- Floor = LoadObject<UBlueprint>(nullptr, *(PluginSettings->Floor.GetAssetPathString()));
- ParseMap();
- return true;
- }
- return false;
- }
- void FProceduralWorldModule::ParseColor(FColor Color,int32 X, int32 Y)
- {
- FVector Offset = FVector(100,100, 0);
- if (Color.B == 255)
- {
- AStaticMeshActor* Spawned = GenWorld->SpawnActor<AStaticMeshActor>(DefaultWall->GeneratedClass);
- Spawned->SetActorLocation(FVector(X, Y, 0) * Offset);
- }
- else if (Color.R == 255)
- {
- AStaticMeshActor* Spawned = GenWorld->SpawnActor<AStaticMeshActor>(DestroyableWall->GeneratedClass);
- Spawned->SetActorLocation(FVector(X, Y, 0) * Offset);
- }
- }
- #undef LOCTEXT_NAMESPACE
- IMPLEMENT_MODULE(FProceduralWorldModule, ProceduralWorld)
Advertisement
Add Comment
Please, Sign In to add comment