using System; using System.Collections.Generic; using UnityEngine; public class StraightBulletCurve : BulletCurve { private Vector2 start; private Vector2 end; public StraightBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer bulletEffect, RectTransform target, HB427_tagSCUseSkill tagUseSkillAttack, Action> onHit) : base(caster, skillConfig, bulletEffect, target, tagUseSkillAttack, onHit) { } public override void Reset() { base.Reset(); start = WorldToLocalAnchoredPosition(bulletTrans.position); end = WorldToLocalAnchoredPosition(target.position); // BattleUtility.MarkStartAndEnd(bulletTrans, target); } public override void Run() { if (finished) return; if (bulletTrans == null) { Debug.LogError("BulletTrans is null, cannot run StraightBulletCurve"); } elapsed += Time.deltaTime; float t = Mathf.Clamp01(elapsed / duration); Vector2 pos = Vector2.Lerp(start, end, t); if (null != bulletTrans) { bulletTrans.anchoredPosition = pos; } Vector2 dir = end - start; float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; if (null != bulletTrans) { bulletTrans.localRotation = Quaternion.Euler(0, bulletTrans.transform.localScale.x < 0f ? 180 : 0, angle); } // if (bulletTrans.transform.localScale.x < 0f) // { // bulletTrans.transform.localRotation *= Quaternion.Euler(0, 180, 0); // } if (t >= 1f) { finished = true; onHit?.Invoke(0, hurts); } } }