From 9a9675fa6d143df518ae63f3fa26067995a2eff0 Mon Sep 17 00:00:00 2001 From: 997146918 <997146918@qq.com> Date: Mon, 30 Jun 2025 10:11:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=9F=E6=88=90=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E6=AC=A1=E6=95=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Plugins/AIGC/Source/AIGC/AIGC.Build.cs | 6 +- .../Source/AIGC/Private/WebSocketManager.cpp | 2 +- .../Source/AIGC/Private/Widget/AIGCWindow.cpp | 61 +++++++++++----- .../Private/Widget/ConfigItem_NumberSpin.cpp | 6 ++ ...nfigItemWidget.cpp => ConfigItem_Text.cpp} | 4 +- .../Source/AIGC/Public/Widget/AIGCWindow.h | 21 +++--- .../Public/Widget/ConfigItem_NumberSpin.h | 71 +++++++++++++++++++ .../{ConfigItemWidget.h => ConfigItem_Text.h} | 4 +- 8 files changed, 143 insertions(+), 32 deletions(-) create mode 100644 TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_NumberSpin.cpp rename TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/{ConfigItemWidget.cpp => ConfigItem_Text.cpp} (86%) create mode 100644 TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_NumberSpin.h rename TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/{ConfigItemWidget.h => ConfigItem_Text.h} (84%) diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/AIGC.Build.cs b/TestForAIGC/Plugins/AIGC/Source/AIGC/AIGC.Build.cs index e2c13e0..3acccb1 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/AIGC.Build.cs +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/AIGC.Build.cs @@ -28,6 +28,9 @@ public class AIGC : ModuleRules { "Core", // ... add other public dependencies that you statically link with here ... + "SlateCore", + "Slate", + "InputCore" } ); @@ -37,8 +40,7 @@ public class AIGC : ModuleRules { "CoreUObject", "Engine", - "Slate", - "SlateCore", + // ... add private dependencies that you statically link with here ... "EditorStyle", "ToolMenus", diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/WebSocketManager.cpp b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/WebSocketManager.cpp index dede2de..f2bd74d 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/WebSocketManager.cpp +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/WebSocketManager.cpp @@ -46,7 +46,7 @@ void UWebSocketManager::HandleConnectionError(const FString& ErrorReason) void UWebSocketManager::HandleOnMessageSend(const FString& Message) { - UE_LOG(LogTemp, Warning, TEXT("Send Text %s to WebSocket Server "), *Message); + //UE_LOG(LogTemp, Warning, TEXT("Send Text %s to WebSocket Server "), *Message); } void UWebSocketManager::HandleOnReceiveText(const FString& Message) diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/AIGCWindow.cpp b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/AIGCWindow.cpp index 06f0a2c..919784a 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/AIGCWindow.cpp +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/AIGCWindow.cpp @@ -19,7 +19,7 @@ void SAIGCWindow::Construct(const FArguments& InArgs) .AutoHeight() .Padding(10) [ - SAssignNew(ServerIP, SConfigItemWidget) + SAssignNew(ServerIP, SConfigItem_Text) .Title(LOCTEXT("Server", "服务器ip")) .HintText(LOCTEXT("HintServer", "请输入服务器ip")) .DefaultText(LOCTEXT("InputServer", "127.0.0.1")) @@ -28,7 +28,7 @@ void SAIGCWindow::Construct(const FArguments& InArgs) .AutoHeight() .Padding(10) [ - SAssignNew(DataName, SConfigItemWidget) + SAssignNew(DataName, SConfigItem_Text) .Title(LOCTEXT("DataName", "配表名称")) .HintText(LOCTEXT("HintDataName", "请输入配表名称")) ] @@ -36,7 +36,7 @@ void SAIGCWindow::Construct(const FArguments& InArgs) .AutoHeight() .Padding(10) [ - SAssignNew(NPCName1, SConfigItemWidget) + SAssignNew(NPCName1, SConfigItem_Text) .Title(LOCTEXT("Name1", "名称1")) .HintText(LOCTEXT("HintName", "请输入名称")) ] @@ -44,7 +44,7 @@ void SAIGCWindow::Construct(const FArguments& InArgs) .AutoHeight() .Padding(10) [ - SAssignNew(NPCJob1, SConfigItemWidget) + SAssignNew(NPCJob1, SConfigItem_Text) .Title(LOCTEXT("Job1", "职业1")) .HintText(LOCTEXT("HintJon", "请输入职业")) ] @@ -52,7 +52,7 @@ void SAIGCWindow::Construct(const FArguments& InArgs) .AutoHeight() .Padding(10) [ - SAssignNew(NPCName2, SConfigItemWidget) + SAssignNew(NPCName2, SConfigItem_Text) .Title(LOCTEXT("Name2", "名称2")) .HintText(LOCTEXT("HintName", "请输入名称")) ] @@ -61,7 +61,7 @@ void SAIGCWindow::Construct(const FArguments& InArgs) .AutoHeight() .Padding(10) [ - SAssignNew(NPCJob2, SConfigItemWidget) + SAssignNew(NPCJob2, SConfigItem_Text) .Title(LOCTEXT("Job2", "职业2")) .HintText(LOCTEXT("HintJon", "请输入职业")) ] @@ -69,10 +69,19 @@ void SAIGCWindow::Construct(const FArguments& InArgs) .AutoHeight() .Padding(10) [ - SAssignNew(DialogScene, SConfigItemWidget) + SAssignNew(DialogScene, SConfigItem_Text) .Title(LOCTEXT("DialogScene", "对话场景")) .HintText(LOCTEXT("HintDialogScene", "请输入对话场景")) ] + + SVerticalBox::Slot() + .AutoHeight() + .Padding(10) + [ + SAssignNew(GenerateCount, SConfigItem_NumberSpin) + .Title(LOCTEXT("GenerateCount", "生成数量")) + .MinNumber(1) + .MaxNumber(99) + ] + SVerticalBox::Slot() .AutoHeight() .Padding(10) @@ -111,23 +120,43 @@ EActiveTimerReturnType SAIGCWindow::OnPostPaint(double X, float Arg) void SAIGCWindow::OnAIGenerateClicked() { GenerateButton->SetEnabled(false); + RequireGenerateCount = GenerateCount->GetNumber(); + UE_LOG(LogTemp, Warning, TEXT("生成次数 %d prompt:%s"), RequireGenerateCount, *GeneratePromptJson()); WebSocketManager->SendData(GeneratePromptJson()); } void SAIGCWindow::HandleReceiveData(TArray AiMessages) { - GenerateButton->SetEnabled(true); - FAIGCModule* ModulePtr = FModuleManager::GetModulePtr("AIGC"); - if (ModulePtr) { - FString DataPath = FString::Printf(TEXT("/Game/Test/%s.%s"), *DataName->GetInputText(), *DataName->GetInputText()); - FString Final = ""; - for (auto message: AiMessages) - { - Final += message + TEXT("|"); + UE_LOG(LogTemp, Warning, TEXT("AI当前进度 %d/%d"), GeneratedCount, RequireGenerateCount); + //添加数据到dataTable中 + if (AiMessages.Num() > 0) + { + FAIGCModule* ModulePtr = FModuleManager::GetModulePtr("AIGC"); + if (ModulePtr) { + FString DataPath = FString::Printf(TEXT("/Game/Test/%s.%s"), *DataName->GetInputText(), *DataName->GetInputText()); + FString Final = ""; + for (auto message: AiMessages) + { + Final += message + TEXT("|"); + } + ModulePtr->CreateOrAddData(DataPath, Final); } - ModulePtr->CreateOrAddData(DataPath, Final); } + + //是否生成足够数量 + if (GeneratedCount < RequireGenerateCount) + { + GeneratedCount++; + WebSocketManager->SendData(GeneratePromptJson()); + } + else + { + GeneratedCount = 0; + GenerateButton->SetEnabled(true); + UE_LOG(LogTemp, Warning, TEXT("生成结束!")); + } + } FString SAIGCWindow::GeneratePromptJson() diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_NumberSpin.cpp b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_NumberSpin.cpp new file mode 100644 index 0000000..6afa0b9 --- /dev/null +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_NumberSpin.cpp @@ -0,0 +1,6 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "Widget/ConfigItem_NumberSpin.h" + + diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItemWidget.cpp b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_Text.cpp similarity index 86% rename from TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItemWidget.cpp rename to TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_Text.cpp index 533c5f1..7dfc53f 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItemWidget.cpp +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_Text.cpp @@ -1,11 +1,11 @@ // Fill out your copyright notice in the Description page of Project Settings. -#include "Widget/ConfigItemWidget.h" +#include "Widget/ConfigItem_Text.h" -void SConfigItemWidget::Construct(const FArguments& InArgs) +void SConfigItem_Text::Construct(const FArguments& InArgs) { InputText = InArgs._DefaultText.ToString(); ChildSlot[ diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/AIGCWindow.h b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/AIGCWindow.h index 7384b72..337b0cd 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/AIGCWindow.h +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/AIGCWindow.h @@ -3,7 +3,8 @@ #pragma once #include "CoreMinimal.h" -#include "ConfigItemWidget.h" +#include "ConfigItem_NumberSpin.h" +#include "ConfigItem_Text.h" /** * @@ -25,15 +26,17 @@ public: private: FString GeneratePromptJson(); - + int32 RequireGenerateCount; + int32 GeneratedCount = 1; protected: - TSharedPtr ServerIP; //服务器IP - TSharedPtr DataName; //datatable 名称 - TSharedPtr NPCName1; //npc1的名称 - TSharedPtr NPCJob1; //npc1的职业 - TSharedPtr NPCName2; //npc2的名称 - TSharedPtr NPCJob2; //npc2的职业 - TSharedPtr DialogScene; //对话场景 + TSharedPtr ServerIP; //服务器IP + TSharedPtr DataName; //datatable 名称 + TSharedPtr NPCName1; //npc1的名称 + TSharedPtr NPCJob1; //npc1的职业 + TSharedPtr NPCName2; //npc2的名称 + TSharedPtr NPCJob2; //npc2的职业 + TSharedPtr DialogScene; //对话场景 + TSharedPtr> GenerateCount; //生成数目 TSharedPtr GenerateButton; //生成按钮 UPROPERTY() diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_NumberSpin.h b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_NumberSpin.h new file mode 100644 index 0000000..feb186a --- /dev/null +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_NumberSpin.h @@ -0,0 +1,71 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Widgets/Input/SNumericEntryBox.h" +#include "Framework/Application/SlateApplication.h" +/** + * + */ +template +class AIGC_API SConfigItem_NumberSpin : public SCompoundWidget +{ +public: + SLATE_BEGIN_ARGS(SConfigItem_NumberSpin) + : _Title() + , _MinNumber() + , _MaxNumber() + {} + SLATE_ARGUMENT(FText, Title) // 标题参数 + SLATE_ARGUMENT(NumericType, MinNumber) // 最小范围 + SLATE_ARGUMENT(NumericType, MaxNumber) // 最大范围 + + SLATE_END_ARGS() + + void Construct(const FArguments& InArgs) + { + ChildSlot + [ + SNew(SHorizontalBox) + + SHorizontalBox::Slot() + .AutoWidth() + .Padding(10, 0) + [ + SNew(STextBlock) + .Text(InArgs._Title) + ] + + SHorizontalBox::Slot() + .FillWidth(1.0f) + .Padding(10, 0) + [ + SNew(SNumericEntryBox) + .AllowSpin(true) + .MinValue(InArgs._MinNumber) + .MaxValue(InArgs._MaxNumber) + .MinSliderValue(InArgs._MinNumber) + .MaxSliderValue(InArgs._MaxNumber) + .Value(InArgs._MinNumber) + .Delta(1) + .Value_Lambda([this, InArgs]() { return FMath::Max(InArgs._MinNumber, InputValue); }) + .OnValueChanged(this, &SConfigItem_NumberSpin::OnValueChanged) + ] + ]; + } + NumericType GetNumber() const { return InputValue; } + +private: + void OnValueChanged(NumericType NewValue) + { + UE_LOG(LogTemp, Display, TEXT("OnValueChanged newvalue = %d"), (int32)NewValue); + InputValue = NewValue; + Invalidate(EInvalidateWidget::Layout); + } + NumericType InputValue; +}; + +// template +// void SConfigItem_NumberSpin::Construct(const FArguments& InArgs) +// { +// } + diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItemWidget.h b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_Text.h similarity index 84% rename from TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItemWidget.h rename to TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_Text.h index 54b3bde..c6c4a2c 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItemWidget.h +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_Text.h @@ -7,9 +7,9 @@ /** * */ -class SConfigItemWidget : public SCompoundWidget { +class AIGC_API SConfigItem_Text : public SCompoundWidget { public: - SLATE_BEGIN_ARGS(SConfigItemWidget) + SLATE_BEGIN_ARGS(SConfigItem_Text) : _Title() , _HintText() , _DefaultText()