完善角色配置UI

This commit is contained in:
997146918 2025-07-07 18:22:51 +08:00
parent 3c6679032d
commit 6d457c9ca2
6 changed files with 49 additions and 8 deletions

View File

@ -37,7 +37,7 @@ void SCharacterWindow::Construct(const FArguments& InArgs)
SelectedCharacter = *CharacterInfo; SelectedCharacter = *CharacterInfo;
this->CharacterWidget_Name->SetInputText(SelectedCharacter.name); 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_Personality->SetInputText(SelectedCharacter.personality);
this->CharacterWidget_Profession->SetInputText(SelectedCharacter.profession); this->CharacterWidget_Profession->SetInputText(SelectedCharacter.profession);
this->CharacterWidget_BG->SetInputText(SelectedCharacter.characterBackground); this->CharacterWidget_BG->SetInputText(SelectedCharacter.characterBackground);
@ -56,9 +56,10 @@ void SCharacterWindow::Construct(const FArguments& InArgs)
.AutoHeight() .AutoHeight()
.Padding(0, 10, 0, 0) .Padding(0, 10, 0, 0)
[ [
SAssignNew(CharacterWidget_Age, SConfigItem_Text) SAssignNew(CharacterWidget_Age, SConfigItem_NumberSpin<int32>)
.Title(LOCTEXT("CharacterAge", "角色年龄")) .Title(LOCTEXT("CharacterAge", "角色年龄"))
.HintText(LOCTEXT("HintCharacterName", "请输入角色年龄")) .MinNumber(1)
.MaxNumber(99)
] ]
+SVerticalBox::Slot() +SVerticalBox::Slot()
.AutoHeight() .AutoHeight()
@ -92,6 +93,18 @@ void SCharacterWindow::Construct(const FArguments& InArgs)
.Title(LOCTEXT("CharacterName", "角色对话风格")) .Title(LOCTEXT("CharacterName", "角色对话风格"))
.HintText(LOCTEXT("HintCharacterName", "请输入角色对话风格")) .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, RegisterActiveTimer(0.f,
@ -148,4 +161,27 @@ void SCharacterWindow::HandleReceiveData(FNetProtocol protocol)
} }
} }
void SCharacterWindow::AddCharacterToServer()
{
FAIGCModule* ModulePtr = FModuleManager::GetModulePtr<FAIGCModule>("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 #undef LOCTEXT_NAMESPACE

View File

@ -23,6 +23,7 @@ void SConfigItem_Text::Construct(const FArguments& InArgs)
[ [
SNew(SEditableTextBox) SNew(SEditableTextBox)
.HintText( InArgs._HintText) .HintText( InArgs._HintText)
.VirtualKeyboardType(InArgs._KeyboardType)
.Text_Lambda([this, InArgs]() { .Text_Lambda([this, InArgs]() {
return FText::FromString(InputText); return FText::FromString(InputText);
}) })

View File

@ -3,6 +3,7 @@
#pragma once #pragma once
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "ConfigItem_NumberSpin.h"
#include "ConfigItem_Text.h" #include "ConfigItem_Text.h"
#include "Definations.h" #include "Definations.h"
@ -18,12 +19,13 @@ public:
SLATE_END_ARGS() SLATE_END_ARGS()
void Construct(const FArguments& InArgs); void Construct(const FArguments& InArgs);
EActiveTimerReturnType OnPostPaint(double X, float Arg); EActiveTimerReturnType OnPostPaint(double X, float Arg);
void HandleReceiveData(FNetProtocol protocol); void HandleReceiveData(FNetProtocol protocol);
void AddCharacterToServer();
protected: protected:
TSharedPtr<SComboBox<TSharedPtr<FCharacterInfo>>> CharacterComboBox; TSharedPtr<SComboBox<TSharedPtr<FCharacterInfo>>> CharacterComboBox;
TSharedPtr<SConfigItem_Text> CharacterWidget_Name; //角色名称 TSharedPtr<SConfigItem_Text> CharacterWidget_Name; //角色名称
TSharedPtr<SConfigItem_Text> CharacterWidget_Age; //角色年龄 TSharedPtr<SConfigItem_NumberSpin<int32>> CharacterWidget_Age; //角色年龄
TSharedPtr<SConfigItem_Text> CharacterWidget_Personality; //角色性格 TSharedPtr<SConfigItem_Text> CharacterWidget_Personality; //角色性格
TSharedPtr<SConfigItem_Text> CharacterWidget_Profession; //角色专业 TSharedPtr<SConfigItem_Text> CharacterWidget_Profession; //角色专业
TSharedPtr<SConfigItem_Text> CharacterWidget_BG; //角色背景 TSharedPtr<SConfigItem_Text> CharacterWidget_BG; //角色背景
@ -34,3 +36,5 @@ protected:
TArray<TSharedPtr<FCharacterInfo>> CharacterInfos; TArray<TSharedPtr<FCharacterInfo>> CharacterInfos;
FCharacterInfo SelectedCharacter; FCharacterInfo SelectedCharacter;
}; };

View File

@ -53,11 +53,10 @@ public:
]; ];
} }
NumericType GetNumber() const { return InputValue; } NumericType GetNumber() const { return InputValue; }
void SetNumber(NumericType InValue) { InputValue = InValue; }
private: private:
void OnValueChanged(NumericType NewValue) void OnValueChanged(NumericType NewValue)
{ {
UE_LOG(LogTemp, Display, TEXT("OnValueChanged newvalue = %d"), (int32)NewValue);
InputValue = NewValue; InputValue = NewValue;
Invalidate(EInvalidateWidget::Layout); Invalidate(EInvalidateWidget::Layout);
} }

View File

@ -13,11 +13,12 @@ public:
: _Title() : _Title()
, _HintText() , _HintText()
, _DefaultText() , _DefaultText()
,_KeyboardType(EKeyboardType::Keyboard_Default)
{} {}
SLATE_ARGUMENT(FText, Title) // 标题参数 SLATE_ARGUMENT(FText, Title) // 标题参数
SLATE_ARGUMENT(FText, HintText) // 默认值参数 SLATE_ARGUMENT(FText, HintText) // 默认值参数
SLATE_ARGUMENT(FText, DefaultText) // 默认值参数 SLATE_ARGUMENT(FText, DefaultText) // 默认值参数
SLATE_ARGUMENT(EKeyboardType, KeyboardType)
SLATE_END_ARGS() SLATE_END_ARGS()
void Construct(const FArguments& InArgs); void Construct(const FArguments& InArgs);