Files
Cielonos/Assets/Scripts/MainGame/Items/SupportEquipments/VoidAnchor.cs
SoulliesOfficial 39b43680a9 爆更
2026-07-18 03:16:20 -04:00

64 lines
2.4 KiB
C#

using System.Collections.Generic;
using Cielonos.MainGame.Buffs.Character;
using Cielonos.MainGame.Characters;
using Cielonos.MainGame.UI;
using SLSUtilities.FunctionalAnimation;
using SLSUtilities.General;
using UnityEngine;
namespace Cielonos.MainGame.Inventory.Collections
{
public partial class VoidAnchor : SupportEquipmentBase
{
public override void OnPress(List<PlayerInputModifierType> modifiers = default)
{
if (functionSm.mainFunction.IsAvailable())
{
CharacterBase enemy = CombatManager.EnemySm.Query(50f).Nearest();
if (enemy != null)
{
Vector3 vector = (enemy.CenterPosition - player.CenterPosition).Flatten();
float distance = vector.magnitude - enemy.collisionSc.colliderRadius - 1f;
distance = Mathf.Max(distance, 0f);
Vector3 direction = vector.normalized;
player.animationSc.SetupDash(direction, false, distance);
}
else
{
player.animationSc.SetupDash(player.transform.forward, false, -1f);
}
player.eventSm.onDashEnd.Add("VoidAnchor", new PrioritizedAction(() => GenerateArea("WeakArea"), 0 , 1));
functionSm.mainFunction.Execute();
PlayerCanvas.SupportEquipmentsUIArea[this].UseOutlineAnimation();
}
else
{
PlayerCanvas.SupportEquipmentsUIArea[this].CanNotUseOutlineAnimation();
}
}
}
public partial class VoidAnchor
{
private void GenerateArea(string vfxName)
{
NormalArea weakArea = vfxData.SpawnVFX(vfxName, player).GetComponentInChildren<NormalArea>();
weakArea.Initialize<NormalArea>(player, this, Fraction.Enemy)
.SetAttackSubmodule<NormalArea>(attackData[vfxName])
.SetTimeSubmodule<NormalArea>(3f, 0.25f, 0.04f)
.SetHitSubmodule<NormalArea>();
weakArea.SetImpulseSubmodule().WithDynamicForce(10f);
weakArea.eventSm.onHit.Add((hitTarget, hitPosition) =>
{
new Weak(30).Apply(hitTarget);
hitTarget.GetHit(Breakthrough.Type.Forced, out _, DisruptionType.ForcedExternal);
});
}
}
}