diff --git a/TestForAIGC/Content/NewWidgetBlueprint.uasset b/TestForAIGC/Content/NewWidgetBlueprint.uasset index 661f603..190a41f 100644 Binary files a/TestForAIGC/Content/NewWidgetBlueprint.uasset and b/TestForAIGC/Content/NewWidgetBlueprint.uasset differ diff --git a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/CharacterWindow.cpp b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/CharacterWindow.cpp index 262858e..53ad016 100644 --- a/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/CharacterWindow.cpp +++ b/TestForAIGC/Plugins/AIGC/Source/AIGC/Private/Widget/CharacterWindow.cpp @@ -37,7 +37,7 @@ void SCharacterWindow::Construct(const FArguments& InArgs) SelectedCharacter = *CharacterInfo; this->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);