// Project Lab - NHTV Igad #include "UnrealProject.h" #include "EffectSelector.h" #include "EffectSlot.h" #include "BaseSkillObject.h" #include "AbilityInfo.h" #include "SkillWidget.h" TSubclassOf defaultEffectSelectorClass; UEffectSelector::UEffectSelector(const FObjectInitializer& init) : Super(init) { defaultEffectSelectorClass = ConstructorHelpers::FClassFinder(L"/Game/Assets/GUI/WEEGEE_SkillEffectSelector").Class; } void UEffectSelector::NativeConstruct() { m_container = Cast(WidgetTree->FindWidget("EffectSlotContainer")); if(!m_container) { GERROR("\"Container\" not found in effect selector widget " + GetName()); } onItemSelected.AddDynamic(this, &UEffectSelector::m_OnItemSelected); onItemSelectionConfirmed.AddDynamic(this, &UEffectSelector::m_OnItemSelectionConfirmed); m_nameField = Cast(WidgetTree->FindWidget("NameField")); m_descriptionField = Cast(WidgetTree->FindWidget("DescField")); Super::NativeConstruct(); } void UEffectSelector::Init(class USkillWidget* widget) { this->skill = widget->skillAsset; this->widget = widget; // Remove old items for(UEffectSlot* slot : m_effectSlots) { if(slot) slot->RemoveFromParent(); } if(!skill) { m_effectSlots.SetNum(0); RescanItems(); return; } // Add effect slot buttons for(UAbilityInfo* abilityEffect : skill->abilityEffects) { if(abilityEffect) { UEffectSlot* slot = CreateWidget(GetWorld(), effectSlotClass); m_container->AddChild(slot); slot->Init(abilityEffect); m_effectSlots.Add(slot); } else { GERROR("Didn't set ability on skill " + skill->GetName()); } } RescanItems(); } void UEffectSelector::Init2(class TArray abilities) { this->skill = nullptr; this->widget = nullptr; // Remove old items for(UEffectSlot* slot : m_effectSlots) { if(slot) slot->RemoveFromParent(); } // Add effect slot buttons for(UAbilityInfo* abilityEffect : abilities) { if(abilityEffect) { UEffectSlot* slot = CreateWidget(GetWorld(), effectSlotClass); m_container->AddChild(slot); slot->Init(abilityEffect); m_effectSlots.Add(slot); } else { GERROR("Didn't set ability on skill " + skill->GetName()); } } RescanItems(); } void UEffectSelector::m_OnItemSelected(UMenuItemBase* item) { UEffectSlot* slot = Cast(item); if(slot && slot->ability) { if(m_nameField) m_nameField->SetText(FText::FromString(slot->ability->name)); if(m_descriptionField) m_descriptionField->SetText(FText::FromString(slot->ability->description)); } } void UEffectSelector::m_OnItemSelectionConfirmed(UMenuItemBase* item) { UEffectSlot* slot = Cast(item); if(slot && slot->ability) { if(widget) { widget->SetSelectedEffect(slot->index); } onEffectSelected.Broadcast(slot->index); OnSelectionConfirmed(slot); } else { GERROR(L"Invalid ability selected"); } }