当前位置: 首页 > wzjs >正文

苏州做网站最好公司网站代理公司

苏州做网站最好公司,网站代理公司,东莞浩智专业网站建设哪家好,网站根目录三.当房屋生成成功,我们就需要把TMap里的数据存到数据库里。不然一点停止运行,就会所以数据都不见了。这里使用DataTable来存储。 1.DataTable是UE常用的表,虽然不是专门用来存档的,但也可以这么用。 DataTable表,实…

三.当房屋生成成功,我们就需要把TMap里的数据存到数据库里。不然一点停止运行,就会所以数据都不见了。这里使用DataTable来存储。

1.DataTable是UE常用的表,虽然不是专门用来存档的,但也可以这么用。

DataTable表,实际是每一行的名字,对于每一行的内容。它可以根据你的结构体自动转换为表的每一行。

我们首先创造结构体,继承自TableRowBase。就是表行的基类,里面的数据类型,和TMap里BuildInfo保持一致,方便同步。

struct  FBuildTableStruct:public FTableRowBase
{GENERATED_USTRUCT_BODY();UPROPERTY(EditAnywhere)int ID = 0;//类型UPROPERTY(EditAnywhere, BlueprintReadWrite)FString Type =  "";UPROPERTY(EditAnywhere, BlueprintReadWrite)int Area = 100;//使用人数()//蓝图可访问通信UPROPERTY(EditAnywhere, BlueprintReadWrite)int ResidentPopulation = 100;//价值()
//蓝图可访问通信UPROPERTY(EditAnywhere, BlueprintReadWrite)int Pirce = 100;//位置//蓝图可访问通信UPROPERTY(EditAnywhere, BlueprintReadWrite)FVector Position = FVector::Zero();//方位//蓝图可访问通信UPROPERTY(EditAnywhere, BlueprintReadWrite)FRotator Rotation = FRotator::ZeroRotator;// 大小//蓝图可访问通信UPROPERTY(EditAnywhere, BlueprintReadWrite)FVector Scale = FVector(1, 1, 1);};

创建表,并选择表里的每一行的数据是上面的结构体。

表里的RowName,是系统自动添加的用于标识每一行。一开始表是空的,这是已经存入数据后的样子。

2.我们就写一个ATableManagerActor来管理存储。前面的是通用的,对表Tablet的数据进行增删查改。后面是根据不同的需求,封装了前面对表操作的功能。核心目的就是把 TMap里的数据,随时同步到Table里去。

