#pragma once #include "UI/ViewModels/UiViewCommon.h" /** One recipe row (DESIGN_UE.md 6.7): icon, name, description, cost chips, BUILD. */ struct FDescentRecipeRow { FName Id; FName IconItem; FString Name; FString Desc; TArray Costs; bool bLocked = false; // not available at all (needs another upgrade, or weapons) FString LockedReason; FString ButtonText = TEXT("BUILD"); FDescentUiAction OnBuild; bool CanAfford() const { for (const FDescentUiCost& C : Costs) { if (!C.IsMet()) { return false; } } return !bLocked; } }; struct FDescentFabricatorCategory { FName Id; FString Label; TArray Rows; }; /** Fabricator window: one tab per category, two columns of rows, a build progress bar. */ struct FDescentFabricatorViewModel { TArray Categories; float BuildProgress = 0.f; // 0..1 while building FString StatusText; };