71 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 
								 | 
							
								local Ability = {}
							 | 
						||
| 
								 | 
							
								local Reactive = require("Core.Reactive")
							 | 
						||
| 
								 | 
							
								local GetGameplayTag = require("GamePlay.Utils").GetGameplayTag
							 | 
						||
| 
								 | 
							
								local AbilitySystemBlueprintLibrary = import("AbilitySystemBlueprintLibrary")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								local hunger_consume_tag_name = "Buff.RoleConsume.Hunger"
							 | 
						||
| 
								 | 
							
								local health_consume_tag_name = "Buff.RoleConsume.Health"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function Ability:K2_ActivateAbilityFromEvent(_)
							 | 
						||
| 
								 | 
							
								    print("Role Consume Ability:K2_ActivateAbility")
							 | 
						||
| 
								 | 
							
								    if self.hunger_watcher ~= nil then
							 | 
						||
| 
								 | 
							
								        self.hunger_watcher:Destroy()
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    self.hunger_watcher = Reactive.Watcher(function() self:ConsumeWatcher() end)
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function Ability:ConsumeWatcher()
							 | 
						||
| 
								 | 
							
								    local owner = self:GetOwningActorFromActorInfo()
							 | 
						||
| 
								 | 
							
								    local asc = owner["RoleAbility"]
							 | 
						||
| 
								 | 
							
								    if owner.LuaRoleAttribute.Hunger > 0 then
							 | 
						||
| 
								 | 
							
								        if not asc:IsGameplayCueActive(GetGameplayTag(hunger_consume_tag_name)) then
							 | 
						||
| 
								 | 
							
								            self:ApplyHungerConsume(asc)
							 | 
						||
| 
								 | 
							
								        end
							 | 
						||
| 
								 | 
							
								        if asc:IsGameplayCueActive(GetGameplayTag(health_consume_tag_name)) then
							 | 
						||
| 
								 | 
							
								            if self.health_consume_handle ~= nil then
							 | 
						||
| 
								 | 
							
								                asc:RemoveActiveGameplayEffect(self.health_consume_handle, -1)
							 | 
						||
| 
								 | 
							
								            end
							 | 
						||
| 
								 | 
							
								            self.health_consume_handle = nil
							 | 
						||
| 
								 | 
							
								        end
							 | 
						||
| 
								 | 
							
								    elseif owner.LuaRoleAttribute.Hunger <= 0 then
							 | 
						||
| 
								 | 
							
								        if not asc:IsGameplayCueActive(GetGameplayTag(health_consume_tag_name)) then
							 | 
						||
| 
								 | 
							
								            self:ApplyHealthConsume(asc)
							 | 
						||
| 
								 | 
							
								        end
							 | 
						||
| 
								 | 
							
								        if asc:IsGameplayCueActive(GetGameplayTag(hunger_consume_tag_name)) then
							 | 
						||
| 
								 | 
							
								            if self.hunger_consume_handle ~= nil then
							 | 
						||
| 
								 | 
							
								                asc:RemoveActiveGameplayEffect(self.hunger_consume_handle, -1)
							 | 
						||
| 
								 | 
							
								            end
							 | 
						||
| 
								 | 
							
								            self.hunger_consume_handle = nil
							 | 
						||
| 
								 | 
							
								            owner.LuaRoleAttribute.Hunger = 0
							 | 
						||
| 
								 | 
							
								        end
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function Ability:ApplyConsumeEffect(asc, effect_tag_name, value)
							 | 
						||
| 
								 | 
							
								    local spec_handle = asc:MakeOutgoingSpec(
							 | 
						||
| 
								 | 
							
								        self.EffectConfigs:Get(GetGameplayTag(effect_tag_name)),
							 | 
						||
| 
								 | 
							
								        1, asc:MakeEffectContext()
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    AbilitySystemBlueprintLibrary.AssignTagSetByCallerMagnitude(
							 | 
						||
| 
								 | 
							
								        spec_handle, GetGameplayTag(effect_tag_name), value
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    return asc:BP_ApplyGameplayEffectSpecToSelf(spec_handle)
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function Ability:ApplyHungerConsume(asc)
							 | 
						||
| 
								 | 
							
								    local owner = asc:GetOwner()
							 | 
						||
| 
								 | 
							
								    local consume_speed_peer_second = owner.RoleConfig.HungerConsumeSpeed
							 | 
						||
| 
								 | 
							
								    self.hunger_consume_handle = self:ApplyConsumeEffect(
							 | 
						||
| 
								 | 
							
								        asc, hunger_consume_tag_name, -consume_speed_peer_second / 10
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function Ability:ApplyHealthConsume(asc)
							 | 
						||
| 
								 | 
							
								    local owner = asc:GetOwner()
							 | 
						||
| 
								 | 
							
								    local consume_speed_peer_second = owner.RoleConfig.HungerConsumeSpeed
							 | 
						||
| 
								 | 
							
								    self.health_consume_handle = self:ApplyConsumeEffect(
							 | 
						||
| 
								 | 
							
								        asc, health_consume_tag_name, -consume_speed_peer_second/10
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								return Class(nil, nil,  Ability)
							 |