using System.Collections;
using UnityEngine;
namespace WildAttack
{
///
/// 弓
///
public class Bow : MonoBehaviour
{
#region Members
[SerializeField] private Transform shootPoint;
private GameObject arrowPfb;
private Animator anim;
private float shootSpawn = 0;
GameObject arrowObj = null;
[Header("用户信息")]
[SerializeField]
PlayerTypeEnum playerTypeEnum = PlayerTypeEnum.First;//默认是用户1的弓
#endregion
#region Lifecycle
void Start()
{
//shootPoint = transform.Find("ShootPoint");
arrowPfb = Resources.Load("Player/Arrow");
anim = GetComponentInChildren();
//StartCoroutine(CreateArrow());
CreateArrow();
}
void Update()
{
if (shootSpawn > 0)
{
shootSpawn -= Time.deltaTime;
}
// 更新准备中的箭
if (arrowObj == null) return;
arrowObj.transform.position = shootPoint.position;
arrowObj.transform.rotation = shootPoint.rotation;
}
#endregion
#region Functions
///
/// 射击
///
///
///
public void Shoot(float speed, Transform crossHair)
{
// 判空
if (arrowObj == null) return;
// 判断动画状态
AnimatorStateInfo animInfo = anim.GetCurrentAnimatorStateInfo(0);
if (animInfo.IsName("Start") && animInfo.normalizedTime > 0.99f)
{
// 判断射击间隔
if (shootSpawn <= GameModule.GetInstance().GetData("downTime") && shootSpawn > 0)
{
return;
}
else
{
shootSpawn = GameModule.GetInstance().GetData("downTime");
GameMananger.GetInstance().SetShootSpawn(GameModule.GetInstance().GetData("downTime"),playerTypeEnum);
Arrow arrow = arrowObj.AddComponent();
//GameObject.Find("CrossHairTrans").transform
arrow.Init(crossHair.eulerAngles, speed, playerTypeEnum);
arrowObj = null;
StartCoroutine(CreateWaitForSeconds());
}
}
}
///
/// 生成新的箭
///
IEnumerator CreateWaitForSeconds()
{
anim.SetTrigger("shoot");
// 射箭间隔
yield return new WaitForSeconds(GameModule.GetInstance().GetData("shootInterval"));
CreateArrow();
}
private void CreateArrow()
{
arrowObj = GameObject.Instantiate(arrowPfb);
arrowObj.transform.position = shootPoint.position;
arrowObj.transform.rotation = shootPoint.rotation;
}
#endregion
}
}