OldBlueWater/BlueWater/Assets/02.Scripts/AssaultMode/Boat.cs

91 lines
2.9 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
2023-08-30 15:36:22 +00:00
using BlueWaterProject;
using UnityEngine;
using UnityEngine.AI;
2023-08-17 03:42:12 +00:00
using UnityEngine.Animations;
2023-08-31 06:46:13 +00:00
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
2023-08-31 06:46:13 +00:00
public class Boat : MonoBehaviour
{
private NavMeshAgent agent;
private LineRenderer lineRenderer;
private GameObject spot; //도착지점 표시 이미지
private Coroutine draw; //경로 그리기 코루틴
2023-08-17 03:42:12 +00:00
2023-08-31 06:46:13 +00:00
private Transform typeCard;
public SpriteRenderer TypeCardSprite { get; private set; }
private LookAtConstraint typeCardLookAtConstraint;
2023-08-11 16:21:26 +00:00
2023-08-31 06:46:13 +00:00
public Vector3 Target { get; set; }
public string CardIndex { get; set; }
2023-08-30 15:36:22 +00:00
public delegate void LandedEventHandler(string cardIndex, AttackerType attackerType, Vector3 assignPos);
2023-08-11 16:21:26 +00:00
public event LandedEventHandler OnLanded;
2023-08-31 06:46:13 +00:00
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;
2023-08-31 06:46:13 +00:00
spot = Instantiate(DataManager.Inst.mouseSpot);
typeCard = transform.Find("TypeCard");
TypeCardSprite = typeCard.GetComponent<SpriteRenderer>();
typeCardLookAtConstraint = typeCard.GetComponent<LookAtConstraint>();
}
2023-08-31 06:46:13 +00:00
private void Start()
{
agent.SetDestination(Target);
2023-08-31 06:46:13 +00:00
spot.gameObject.SetActive(true);
spot.transform.position = Target;
2023-08-31 06:46:13 +00:00
if (draw != null) StopCoroutine(draw);
draw = StartCoroutine(DrawPath());
2023-08-17 03:42:12 +00:00
2023-08-31 06:46:13 +00:00
typeCardLookAtConstraint.SetSources(new List<ConstraintSource>
2023-08-17 03:42:12 +00:00
{
2023-08-31 06:46:13 +00:00
new ConstraintSource
{
sourceTransform = Camera.main.transform,
weight = 1
}
});
}
2023-08-31 06:46:13 +00:00
private void Update()
{
if (!(agent.remainingDistance < 0.1f && !agent.pathPending)) return;
spot.gameObject.SetActive(false);
2023-08-31 06:46:13 +00:00
lineRenderer.enabled = false;
if (draw != null) StopCoroutine(draw);
2023-08-11 16:21:26 +00:00
OnLanded?.Invoke(CardIndex, AttackerType.OFFENSE, Target);
Destroy(gameObject);
}
2023-08-31 06:46:13 +00:00
private IEnumerator DrawPath()
{
2023-08-31 06:46:13 +00:00
lineRenderer.enabled = true;
yield return null;
while (true)
{
2023-08-31 06:46:13 +00:00
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;
}
}
}
}