Files
Cielonos/Assets/Scripts/MainGame/Items/SupportEquipments/VoidAnchor.cs

62 lines
2.3 KiB
C#
Raw Normal View History

2026-02-13 09:22:11 -05:00
using Cielonos.MainGame.Buffs.Character;
using Cielonos.MainGame.Characters;
using Cielonos.MainGame.UI;
2026-03-20 12:07:44 -04:00
using SLSUtilities.FunctionalAnimation;
2026-02-13 09:22:11 -05:00
using SLSUtilities.General;
using UnityEngine;
2026-05-23 08:27:50 -04:00
namespace Cielonos.MainGame.Inventory.Collections
2026-02-13 09:22:11 -05:00
{
public partial class VoidAnchor : SupportEquipmentBase
{
public override void OnPress()
{
if (functionSm.mainFunction.IsAvailable())
{
2026-05-23 08:27:50 -04:00
CharacterBase enemy = CombatManager.EnemySm.GetNearestEnemy(50f);
2026-02-13 09:22:11 -05:00
if (enemy != null)
{
2026-06-05 04:21:00 -04:00
Vector3 vector = (enemy.CenterPosition - player.CenterPosition).Flatten();
2026-02-13 09:22:11 -05:00
float distance = vector.magnitude - enemy.collisionSc.mainColliderRadius - 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();
2026-05-10 11:47:55 -04:00
PlayerCanvas.SupportEquipmentsUIArea[this].UseOutlineAnimation();
2026-02-13 09:22:11 -05:00
}
else
{
2026-05-10 11:47:55 -04:00
PlayerCanvas.SupportEquipmentsUIArea[this].CanNotUseOutlineAnimation();
2026-02-13 09:22:11 -05:00
}
}
}
public partial class VoidAnchor
{
private void GenerateArea(string vfxName)
{
2026-05-23 08:27:50 -04:00
NormalArea weakArea = vfxData.SpawnVFX(vfxName, player).GetComponentInChildren<NormalArea>();
2026-02-13 09:22:11 -05:00
weakArea.Initialize<NormalArea>(player, this, Fraction.Enemy)
.SetAttackSubmodule<NormalArea>(attackData[vfxName])
.SetTimeSubmodule<NormalArea>(3f, 0.25f)
2026-05-23 08:27:50 -04:00
.SetHitSubmodule<NormalArea>();
weakArea.SetImpulseSubmodule().WithDynamicForce(10f);
2026-02-13 09:22:11 -05:00
2026-03-20 12:07:44 -04:00
weakArea.hitSm.AddHitEvent((hitTarget, hitPosition) =>
{
new Weak(30).Apply(hitTarget);
2026-05-23 08:27:50 -04:00
hitTarget.GetHit(Breakthrough.Type.Forced, out _, DisruptionType.ForcedExternal);
2026-03-20 12:07:44 -04:00
});
2026-02-13 09:22:11 -05:00
}
}
}