完善角色配置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;
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<int32>)
.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<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

View File

@ -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);
})

View File

@ -3,6 +3,7 @@
#pragma once
#include "CoreMinimal.h"
#include "ConfigItem_NumberSpin.h"
#include "ConfigItem_Text.h"
#include "Definations.h"
@ -20,10 +21,11 @@ public:
EActiveTimerReturnType OnPostPaint(double X, float Arg);
void HandleReceiveData(FNetProtocol protocol);
void AddCharacterToServer();
protected:
TSharedPtr<SComboBox<TSharedPtr<FCharacterInfo>>> CharacterComboBox;
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_Profession; //角色专业
TSharedPtr<SConfigItem_Text> CharacterWidget_BG; //角色背景
@ -34,3 +36,5 @@ protected:
TArray<TSharedPtr<FCharacterInfo>> CharacterInfos;
FCharacterInfo SelectedCharacter;
};

View File

@ -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);
}

View File

@ -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);