94 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local Ability = {}
 | |
| local EBusyRoleState = import("EBusyRoleState")
 | |
| local ERoleMoveDirection = import("ERoleMoveDirection")
 | |
| local EBusyAnimationPhase = import("EBusyAnimationPhase")
 | |
| local KismetSystemLibrary = import("KismetSystemLibrary")
 | |
| local AbilitySystemBlueprintLibrary = import("AbilitySystemBlueprintLibrary")
 | |
| local GetGameplayTag = require("GamePlay.Utils").GetGameplayTag
 | |
| 
 | |
| local item_pick_tag = "Change.LevelItem.Health"
 | |
| local role_pick_cost_health_tag = "Change.Role.Health"
 | |
| local role_pick_cost_hunger_tag = "Change.Role.Hunger"
 | |
| 
 | |
| 
 | |
| local function GetSelfPickConsume(item_id)
 | |
| 
 | |
| 
 | |
| end
 | |
| 
 | |
| 
 | |
| function Ability:ctor()
 | |
|     self.target = nil
 | |
|     self.pick_phase = nil
 | |
|     self.delay_timer = nil
 | |
|     self.event_data = nil
 | |
| end
 | |
| 
 | |
| function Ability:K2_ActivateAbilityFromEvent(EventData)
 | |
|     print("Pick  Ability:K2_ActivateAbility")
 | |
|     self.pick_phase = EBusyAnimationPhase.PrepareCast
 | |
| 
 | |
|     self:ProcessAbilityPhase()
 | |
|     self.event_data = EventData
 | |
|     self.target = EventData.Target
 | |
| end
 | |
| 
 | |
| function Ability:K2_OnEndAbility()
 | |
|     local owner = self:GetOwningActorFromActorInfo()
 | |
|     if self.target:IsAlive() then
 | |
|         owner:TryActiveAbility("Ability.Role.Pick", self.event_data)
 | |
|     else
 | |
|         owner.proxy.state = EBusyRoleState.PickFinished
 | |
|         owner:UpdateRoleState()
 | |
|     end
 | |
| end
 | |
| 
 | |
| function Ability:ProcessAbilityPhase()
 | |
|     local owner = self:GetOwningActorFromActorInfo()
 | |
|     local Animation = owner["RoleAnimation"]
 | |
| 
 | |
|     Animation:PlayPickAnimation("Tree", Animation:GetMoveDirection(), self.pick_phase, 1.0)
 | |
|     if self.delay_timer ~= nil then
 | |
|         KismetSystemLibrary.K2_ClearTimerHandle(self, self.delay_timer)
 | |
|     end
 | |
| 
 | |
|     if self.pick_phase == EBusyAnimationPhase.PrepareCast then
 | |
|         local delegate = slua.createDelegate(function()
 | |
|             self.pick_phase = EBusyAnimationPhase.Casting
 | |
|             self:ProcessAbilityPhase()
 | |
|         end)
 | |
|         self.delay_timer = KismetSystemLibrary.K2_SetTimerDelegate(delegate, 0.5, false, true, 0, 0)
 | |
|     elseif self.pick_phase == EBusyAnimationPhase.Casting then
 | |
|         self.pick_phase = EBusyAnimationPhase.PostCast
 | |
|         self:ProcessAbilityPhase()
 | |
|         self:ApplayEffect(owner.RoleAbility)
 | |
|     else
 | |
|         local delegate = slua.createDelegate(function()
 | |
|             self:K2_EndAbility()
 | |
|         end)
 | |
|         self.delay_timer = KismetSystemLibrary.K2_SetTimerDelegate(delegate, 0.2, false, true, 0, 0)
 | |
|     end
 | |
| end
 | |
| 
 | |
| function Ability:ApplayEffect(asc)
 | |
|     local RoleUtils = require("GamePlay.Utils.RoleUtils")
 | |
|     local owner = self:GetOwningActorFromActorInfo()
 | |
| 
 | |
|     -- 物品的采集效果
 | |
|     local item_asc = AbilitySystemBlueprintLibrary.GetAbilitySystemComponent(self.target)
 | |
|     local pick_handle = asc:MakeOutgoingSpec(
 | |
|         self.AbilityEffectConfigs:Get("LevelItem"), 1, asc:MakeEffectContext()
 | |
|     )
 | |
|     AbilitySystemBlueprintLibrary.AssignTagSetByCallerMagnitude(
 | |
|         pick_handle, GetGameplayTag(item_pick_tag), -owner.RoleConfig.PickEffect
 | |
|     )
 | |
| 
 | |
|     -- 自己的消耗
 | |
|     RoleUtils.ChangeHunger(owner,-self.target.LevelItemConfig.PickHungerCost)
 | |
| 
 | |
|     asc:BP_ApplyGameplayEffectSpecToTarget(pick_handle, item_asc)
 | |
| end
 | |
| 
 | |
| 
 | |
| 
 | |
| return Class(nil, nil, Ability) |