添加角色信息UI
This commit is contained in:
parent
142c31a322
commit
34bc37e864
@ -4,12 +4,95 @@
|
|||||||
#include "Widget/CharacterWindow.h"
|
#include "Widget/CharacterWindow.h"
|
||||||
|
|
||||||
#include "AIGC.h"
|
#include "AIGC.h"
|
||||||
|
#include "JsonObjectConverter.h"
|
||||||
#include "WebSocketManager.h"
|
#include "WebSocketManager.h"
|
||||||
|
#include "Widgets/Input/STextComboBox.h"
|
||||||
|
#define LOCTEXT_NAMESPACE "FAIGCModule"
|
||||||
|
|
||||||
void SCharacterWindow::Construct(const FArguments& InArgs)
|
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,
|
RegisterActiveTimer(0.f,
|
||||||
FWidgetActiveTimerDelegate::CreateSP(
|
FWidgetActiveTimerDelegate::CreateSP(
|
||||||
@ -48,6 +131,21 @@ void SCharacterWindow::HandleReceiveData(FNetProtocol protocol)
|
|||||||
{
|
{
|
||||||
if (protocol.cmd == FNetCommand::CharacterList)
|
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
|
struct FCharacterInfo
|
||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
UPROPERTY()
|
||||||
|
int32 id;
|
||||||
|
UPROPERTY()
|
||||||
FString name;
|
FString name;
|
||||||
|
UPROPERTY()
|
||||||
int32 age;
|
int32 age;
|
||||||
|
UPROPERTY()
|
||||||
FString personality;
|
FString personality;
|
||||||
|
UPROPERTY()
|
||||||
|
FString profession;
|
||||||
|
UPROPERTY()
|
||||||
FString characterBackground;
|
FString characterBackground;
|
||||||
|
UPROPERTY()
|
||||||
FString chat_style;
|
FString chat_style;
|
||||||
};
|
};
|
||||||
|
USTRUCT()
|
||||||
|
struct FCharacterArray
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
UPROPERTY()
|
||||||
|
TArray<FCharacterInfo> characterInfos;
|
||||||
|
};
|
||||||
|
|
||||||
USTRUCT()
|
USTRUCT()
|
||||||
struct FNetProtocol
|
struct FNetProtocol
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CoreMinimal.h"
|
#include "CoreMinimal.h"
|
||||||
|
#include "ConfigItem_Text.h"
|
||||||
#include "Definations.h"
|
#include "Definations.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -12,12 +13,24 @@ class AIGC_API SCharacterWindow: public SCompoundWidget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SLATE_BEGIN_ARGS(SCharacterWindow)
|
SLATE_BEGIN_ARGS(SCharacterWindow)
|
||||||
: _CharactersJsons()
|
|
||||||
{}
|
{}
|
||||||
SLATE_ARGUMENT(FString, CharactersJsons)
|
|
||||||
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);
|
||||||
|
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);
|
void Construct(const FArguments& InArgs);
|
||||||
|
|
||||||
FString GetInputText() const { return InputText; }
|
FString GetInputText() const { return InputText; }
|
||||||
|
void SetInputText(const FString& NewText) { InputText = NewText; }
|
||||||
private:
|
private:
|
||||||
FString InputText;
|
FString InputText;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user