using System; using System.Collections; using System.Collections.Generic; using BlueWaterProject; using UnityEngine; using UnityEngine.AI; using UnityEngine.Animations; using UnityEngine.UI; public class Boat : MonoBehaviour { private NavMeshAgent agent; private LineRenderer lineRenderer; private GameObject spot; //도착지점 표시 이미지 private Coroutine draw; //경로 그리기 코루틴 private Transform typeCard; public SpriteRenderer TypeCardSprite { get; private set; } private LookAtConstraint typeCardLookAtConstraint; public Vector3 Target { get; set; } public string CardIndex { get; set; } public delegate void LandedEventHandler(string cardIndex, Vector3 assignPos); public event LandedEventHandler OnLanded; private void Awake() { agent = GetComponent(); lineRenderer = GetComponent(); lineRenderer.startWidth = 0.1f; lineRenderer.endWidth = 0.1f; lineRenderer.material.color = Color.yellow; lineRenderer.enabled = false; spot = Instantiate(DataManager.Inst.mouseSpot); typeCard = transform.Find("TypeCard"); TypeCardSprite = typeCard.GetComponent(); typeCardLookAtConstraint = typeCard.GetComponent(); } private void Start() { agent.SetDestination(Target); spot.gameObject.SetActive(true); spot.transform.position = Target; if (draw != null) StopCoroutine(draw); draw = StartCoroutine(DrawPath()); typeCardLookAtConstraint.SetSources(new List { new ConstraintSource { sourceTransform = Camera.main.transform, weight = 1 } }); } private void Update() { if (!(agent.remainingDistance < 0.1f && !agent.pathPending)) return; spot.gameObject.SetActive(false); lineRenderer.enabled = false; if (draw != null) StopCoroutine(draw); OnLanded?.Invoke(CardIndex, Target); Destroy(gameObject); } private IEnumerator DrawPath() { lineRenderer.enabled = true; yield return null; while (true) { var count = agent.path.corners.Length; lineRenderer.positionCount = count; for (var i = 0; i < count; i++) { lineRenderer.SetPosition(i, agent.path.corners[i] + new Vector3(0,1,0)); } yield return null; } } }