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, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hurtList, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit) 
 | 
        : base(caster, skillConfig, bulletEffect, target, hurtList, bulletIndex, onHit) 
 | 
    { 
 | 
  
 | 
    } 
 | 
  
 | 
    public override void Reset() 
 | 
    { 
 | 
        base.Reset(); 
 | 
        start = WorldToLocalAnchoredPosition(bulletTrans.position); 
 | 
        end = WorldToLocalAnchoredPosition(target.position); 
 | 
        duration = Vector2.Distance(start, end) / skillConfig.BulletFlySpeed; 
 | 
        // 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 + (caster.Camp == BattleCamp.Red ? 0 : 180); 
 | 
        if (null != bulletTrans) 
 | 
        { 
 | 
            bulletTrans.rotation = Quaternion.Euler(0, 0, angle); 
 | 
        } 
 | 
  
 | 
        if (t >= 1f) 
 | 
        { 
 | 
            finished = true; 
 | 
            onHit?.Invoke(mBulletIndex, hurts); 
 | 
        } 
 | 
    } 
 | 
} 
 |