Files
OTG_8/Assets/_Scripts/Abilities/BlinkEffect.cs
T
2026-06-04 23:22:13 +03:00

44 lines
1.3 KiB
C#

using UnityEngine;
namespace OTGIntegrated.Abilities
{
public sealed class BlinkEffect : AbilityEffect
{
public LayerMask obstacleMask = ~0;
public float collisionRadius = 0.45f;
public override void Activate(AbilityContext context)
{
if (context.Caster == null)
{
Destroy(gameObject);
return;
}
Vector3 origin = context.Caster.position + Vector3.up * 0.8f;
Vector3 direction = context.Forward;
float distance = Mathf.Max(0f, context.Ability.range);
if (Physics.SphereCast(origin, collisionRadius, direction, out RaycastHit hit, distance, obstacleMask, QueryTriggerInteraction.Ignore))
{
distance = Mathf.Max(0f, hit.distance - collisionRadius);
}
Vector3 target = context.Caster.position + direction * distance;
CharacterController controller = context.Caster.GetComponent<CharacterController>();
if (controller != null)
{
controller.enabled = false;
context.Caster.position = target;
controller.enabled = true;
}
else
{
context.Caster.position = target;
}
Destroy(gameObject, 0.15f);
}
}
}