Lua向C#逻辑迁移 一期
创建了若干C#文件,替代对应lua文件
This commit is contained in:
@ -0,0 +1 @@
|
||||
// 角色移动
|
||||
@ -0,0 +1,196 @@
|
||||
// local GameplayStatics = import("GameplayStatics")
|
||||
// local AbilitySystemBlueprintLibrary = import("AbilitySystemBlueprintLibrary")
|
||||
// local BusyGameplayLibrary = import("BusyGameplayLibrary")
|
||||
|
||||
// --- @class FoxUltimate
|
||||
// --- @field RecastWindow number
|
||||
// local FoxUltimate = {}
|
||||
|
||||
|
||||
// function FoxUltimate:ctor()
|
||||
// self.ultimate_phase = 1 -- 大招阶段
|
||||
// self.active_recast_handle = nil
|
||||
// self.active_accelerate_handle = nil
|
||||
|
||||
// self.overlap_delegate_handle = nil
|
||||
// self.tag_add_or_remove_delegate = nil
|
||||
// end
|
||||
|
||||
|
||||
// function FoxUltimate:K2_ActivateAbilityFromEvent(EventData)
|
||||
// print("FoxUltimate:K2_ActivateAbilityFromEvent", self.ultimate_phase)
|
||||
|
||||
// if not self:K2_CommitAbilityCost(false) then
|
||||
// return self:K2_EndAbility()
|
||||
// end
|
||||
|
||||
// local owner = self:GetOwningActorFromActorInfo()
|
||||
// self.movement = owner.MovementComponent
|
||||
// self.animation = owner.SpineAnimationComponent
|
||||
// self.asc = AbilitySystemBlueprintLibrary.GetAbilitySystemComponent(owner)
|
||||
// self.recast_tag = BusyGameplayLibrary.RequestGameplayTag("Ability.Flags.Recast")
|
||||
// self.owner = owner
|
||||
|
||||
|
||||
// local asc = self.asc
|
||||
|
||||
// if self.tag_add_or_remove_delegate == nil then
|
||||
// self.tag_add_or_remove_delegate = slua.createDelegate(function(tag, is_add)
|
||||
// if is_add == 0 and not self.bIsActive then
|
||||
// self.ultimate_phase = 1
|
||||
// self:K2_CommitAbilityCooldown(false, false)
|
||||
// end
|
||||
// end)
|
||||
// owner:BindGameplayTagAddOrRemove(self.recast_tag, self.tag_add_or_remove_delegate)
|
||||
// end
|
||||
|
||||
// if self.ultimate_phase == 1 or asc:HasMatchingGameplayTag(self.recast_tag) then
|
||||
// self:TriggerUltimate(asc)
|
||||
// else
|
||||
// self:K2_EndAbility()
|
||||
// end
|
||||
|
||||
|
||||
// end
|
||||
|
||||
// function FoxUltimate:TriggerUltimate(asc)
|
||||
// if self.ultimate_phase == 1 then
|
||||
// -- 第一次释放大招,添加一个可以再次释放的Tag
|
||||
// local _, recast_effect = self:GetAbilityEffectSpecHandle("Recast", asc, 1, nil)
|
||||
// self.active_recast_handle = asc:BP_ApplyGameplayEffectSpecToSelf(recast_effect)
|
||||
// elseif self.ultimate_phase == 2 then
|
||||
// -- 第二次激活,移除可重复释放的tag
|
||||
// self.asc:RemoveActiveGameplayEffect(self.active_recast_handle, -1)
|
||||
// elseif self.ultimate_phase == 3 then
|
||||
// self.asc:RemoveActiveGameplayEffect(self.active_recast_handle, -1)
|
||||
// end
|
||||
|
||||
// -- 播放动画,并监听动画完成的事件
|
||||
// self:PlayAnimation()
|
||||
// end
|
||||
|
||||
|
||||
// function FoxUltimate:GetAnimationName(direction)
|
||||
// local animation_name_prefix
|
||||
// if direction.X >= 0 then
|
||||
// animation_name_prefix = "Ultimate/Right/"
|
||||
// else
|
||||
// animation_name_prefix = "Ultimate/Left/"
|
||||
// end
|
||||
|
||||
// if self.ultimate_phase == 1 then
|
||||
// return animation_name_prefix .. "UltimateStage1"
|
||||
// elseif self.ultimate_phase == 2 then
|
||||
// return animation_name_prefix .. "UltimateStage2"
|
||||
// elseif self.ultimate_phase == 3 then
|
||||
// return animation_name_prefix .. "UltimateStage3"
|
||||
// end
|
||||
// return nil
|
||||
// end
|
||||
|
||||
|
||||
// function FoxUltimate:K2_OnEndAbility(bWasCancelled)
|
||||
// print("FoxUltimate:K2_OnEndAbility")
|
||||
// end
|
||||
|
||||
|
||||
// function FoxUltimate:GetSprintSpeedFactor()
|
||||
// if self.ultimate_phase == 1 then
|
||||
// return 2.5
|
||||
// elseif self.ultimate_phase == 2 then
|
||||
// return 2.8
|
||||
// elseif self.ultimate_phase == 3 then
|
||||
// return 3.0
|
||||
// end
|
||||
// end
|
||||
|
||||
// function FoxUltimate:PlayAnimation()
|
||||
|
||||
// local animation = self.animation
|
||||
// local PC = GameplayStatics.GetPlayerController(self, 0)
|
||||
|
||||
// local result, ability_direction = PC:GetCursorDirection(nil) -- 获取技能的朝向
|
||||
// if not result then
|
||||
// print("FoxUltimate:TriggerPrimaryPhase can't find direction")
|
||||
// return
|
||||
// end
|
||||
// local anim_name = self:GetAnimationName(ability_direction) -- 获取技能动画名称
|
||||
// if not anim_name then
|
||||
// print("FoxUltimate:TriggerPrimaryPhase can't get animation", self.ultimate_phase)
|
||||
// return
|
||||
// end
|
||||
|
||||
// local anim_entry = animation:SetAnimation(0, anim_name, false)
|
||||
// anim_entry.AnimationComplete:Add(function(entry) self:OnAnimationComplete(entry) end)
|
||||
// anim_entry.AnimationEvent:Add(function(entry, event) self:OnAnimationEvent(entry, event) end)
|
||||
|
||||
// local anim_total_time = anim_entry:GetAnimationEnd() -- 获取技能动画时长
|
||||
|
||||
// -- 附加加速buff
|
||||
// self:MakeAccelerate(self:GetSprintSpeedFactor(), anim_total_time)
|
||||
// self.movement:ActivateSprint(ability_direction, anim_total_time)
|
||||
// end
|
||||
|
||||
|
||||
// function FoxUltimate:MakeAccelerate(speed_factor, total_time)
|
||||
// local _, accelerate_effect = self:GetAbilityEffectSpecHandle("Accelerate", self.asc, 1, nil)
|
||||
// AbilitySystemBlueprintLibrary.AssignTagSetByCallerMagnitude(
|
||||
// accelerate_effect,
|
||||
// BusyGameplayLibrary.RequestGameplayTag("Effect.Factor"),
|
||||
// speed_factor
|
||||
// )
|
||||
|
||||
// AbilitySystemBlueprintLibrary.AssignTagSetByCallerMagnitude(
|
||||
// accelerate_effect,
|
||||
// BusyGameplayLibrary.RequestGameplayTag("Effect.Duration"),
|
||||
// total_time
|
||||
// )
|
||||
// return self.asc:BP_ApplyGameplayEffectSpecToSelf(accelerate_effect)
|
||||
// end
|
||||
|
||||
|
||||
// function FoxUltimate:OnAnimationComplete(entry)
|
||||
// local new_phase = self.ultimate_phase + 1
|
||||
// if new_phase > 3 then
|
||||
// self.ultimate_phase = 1
|
||||
// else
|
||||
// self.ultimate_phase = new_phase
|
||||
// end
|
||||
// print("FoxUltimate:OnAnimationComplete", self.ultimate_phase)
|
||||
|
||||
// if not self.asc:HasMatchingGameplayTag(self.recast_tag) then
|
||||
// self.ultimate_phase = 1
|
||||
// self:K2_CommitAbilityCooldown(false, false)
|
||||
// end
|
||||
|
||||
// entry.AnimationComplete:Clear()
|
||||
// entry.AnimationEvent:Clear()
|
||||
// self:K2_EndAbility()
|
||||
// end
|
||||
|
||||
// function FoxUltimate:OnAnimationEvent(entry, event)
|
||||
// if event.Name == "OnSpeedChange" then
|
||||
// self.active_accelerate_handle = self:MakeAccelerate(8.0, 0.5)
|
||||
// elseif event.Name == "OnSpeedReset" then
|
||||
// self.asc:RemoveActiveGameplayEffect(self.active_accelerate_handle, -1)
|
||||
// elseif event.Name == "OnDamageBegin" then
|
||||
// local collision = self.owner["TailCollision"]
|
||||
// collision:SetCollisionEnabled(1)
|
||||
// self.overlap_delegate_handle = collision.OnComponentBeginOverlap:Add(function()
|
||||
// if not self.asc:HasMatchingGameplayTag(self.recast_tag) then
|
||||
// local _, recast_effect = self:GetAbilityEffectSpecHandle("Recast", self.asc, 1, nil)
|
||||
// self.active_recast_handle = self.asc:BP_ApplyGameplayEffectSpecToSelf(recast_effect)
|
||||
// end
|
||||
// end)
|
||||
// elseif event.Name == "OnDamageEnd" then
|
||||
// self.owner["TailCollision"]:SetCollisionEnabled(0)
|
||||
// if self.overlap_delegate_handle ~= nil then
|
||||
// self.owner["TailCollision"].OnComponentBeginOverlap:Remove(self.overlap_delegate_handle)
|
||||
// self.overlap_delegate_handle = nil
|
||||
// end
|
||||
// end
|
||||
// end
|
||||
|
||||
|
||||
|
||||
// return Class(nil, nil, FoxUltimate)
|
||||
@ -0,0 +1,32 @@
|
||||
using UnrealSharp.Attributes;
|
||||
using UnrealSharp.Engine;
|
||||
|
||||
namespace Level.GameSettings;
|
||||
|
||||
[UClass]
|
||||
public class ABusyLevelGameMode : AGameMode
|
||||
{
|
||||
[UProperty(PropertyFlags.EditDefaultsOnly)]
|
||||
public UnrealSharp.TSubclassOf<AActor> GameMapActorClass { get; set; }
|
||||
|
||||
protected override void BeginPlay()
|
||||
{
|
||||
base.BeginPlay();
|
||||
if (GameMapActorClass.Valid)
|
||||
{
|
||||
SpawnActor(GameMapActorClass);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// -- function LevelGameMode:K2_PostLogin(new_player_controller)
|
||||
// -- local new_player_state = new_player_controller.PlayerState
|
||||
// -- local role = new_player_state:CreateRoleRoster(new_player_controller)
|
||||
// -- local new_pos = FVector()
|
||||
// -- new_pos.X = 500
|
||||
// -- new_pos.Y = 500
|
||||
// -- new_pos.Z = 50
|
||||
// -- role:K2_SetActorLocation(new_pos, true, nil, false)
|
||||
// -- new_player_controller:Possess(role)
|
||||
// -- end
|
||||
@ -0,0 +1,17 @@
|
||||
using UnrealSharp.Attributes;
|
||||
using UnrealSharp.BusyRabbit;
|
||||
using UnrealSharp.Engine;
|
||||
|
||||
namespace Level.GameSettings;
|
||||
|
||||
[UClass]
|
||||
public class ABusyLevelPlayerState : ALevelPlayerState
|
||||
{
|
||||
protected override void BeginPlay()
|
||||
{
|
||||
base.BeginPlay();
|
||||
APlayerController pc = UGameplayStatics.GetPlayerController(0);
|
||||
var role = CreateRoleRoster(pc) as APawn;
|
||||
pc.Possess(role);
|
||||
}
|
||||
}
|
||||
54
Script/ManagedBusyRabbit/Level/Role/BusyFoxRole.cs
Normal file
54
Script/ManagedBusyRabbit/Level/Role/BusyFoxRole.cs
Normal file
@ -0,0 +1,54 @@
|
||||
// local LevelFoxRole = {}
|
||||
// local Vector2D = require("Utils.Vector2D")
|
||||
|
||||
// function LevelFoxRole:ctor()
|
||||
|
||||
// end
|
||||
|
||||
// function LevelFoxRole:ReceiveBeginPlay()
|
||||
// self["SpineAnimationComponent"]:SetAnimation(0, "Idle/Front", true)
|
||||
// self.last_animation = "Idle/Front"
|
||||
|
||||
// self["SpineBoneFollower"].Target = self
|
||||
// self["SpineBoneFollower"].BoneName = "tail"
|
||||
// self["SpineBoneFollower"].UseComponentTransform = true
|
||||
// self["SpineBoneFollower"].UseScale = true
|
||||
|
||||
// self["TailCollision"]:SetCollisionEnabled(0)
|
||||
// end
|
||||
|
||||
|
||||
// function LevelFoxRole:OnMoveDirectionChanged(InDirection)
|
||||
// -- 运动组件更新方向响应函数
|
||||
// local cur_animation
|
||||
// if Vector2D.Equals(InDirection, Vector2D.Zero) then -- Idle的情况
|
||||
// local forward_direction = self["MovementComponent"]:GetForwardDirection()
|
||||
// if(forward_direction.Y >= 0) then
|
||||
// cur_animation = "Idle/Front"
|
||||
// else
|
||||
// cur_animation = "Idle/Back"
|
||||
// end
|
||||
// else
|
||||
// if(InDirection.Y >= 0) then
|
||||
// cur_animation = "Move/Front"
|
||||
// else
|
||||
// cur_animation = "Move/Back"
|
||||
// end
|
||||
// end
|
||||
// if cur_animation ~= self.last_animation then
|
||||
// self["SpineAnimationComponent"]:SetAnimation(0, cur_animation, true)
|
||||
// self.last_animation = cur_animation
|
||||
// end
|
||||
|
||||
// self["SpineAnimationComponent"]:SetTimeScale(1.0)
|
||||
// end
|
||||
|
||||
|
||||
// function LevelFoxRole:OnMove(location)
|
||||
// -- 控制器移动相应函数
|
||||
// self["MovementComponent"]:MoveTo(location)
|
||||
// end
|
||||
|
||||
|
||||
|
||||
// return Class(nil, nil, LevelFoxRole)
|
||||
36
Script/ManagedBusyRabbit/Level/Role/BusyRabbitRole.cs
Normal file
36
Script/ManagedBusyRabbit/Level/Role/BusyRabbitRole.cs
Normal file
@ -0,0 +1,36 @@
|
||||
// local LevelRabbitRole = {}
|
||||
|
||||
// function LevelRabbitRole:ctor()
|
||||
// self.last_animation = "back/move"
|
||||
// end
|
||||
|
||||
// function LevelRabbitRole:ReceiveBeginPlay()
|
||||
// self["SpineAnimationComponent"]:SetSkin("back/move")
|
||||
// self["SpineAnimationComponent"]:SetAnimation(0, "animation", true)
|
||||
// end
|
||||
|
||||
|
||||
// function LevelRabbitRole:OnMove(location)
|
||||
// -- 控制器移动相应函数
|
||||
// self["MovementComponent"]:MoveTo(location)
|
||||
// end
|
||||
|
||||
|
||||
// function LevelRabbitRole:OnMoveDirectionChanged(InDirection)
|
||||
// -- 运动组件更新方向响应函数
|
||||
// local cur_animation
|
||||
// if(InDirection.Y >= 0) then
|
||||
// cur_animation = "front/move"
|
||||
// else
|
||||
// cur_animation = "back/move"
|
||||
// end
|
||||
// print("LevelRabbitRole:OnMoveDirectionChanged", cur_animation)
|
||||
// if cur_animation ~= self.last_animation then
|
||||
// self["SpineAnimationComponent"]:SetSkin(cur_animation)
|
||||
// self["SpineAnimationComponent"]:SetSlotsToSetupPose()
|
||||
// self.last_animation = cur_animation
|
||||
// end
|
||||
// end
|
||||
|
||||
|
||||
// return Class(nil, nil, LevelRabbitRole)
|
||||
Reference in New Issue
Block a user