 ATableManagerActor : public AActor
{GENERATED_BODY()public:	// Sets default values for this actor's propertiesATableManagerActor();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:	// Called every framevirtual void Tick(float DeltaTime) override;UFUNCTION(BlueprintCallable, DisplayName = "clearDataTable", Category = "DataTable")void clearDataTable(UDataTable* DataTable);UFUNCTION(BlueprintCallable, DisplayName = "addDataTableRow", Category = "DataTable")void addDataTableRow(UDataTable* DataTable, FName rowName, const FBuildTableStruct& row);UFUNCTION(BlueprintCallable, DisplayName = "removeDataTableRow", Category = "DataTable")void removeDataTableRow(UDataTable* DataTable, FName rowName);UFUNCTION(BlueprintCallable,DisplayName = "EditeDataTableRow",Category = "DataTable")void editeDataTableRow(FBuildTableStruct tmp);//从表里拿所有的信息UFUNCTION(BlueprintCallable, DisplayName = "findAllRow", Category = "DataTable")void findAllRow();//从表里拿删除所有的信息UFUNCTION(BlueprintCallable, DisplayName = "findAllRow", Category = "DataTable")void deletAllRow();UFUNCTION(BlueprintCallable, DisplayName = "saveToALLTable", Category = "DataTable")void saveToALLTable();UFUNCTION(BlueprintCallable, DisplayName = "DataTableToCSV", Category = "DataTable")void DataTableToCSV();UFUNCTION(BlueprintCallable, DisplayName = "DataTableToCSV", Category = "DataTable")FBuildTableStruct GetBuildInfoFromDT(int ID);UFUNCTION(BlueprintCallable, DisplayName = "DataTableToCSV", Category = "DataTable")void CommiteBuildInfo();UFUNCTION(BlueprintCallable, DisplayName = "Inittial", Category = "DataTable")void Inittial();UFUNCTION(BlueprintCallable, DisplayName = "ShowClickBuild",Category = "DataTable")void ShowClickBuildInfo(ABuildBase* curBuid);UFUNCTION()void SetBuildEditUI(ULZJUserWidget* UI);UPROPERTY()UDataTable* BuildInfoDataTable;UPROPERTY()TMap<int,FBuildTableStruct> Rows;UPROPERTY()UBuildManagerInstance* BuildManagerIns;UPROPERTY()UBuildFactory* BuildFactory;//UPROPERTY()ABuildBase* ClickBuild;UPROPERTY()FBuildTableStruct ClicBuildInfo;UPROPERTY()ULZJUserWidget* BuildEditUI;bool isClick;
};

3.我们开始实现,每一行数据存入表中。首先拿到表的资源,再拿到上篇文章的 房屋管理者。然后实现,对表的增删查改。当房屋管理者的TMap发生改变,也对表里的数据进行同样操作。

// Called when the game starts or when spawned
void ATableManagerActor::BeginPlay()
{Super::BeginPlay();BuildInfoDataTable = LoadObject<UDataTable>(this, TEXT("/Script/Engine.DataTable'/LZJCore/DTBuildInfo.DTBuildInfo'"));findAllRow();BuildManagerIns = GetWorld()->GetGameInstance()->GetSubsystem<UBuildManagerInstance>();BuildFactory = GetWorld()->GetGameInstance()->GetSubsystem<UBuildFactory>();//TArray<AActor*> TBActors;//UGameplayStatics::GetAllActorsOfClass(GetWorld(), ATableManagerActor::StaticClass(), TBActors);TArray<UUserWidget*> Actors;//TArray<UUserWidget*>& FoundWidgets, TSubclassOf<UUserWidget> WidgetClass,UWidgetBlueprintLibrary::GetAllWidgetsOfClass(GetWorld(), Actors, ULZJUserWidget::StaticClass());if (!Actors.IsEmpty()){BuildEditUI = Cast<ULZJUserWidget>(Actors[0]);}
}// Called every frame
void ATableManagerActor::Tick(float DeltaTime)
{Super::Tick(DeltaTime);}void ATableManagerActor::clearDataTable(UDataTable* DataTable)
{if (DataTable == nullptr){return;}DataTable->EmptyTable();DataTable->GetOutermost()->MarkPackageDirty();
}void ATableManagerActor::addDataTableRow(UDataTable* DataTable, FName rowName, const FBuildTableStruct& row)
{if (DataTable == nullptr){return;}DataTable->AddRow(rowName, row);DataTable->GetOutermost()->MarkPackageDirty();
}void ATableManagerActor::removeDataTableRow(UDataTable* DataTable, FName rowName)
{if (DataTable == nullptr){return;}DataTable->RemoveRow(rowName);DataTable->GetOutermost()->MarkPackageDirty();
}void ATableManagerActor::editeDataTableRow(FBuildTableStruct tmp)
{if (BuildInfoDataTable->IsValidLowLevel()){FString Str = FString::FromInt(tmp.ID);  // 行名FName RowName = FName(Str);FBuildTableStruct* RowData = BuildInfoDataTable->FindRow<FBuildTableStruct>(RowName, TEXT("Context"));if (RowData){RowData->Area = tmp.Area;RowData->Pirce = tmp.Pirce;RowData->ResidentPopulation = tmp.ResidentPopulation;//RowData->= tmp.Area;BuildInfoDataTable->MarkPackageDirty(); // 标记为需要保存}}}void ATableManagerActor::findAllRow()
{if (BuildInfoDataTable->IsValidLowLevel()){//BuildInfoDataTable->GetTableData();if (!BuildInfoDataTable) return;TArray<FName>  RowNames = BuildInfoDataTable->GetRowNames();for (const auto& Name : RowNames){for (auto it : BuildInfoDataTable->GetRowMap()){FString rowName = (it.Key).ToString();//FBuildTableStruct为你的FStructFBuildTableStruct* pRow = (FBuildTableStruct*)it.Value;//输出需根据你的FStruct进行调整//UE_LOG(LogTemp, Warning, TEXT("read by traversal --- RowName:%s, Name:%s, price:%d, introduct:%s"), *rowName, *(pRow->ID), pRow->ProductPrice, *(pRow->ProductIntroduce));Rows.Add(pRow->ID,*pRow);}}}
}void ATableManagerActor::deletAllRow()
{}void ATableManagerActor::saveToALLTable()
{if (BuildInfoDataTable->IsValidLowLevel()){//BuildInfoDataTable->GetTableData();if (!BuildInfoDataTable) return;TArray<FName>  RowNames = BuildInfoDataTable->GetRowNames();TMap<int, ABuildBase*> Cpoy = BuildManagerIns->m_TargetMap;   //拷贝值for (auto& Elem : Cpoy){ABuildBase* curBuildBase = Elem.Value;FBuildTableStruct* BuildInfo = new FBuildTableStruct(); //结构体BuildInfo->ID = curBuildBase->m_targetID;FString IntString = FString::FromInt(BuildInfo->ID);FName RowName = FName(*IntString);BuildInfo->Area = curBuildBase->m_Area;BuildInfo->ResidentPopulation = curBuildBase->m_ResidentPopulation;BuildInfo->Pirce = curBuildBase->m_Price;//BuildInfo->ResidentPopulation = curBuildBase->m_ResidentPopulation;BuildInfo->Type = curBuildBase->m_Type;BuildInfo->Position = curBuildBase->m_Position;BuildInfo->Rotation = curBuildBase->m_Rotation;BuildInfoDataTable->AddRow(RowName, *BuildInfo);}保存为资产/*FString PackageName = TEXT("/Game/Data/DynamicDataTable");UPackage* Package = CreatePackage(*PackageName);DynamicDataTable->Rename(*FPaths::GetBaseFilename(PackageName), Package);Package->MarkPackageDirty();FAssetRegistryModule::AssetCreated(DynamicDataTable);FString PackageFileName = FPackageName::LongPackageNameToFilename(PackageName, FPackageName::GetAssetPackageExtension());bool bSaved = UPackage::SavePackage(Package,DynamicDataTable,RF_Public | RF_Standalone,*PackageFileName);if (bSaved){UE_LOG(LogTemp, Log, TEXT("Dynamic DataTable saved successfully!"));}*///UPackage* Package = FindPackage(nullptr, *FPackageName::FilenameToLongPackageName(BuildInfoDataTable->GetPathName()));//if (Package)//{//	Package->SetDirtyFlag(true);//const TSoftObjectPtr<UDataTable> SourceDataTable = BuildInfoDataTable;//UEditorAssetLibrary::SaveAsset(SourceDataTable, false);//}}/*Tarray<UPackage*>PackageToSave;PackageToSave.Add(Table->GetOutermost());FEditorFileUtils::EPromptReturnCode RetValue = FEditorFileUtils::PromptForCheckoutAndSave(PackageToSave, false, false);*/TArray<UPackage*> PackagesToSave;PackagesToSave.Add(BuildInfoDataTable->GetOutermost());FEditorFileUtils::PromptForCheckoutAndSave(PackagesToSave, false, /*bPromptToSave=*/ false);
}void ATableManagerActor::DataTableToCSV()
{FString Path = FPaths::ProjectDir() + TEXT("DataDrive/UserInfo2.csv");Path = FPaths::ConvertRelativePathToFull(*Path);FPlatformFileManager::Get().Get().GetPlatformFile().DeleteFile(*Path);if (BuildInfoDataTable){FString CSVString = BuildInfoDataTable->GetTableAsCSV();FString CSVPath = FPaths::ProjectDir() + TEXT("DataDrive/UserInfo2.csv");FFileHelper::SaveStringToFile(CSVString, *CSVPath, FFileHelper::EEncodingOptions::ForceUTF8);}
}FBuildTableStruct ATableManagerActor::GetBuildInfoFromDT(int ID)
{FBuildTableStruct tmp;if (BuildInfoDataTable->IsValidLowLevel()){FString Str = FString::FromInt(ID);  // 行名FName RowName = FName(Str);FBuildTableStruct* RowData = BuildInfoDataTable->FindRow<FBuildTableStruct>(RowName, TEXT("Context"));if (RowData){// 使用找到的数据UE_LOG(LogTemp, Warning, TEXT("Health: %d"), RowData->ID);tmp = *RowData;}else{UE_LOG(LogTemp, Warning, TEXT("Row not found!"));}}return tmp;
}void ATableManagerActor::CommiteBuildInfo()
{FBuildTableStruct tmp;}void ATableManagerActor::Inittial()
{findAllRow();//TMap<int, FBuildTableStruct> Rows;// 假设MyMap已有数据...//BuildManagerIns->InitialBuilds(Rows);//for (auto It = Rows.CreateIterator(); It; ++It) {//	int ID = It.Key();   // 获取键//	FBuildTableStruct Build = It.Value(); // 获取值//	//UE_LOG(LogTemp, Warning, TEXT("Key: %s, Value: %d"), *Key, Value);//}BuildFactory->InitialBuilds(Rows);
}//拿到点击的 ID,并查表拿到它的建筑的信息》
void ATableManagerActor::ShowClickBuildInfo(ABuildBase* curBuid)
{if (curBuid->IsValidLowLevel()){int ID = curBuid->m_targetID;ClicBuildInfo = GetBuildInfoFromDT(ID);isClick = true;if (BuildEditUI){BuildEditUI->ShowEditBuildInfo(ClicBuildInfo);}}else{return;}isClick = false;
}void ATableManagerActor::SetBuildEditUI(ULZJUserWidget* UI)
{BuildEditUI = UI;
}

http://www.dtcms.com/wzjs/491249.html

相关文章:

  • wordpress访问有的目录500佛山做优化的公司
  • 微信备份如何转换为wordpressseo推广的公司
  • 厦门翔安区建设局网站企业网站有哪些功能
  • wordpress购买用户组网站seo优化外包
  • 大庆市建设中等职业技术学校网站成都专门做网站的公司
  • b2b商城网站建设域名批量查询系统
  • 基于web旅游网站的建设优化网站搜索排名
  • 最牛免费网站建设宁波seo外包公司
  • 外包做网站怎么拿源代码淘宝seo软件
  • 苏州疫情seo网上培训
  • 怎么做h5动态页面广州seo网站
  • 专业代做简历网站互联网营销的方法有哪些
  • 2017网站建设方案百度竞价什么意思
  • 做网站对于不同的分辨率内存优化大师
  • 启源网站建设百度小说风云榜首页
  • 网站关键词广州seo软件
  • 网站建设后怎么酒店营销策划与运营
  • wordpress 彩色序号网络优化工作内容
  • 县政府网站集约化建设情况网店运营培训哪里好
  • 推荐做网站的话术企业文化
  • 哪种类型的网站比较难做软件培训机构哪家好
  • 做行测的网站搜索引擎的工作原理分为
  • 邦策网站建设网站建设公司排行榜
  • 河北建设厅网站网站搭建源码
  • 公司网站服务器维护厦门seo大佬
  • 网站建设公司哈百度极速版
  • 网站推广的方式?在线刷seo
  • 做网站不懂行情 怎么收费搜索引擎优化自然排名
  • 什么网站推广比较好自助搭建平台
  • 深圳网站建设方案维护青岛推广优化