haxis/Source/UnrealProject/GUI/HUD/ButtonBarSwitcher.cpp

161 lines
3.8 KiB
C++

// Project Lab - NHTV Igad
#include "UnrealProject.h"
#include "AbilityButton.h"
#include "ButtonBarSwitcher.h"
#include "BaseSkillObject.h"
#include "AbilityState.h"
#include "NetworkPlayer.h"
#include "IngameSkillTree.h"
#include "AbilityInfo.h"
void UButtonBarSwitcher::NativeConstruct()
{
Super::NativeConstruct();
m_globalEnable = true;
m_alternateSkillSet = false;
m_FindAndAddButtonBar("ButtonBarMain");
m_FindAndAddButtonBar("ButtonBarAlt");
}
bool UButtonBarSwitcher::AssignSkillButton(const FIngameSkillTreeSkill& skill, bool isAlt)
{
if (m_mappedButtons.Find(skill.selectedEffect))
return true;
int32 bar = isAlt ? 1 : 0;
if (bar >= m_buttonBars.Num())
return false;
UAbilityButton* targetButton;
if(!m_buttonBars[bar]->AssignSkillButton(skill, targetButton, isAlt))
{
GERROR("Too many skills, can't assign " + skill.selectedEffect->GetName() + " to bar " + bar);
return false;
}
m_mappedButtons.Add(skill.selectedEffect, targetButton);
return true;
}
void UButtonBarSwitcher::UpdateCooldowns(TArray<class AAbilityState*> abilityStates, ANetworkPlayer* player)
{
for (int32 i = 0; i < abilityStates.Num(); i++)
{
UAbilityButton** button = m_mappedButtons.Find(abilityStates[i]->info);
if (button)
{
(*button)->UpdateState(abilityStates[i], player);
}
}
}
UButtonBar* UButtonBarSwitcher::m_FindAndAddButtonBar(const FName& name)
{
UButtonBar* bar = Cast<UButtonBar>(WidgetTree->FindWidget(name));
if (bar)
{
m_buttonBars.Add(bar);
}
return bar;
}
void UButtonBarSwitcher::SetSkillButtonEnabled(const FIngameSkillTreeSkill& skill, bool enabled)
{
UAbilityButton** button = m_mappedButtons.Find(skill.selectedEffect);
if (button)
{
(*button)->SetButtonEnabled(enabled);
}
}
void UButtonBarSwitcher::SetGlobalEnable(bool enabled)
{
for(UButtonBar* bb : m_buttonBars)
{
bb->SetGlobalEnable(enabled);
}
}
class UAbilityInfo* UButtonBarSwitcher::GetAbilityMapping(int32 index)
{
if(m_buttonBars.Num() != 2)
{
GERROR("m_buttonBars.Num() != 2");
return nullptr;
}
UButtonBar* currentBar = m_buttonBars[m_alternateSkillSet ? 1 : 0];
if(index < 0 || index >= currentBar->buttons.Num())
return nullptr;
return currentBar->buttons[index]->GetAbility();
}
class UAbilityInfo* UButtonBarSwitcher::GetAbilityMapping(int32 index, bool isAlt)
{
if(m_buttonBars.Num() != 2)
{
GERROR("m_buttonBars.Num() != 2");
return nullptr;
}
UButtonBar* currentBar = m_buttonBars[isAlt ? 1 : 0];
if(index < 0 || index >= currentBar->buttons.Num())
return nullptr;
return currentBar->buttons[index]->GetAbility();
}
void UButtonBarSwitcher::TransitionToAlternateSkillSet_Implementation()
{
}
void UButtonBarSwitcher::TransitionToMainSkillSet_Implementation()
{
}
void UButtonBarSwitcher::ToggleSkillSet(bool useAlternateSkillSet)
{
if (m_alternateSkillSet != useAlternateSkillSet)
{
if(useAlternateSkillSet)
TransitionToAlternateSkillSet();
else
TransitionToMainSkillSet();
m_alternateSkillSet = useAlternateSkillSet;
}
}
void UButtonBar::NativeConstruct()
{
TArray<UWidget*> widgets;
WidgetTree->GetAllWidgets(widgets);
for (int32 i = 0; i < widgets.Num(); i++)
{
UAbilityButton* button = Cast<UAbilityButton>(widgets[i]);
if (button)
{
buttons.Add(button);
}
}
}
bool UButtonBar::AssignSkillButton(const FIngameSkillTreeSkill& skill, class UAbilityButton*& buttonOut, bool alt)
{
for (int32 i = 0; i < buttons.Num(); i++)
{
if (buttons[i]->IsAssigned())
continue;
buttonOut = buttons[i];
buttonOut->InitButton(skill.selectedEffect, i, alt);
return true;
}
return false;
}
void UButtonBar::SetGlobalEnable(bool enabled)
{
for(UAbilityButton* button : buttons)
{
if(button)
{
button->SetGlobalEnable(enabled);
}
}
}