From 6d457c9ca24af9336437aaf35ef01507b6440419 Mon Sep 17 00:00:00 2001 From: 997146918 <997146918@qq.com> Date: Mon, 7 Jul 2025 18:22:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=A7=92=E8=89=B2=E9=85=8D?= =?UTF-8?q?=E7=BD=AEUI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TestForAIGC/Content/NewWidgetBlueprint.uasset | Bin 19560 -> 25583 bytes .../AIGC/Private/Widget/CharacterWindow.cpp | 42 ++++++++++++++++-- .../AIGC/Private/Widget/ConfigItem_Text.cpp | 1 + .../AIGC/Public/Widget/CharacterWindow.h | 8 +++- .../Public/Widget/ConfigItem_NumberSpin.h | 3 +- .../AIGC/Public/Widget/ConfigItem_Text.h | 3 +- 6 files changed, 49 insertions(+), 8 deletions(-) diff --git a/TestForAIGC/Content/NewWidgetBlueprint.uasset b/TestForAIGC/Content/NewWidgetBlueprint.uasset index 661f6032b20d33a6c46594d99d2b332681c7b81e..190a41feff3e8d9532ed3841c6bfccb36939951c 100644 GIT binary patch literal 25583 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 z%{x_r&WGI~1yTyCfDoT8jQM+Wd}>CharacterWidget_Name->SetInputText(SelectedCharacter.name); - this->CharacterWidget_Age->SetInputText(FString::FromInt(SelectedCharacter.age)); + this->CharacterWidget_Age->SetNumber(SelectedCharacter.age); this->CharacterWidget_Personality->SetInputText(SelectedCharacter.personality); this->CharacterWidget_Profession->SetInputText(SelectedCharacter.profession); this->CharacterWidget_BG->SetInputText(SelectedCharacter.characterBackground); @@ -56,9 +56,10 @@ void SCharacterWindow::Construct(const FArguments& InArgs) .AutoHeight() .Padding(0, 10, 0, 0) [ - SAssignNew(CharacterWidget_Age, SConfigItem_Text) + SAssignNew(CharacterWidget_Age, SConfigItem_NumberSpin) .Title(LOCTEXT("CharacterAge", "角色年龄")) - .HintText(LOCTEXT("HintCharacterName", "请输入角色年龄")) + .MinNumber(1) + .MaxNumber(99) ] +SVerticalBox::Slot() .AutoHeight() @@ -92,6 +93,18 @@ void SCharacterWindow::Construct(const FArguments& InArgs) .Title(LOCTEXT("CharacterName", "角色对话风格")) .HintText(LOCTEXT("HintCharacterName", "请输入角色对话风格")) ] + + SVerticalBox::Slot() + .AutoHeight() + .Padding(0, 10, 0, 0) + [ + SNew( SButton) + .Text(LOCTEXT("AddCharacter", "添加角色到服务器中")) + .OnClicked_Lambda([this]() + { + AddCharacterToServer(); + return FReply::Handled(); + }) + ] ]; // 注册绘制后回调 RegisterActiveTimer(0.f, @@ -148,4 +161,27 @@ void SCharacterWindow::HandleReceiveData(FNetProtocol protocol) } } +void SCharacterWindow::AddCharacterToServer() +{ + FAIGCModule* ModulePtr = FModuleManager::GetModulePtr("AIGC"); + if (ModulePtr) + { + //生成角色信息 + FCharacterInfo CharacterInfo; + CharacterInfo.name = CharacterWidget_Name->GetInputText(); + CharacterInfo.age = CharacterWidget_Age->GetNumber(); + CharacterInfo.personality = CharacterWidget_Personality->GetInputText(); + CharacterInfo.profession = CharacterWidget_Profession->GetInputText(); + CharacterInfo.characterBackground = CharacterWidget_BG->GetInputText(); + CharacterInfo.chat_style = CharacterWidget_Style->GetInputText(); + + FString CharacterJson; + FJsonObjectConverter::UStructToJsonObjectString(CharacterInfo, CharacterJson); + + UWebSocketManager* WebSocketManager = ModulePtr->GetWebSocketManager(); + WebSocketManager->SendData(FNetCommand::AddCharacter, CharacterJson); + + } +} + #undef LOCTEXT_NAMESPACE \ No newline at end of file diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_Text.cpp b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_Text.cpp index 7dfc53f..a7f75dc 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_Text.cpp +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/ConfigItem_Text.cpp @@ -23,6 +23,7 @@ void SConfigItem_Text::Construct(const FArguments& InArgs) [ SNew(SEditableTextBox) .HintText( InArgs._HintText) + .VirtualKeyboardType(InArgs._KeyboardType) .Text_Lambda([this, InArgs]() { return FText::FromString(InputText); }) diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/CharacterWindow.h b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/CharacterWindow.h index 6c39e50..520cc9f 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/CharacterWindow.h +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/CharacterWindow.h @@ -3,6 +3,7 @@ #pragma once #include "CoreMinimal.h" +#include "ConfigItem_NumberSpin.h" #include "ConfigItem_Text.h" #include "Definations.h" @@ -18,12 +19,13 @@ public: SLATE_END_ARGS() void Construct(const FArguments& InArgs); EActiveTimerReturnType OnPostPaint(double X, float Arg); - + void HandleReceiveData(FNetProtocol protocol); + void AddCharacterToServer(); protected: TSharedPtr>> CharacterComboBox; TSharedPtr CharacterWidget_Name; //角色名称 - TSharedPtr CharacterWidget_Age; //角色年龄 + TSharedPtr> CharacterWidget_Age; //角色年龄 TSharedPtr CharacterWidget_Personality; //角色性格 TSharedPtr CharacterWidget_Profession; //角色专业 TSharedPtr CharacterWidget_BG; //角色背景 @@ -34,3 +36,5 @@ protected: TArray> CharacterInfos; FCharacterInfo SelectedCharacter; }; + + diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_NumberSpin.h b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_NumberSpin.h index feb186a..71fc018 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_NumberSpin.h +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_NumberSpin.h @@ -53,11 +53,10 @@ public: ]; } NumericType GetNumber() const { return InputValue; } - + void SetNumber(NumericType InValue) { InputValue = InValue; } private: void OnValueChanged(NumericType NewValue) { - UE_LOG(LogTemp, Display, TEXT("OnValueChanged newvalue = %d"), (int32)NewValue); InputValue = NewValue; Invalidate(EInvalidateWidget::Layout); } diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_Text.h b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_Text.h index 5867d00..b5d006f 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_Text.h +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Public/Widget/ConfigItem_Text.h @@ -13,11 +13,12 @@ public: : _Title() , _HintText() , _DefaultText() + ,_KeyboardType(EKeyboardType::Keyboard_Default) {} SLATE_ARGUMENT(FText, Title) // 标题参数 SLATE_ARGUMENT(FText, HintText) // 默认值参数 SLATE_ARGUMENT(FText, DefaultText) // 默认值参数 - + SLATE_ARGUMENT(EKeyboardType, KeyboardType) SLATE_END_ARGS() void Construct(const FArguments& InArgs);