@ -0,0 +1,76 @@
|
||||
using UnrealSharp.Engine;
|
||||
using UnrealSharp.Attributes;
|
||||
using UnrealSharp.BusyRabbit;
|
||||
using UnrealSharp.GameplayAbilities;
|
||||
using UnrealSharp;
|
||||
using UnrealSharp.CoreUObject;
|
||||
|
||||
namespace UI.Level.Controllers;
|
||||
|
||||
[UMultiDelegate]
|
||||
public delegate void OnUIAttributeChange(FName AttributeName, float NewValue, float OldValue);
|
||||
|
||||
|
||||
|
||||
[UClass]
|
||||
public class UBusyRoleStateController : UPW_UIController
|
||||
{
|
||||
[UProperty()]
|
||||
public TMulticastDelegate<OnUIAttributeChange> OnAttributeChangeDelegate { get; set; }
|
||||
|
||||
|
||||
protected override void OnUIControllerInitialized()
|
||||
{
|
||||
if (UGameplayStatics.GetPlayerController(0) is ALevelPlayerController PC)
|
||||
{
|
||||
ABusyPlayerRole Role = PC.ControlledRole;
|
||||
if (AbilitySystemLibrary.GetAbilitySystemComponent(Role) is UBusyAbilitySystemComponent ASC)
|
||||
{
|
||||
RegisterAttributeListener(ASC, "Health");
|
||||
RegisterAttributeListener(ASC, "Hunger");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public float GetControlledAttribute(FName AttributeName)
|
||||
{
|
||||
if (UGameplayStatics.GetPlayerController(0) is ALevelPlayerController PC)
|
||||
{
|
||||
ABusyPlayerRole Role = PC.ControlledRole;
|
||||
if (AbilitySystemLibrary.GetAbilitySystemComponent(Role) is UBusyAbilitySystemComponent ASC)
|
||||
{
|
||||
FGameplayAttribute Attribute = UBusyAscLibrary.GetAttribute(Role.Attributes, AttributeName);
|
||||
return ASC.GetGameplayAttributeValue(Attribute, out bool IsFound);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public float GetRoleAttribute(ABusyPawnBase Pawn, FName Attribute)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
protected void RegisterAttributeListener(UBusyAbilitySystemComponent ASC, FName AttributeName)
|
||||
{
|
||||
TDelegate<OnBusyAttributeChange> Delegate = new TDelegate<OnBusyAttributeChange>();
|
||||
Delegate.BindUFunction(this, "OnAttributeChange");
|
||||
ASC.BindEventToAttributeChange(typeof(UBusyPlayerRoleAttributeSet), AttributeName, Delegate);
|
||||
}
|
||||
|
||||
|
||||
[UFunction()]
|
||||
protected void OnAttributeChange(FName AttributeName, float NewValue, float OldValue)
|
||||
{
|
||||
OnAttributeChangeDelegate.Invoke(AttributeName, NewValue, OldValue);
|
||||
}
|
||||
|
||||
|
||||
protected override void OnUIControllerDestroy()
|
||||
{
|
||||
base.OnUIControllerDestroy();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user