참고하고 있는 게임 커스오브더 데드갓을 보면 다음 스테이지를 Graph에서 선택할 수 있다. 우리 프로젝트도 그래프형태로 스테이지를 선택할 수 있게 구성해 사용자에게 선택지를 주도록 만들고 싶었다.
EStageType NodeStateType;
class UImage* StageImage;
class UImage* StageBorder;
class UButton* StageBtn;
UENUM(BlueprintType)
enum class EStageType : uint8
{
E_Artificat = 0 UMETA(DisplayName = "Artificat"),
E_Boss = 1 UMETA(DisplayName = "Boss"),
E_Health = 2 UMETA(DisplayName = "Health"),
E_Stat = 3 UMETA(DisplayName = "Stat"),
E_Weapon = 4 UMETA(DisplayName = "Weapon"),
E_None = 255 UMETA(DisplayName = "None"),
};
StageImage->SetBrushFromTexture(NodeImageArr[TextureNum], true);
UENUM(BlueprintType)
enum class EStageNodeState : uint8
{
E_Enable = 0 UMETA(DisplayName = "Enable"),
E_Disable = 1 UMETA(DisplayName = "Disable"),
E_Select = 2 UMETA(DisplayName = "Select"),
};
TArray<class UStageNodeWidget*> StageTree;
TArray<TTuple<int32, int32>> TreeConnection;
TArray<int32> TreeLoad;
UpdateTree()
: 각 노드별로 State 설정 for (auto StageNode : StageTree)
{
StageNode->SetNodeState(EStageNodeState::E_Disable);
}
for (auto SelectNode : SelectedArr)
{
StageTree[SelectNode]->SetNodeState(EStageNodeState::E_Select);
}
if (SelectedArr.Num() == 0)
{
StageTree[0]->SetNodeState(EStageNodeState::E_Enable);
}
else
{
//Next Node UI Change
for (auto j : StageTree[SelectedArr[SelectedArr.Num() - 1]]->NextStageNodes)
{
StageTree[j]->SetNodeState(EStageNodeState::E_Enable);
}
}
SelectNode()
: 노드 선택시 TreeLoad
에 추가 후 UpdateTree()