添加角色信息UI
This commit is contained in:
parent
142c31a322
commit
34bc37e864
@ -4,12 +4,95 @@
|
||||
#include "Widget/CharacterWindow.h"
|
||||
|
||||
#include "AIGC.h"
|
||||
#include "JsonObjectConverter.h"
|
||||
#include "WebSocketManager.h"
|
||||
|
||||
#include "Widgets/Input/STextComboBox.h"
|
||||
#define LOCTEXT_NAMESPACE "FAIGCModule"
|
||||
|
||||
void SCharacterWindow::Construct(const FArguments& InArgs)
|
||||
{
|
||||
|
||||
|
||||
ChildSlot[
|
||||
SNew(SVerticalBox)
|
||||
+SVerticalBox::Slot()
|
||||
.AutoHeight()
|
||||
[
|
||||
//角色列表
|
||||
SAssignNew(CharacterComboBox, SComboBox<TSharedPtr<FCharacterInfo>>)
|
||||
.OptionsSource(&CharacterInfos)
|
||||
.Content()
|
||||
[
|
||||
SNew(STextBlock)
|
||||
.Text_Lambda([this]() -> FText {
|
||||
|
||||
return FText::FromString(SelectedCharacter.name);
|
||||
})
|
||||
]
|
||||
.OnGenerateWidget_Lambda([this](TSharedPtr<FCharacterInfo> CharacterInfo) {
|
||||
return SNew(STextBlock).Text(FText::FromString(CharacterInfo->name));
|
||||
})
|
||||
.OnSelectionChanged_Lambda([this](TSharedPtr<FCharacterInfo> CharacterInfo, ESelectInfo::Type)
|
||||
{
|
||||
SelectedCharacter = *CharacterInfo;
|
||||
|
||||
this->CharacterWidget_Name->SetInputText(SelectedCharacter.name);
|
||||
this->CharacterWidget_Age->SetInputText(FString::FromInt(SelectedCharacter.age));
|
||||
this->CharacterWidget_Personality->SetInputText(SelectedCharacter.personality);
|
||||
this->CharacterWidget_Profession->SetInputText(SelectedCharacter.profession);
|
||||
this->CharacterWidget_BG->SetInputText(SelectedCharacter.characterBackground);
|
||||
this->CharacterWidget_Style->SetInputText(SelectedCharacter.chat_style);
|
||||
})
|
||||
]
|
||||
+SVerticalBox::Slot()
|
||||
.AutoHeight()
|
||||
.Padding(0, 10, 0, 0)
|
||||
[
|
||||
SAssignNew(CharacterWidget_Name, SConfigItem_Text)
|
||||
.Title(LOCTEXT("CharacterName", "角色名称"))
|
||||
.HintText(LOCTEXT("HintCharacterName", "请输入角色名称"))
|
||||
]
|
||||
+SVerticalBox::Slot()
|
||||
.AutoHeight()
|
||||
.Padding(0, 10, 0, 0)
|
||||
[
|
||||
SAssignNew(CharacterWidget_Age, SConfigItem_Text)
|
||||
.Title(LOCTEXT("CharacterAge", "角色年龄"))
|
||||
.HintText(LOCTEXT("HintCharacterName", "请输入角色年龄"))
|
||||
]
|
||||
+SVerticalBox::Slot()
|
||||
.AutoHeight()
|
||||
.Padding(0, 10, 0, 0)
|
||||
[
|
||||
SAssignNew(CharacterWidget_Personality, SConfigItem_Text)
|
||||
.Title(LOCTEXT("CharacterName", "角色性格"))
|
||||
.HintText(LOCTEXT("HintCharacterName", "请输入角色性格"))
|
||||
]
|
||||
+SVerticalBox::Slot()
|
||||
.AutoHeight()
|
||||
.Padding(0, 10, 0, 0)
|
||||
[
|
||||
SAssignNew(CharacterWidget_Profession, SConfigItem_Text)
|
||||
.Title(LOCTEXT("CharacterName", "角色职业"))
|
||||
.HintText(LOCTEXT("HintCharacterName", "请输入角色职业"))
|
||||
]
|
||||
+SVerticalBox::Slot()
|
||||
.AutoHeight()
|
||||
.Padding(0, 10, 0, 0)
|
||||
[
|
||||
SAssignNew(CharacterWidget_BG, SConfigItem_Text)
|
||||
.Title(LOCTEXT("CharacterName", "角色背景"))
|
||||
.HintText(LOCTEXT("HintCharacterName", "请输入角色背景"))
|
||||
]
|
||||
+SVerticalBox::Slot()
|
||||
.AutoHeight()
|
||||
.Padding(0, 10, 0, 0)
|
||||
[
|
||||
SAssignNew(CharacterWidget_Style, SConfigItem_Text)
|
||||
.Title(LOCTEXT("CharacterName", "角色对话风格"))
|
||||
.HintText(LOCTEXT("HintCharacterName", "请输入角色对话风格"))
|
||||
]
|
||||
];
|
||||
// 注册绘制后回调
|
||||
RegisterActiveTimer(0.f,
|
||||
FWidgetActiveTimerDelegate::CreateSP(
|
||||
@ -48,6 +131,21 @@ void SCharacterWindow::HandleReceiveData(FNetProtocol protocol)
|
||||
{
|
||||
if (protocol.cmd == FNetCommand::CharacterList)
|
||||
{
|
||||
//刷新角色列表
|
||||
|
||||
//解析json角色信息
|
||||
FJsonObjectConverter::JsonObjectStringToUStruct<FCharacterArray>(
|
||||
protocol.data,
|
||||
&Characters,
|
||||
0, // 检查标志位
|
||||
0 // 转换标志位
|
||||
);
|
||||
CharacterInfos.Empty();
|
||||
for (auto Character: Characters.characterInfos)
|
||||
{
|
||||
CharacterInfos.Add(MakeShareable(new FCharacterInfo(Character)));
|
||||
}
|
||||
CharacterComboBox->RefreshOptions();
|
||||
}
|
||||
}
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
@ -51,12 +51,28 @@ USTRUCT()
|
||||
struct FCharacterInfo
|
||||
{
|
||||
GENERATED_BODY()
|
||||
UPROPERTY()
|
||||
int32 id;
|
||||
UPROPERTY()
|
||||
FString name;
|
||||
UPROPERTY()
|
||||
int32 age;
|
||||
UPROPERTY()
|
||||
FString personality;
|
||||
UPROPERTY()
|
||||
FString profession;
|
||||
UPROPERTY()
|
||||
FString characterBackground;
|
||||
UPROPERTY()
|
||||
FString chat_style;
|
||||
};
|
||||
USTRUCT()
|
||||
struct FCharacterArray
|
||||
{
|
||||
GENERATED_BODY()
|
||||
UPROPERTY()
|
||||
TArray<FCharacterInfo> characterInfos;
|
||||
};
|
||||
|
||||
USTRUCT()
|
||||
struct FNetProtocol
|
||||
|
@ -3,6 +3,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "ConfigItem_Text.h"
|
||||
#include "Definations.h"
|
||||
|
||||
/**
|
||||
@ -12,12 +13,24 @@ class AIGC_API SCharacterWindow: public SCompoundWidget
|
||||
{
|
||||
public:
|
||||
SLATE_BEGIN_ARGS(SCharacterWindow)
|
||||
: _CharactersJsons()
|
||||
{}
|
||||
SLATE_ARGUMENT(FString, CharactersJsons)
|
||||
|
||||
SLATE_END_ARGS()
|
||||
void Construct(const FArguments& InArgs);
|
||||
EActiveTimerReturnType OnPostPaint(double X, float Arg);
|
||||
|
||||
void HandleReceiveData(FNetProtocol protocol);
|
||||
protected:
|
||||
TSharedPtr<SComboBox<TSharedPtr<FCharacterInfo>>> CharacterComboBox;
|
||||
TSharedPtr<SConfigItem_Text> CharacterWidget_Name; //角色名称
|
||||
TSharedPtr<SConfigItem_Text> CharacterWidget_Age; //角色年龄
|
||||
TSharedPtr<SConfigItem_Text> CharacterWidget_Personality; //角色性格
|
||||
TSharedPtr<SConfigItem_Text> CharacterWidget_Profession; //角色专业
|
||||
TSharedPtr<SConfigItem_Text> CharacterWidget_BG; //角色背景
|
||||
TSharedPtr<SConfigItem_Text> CharacterWidget_Style; //说话风格
|
||||
|
||||
|
||||
FCharacterArray Characters;
|
||||
TArray<TSharedPtr<FCharacterInfo>> CharacterInfos;
|
||||
FCharacterInfo SelectedCharacter;
|
||||
};
|
||||
|
@ -23,7 +23,7 @@ public:
|
||||
void Construct(const FArguments& InArgs);
|
||||
|
||||
FString GetInputText() const { return InputText; }
|
||||
|
||||
void SetInputText(const FString& NewText) { InputText = NewText; }
|
||||
private:
|
||||
FString InputText;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user