| @ -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