OldBlueWater/BlueWater/Assets/02.Scripts/AssaultMode/Boat.cs
2023-08-31 15:46:13 +09:00

91 lines
2.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using BlueWaterProject;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.Animations;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
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, AttackerType attackerType, Vector3 assignPos);
public event LandedEventHandler OnLanded;
private void Awake()
{
agent = GetComponent<NavMeshAgent>();
lineRenderer = GetComponent<LineRenderer>();
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<SpriteRenderer>();
typeCardLookAtConstraint = typeCard.GetComponent<LookAtConstraint>();
}
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<ConstraintSource>
{
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, AttackerType.OFFENSE, 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;
}
}
}
}