76 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 
								 | 
							
								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();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |