using System.Collections; using System.Collections.Generic; using UnityEngine; public partial class PlayerManager : Singleton { // 持有的装备 public List equips { get { return m_Equips; } } private List m_Equips = new List(); private Coroutine m_CoFire; public bool isFire { get; private set; } private bool m_AutoFire; private float m_AutoFireDuration = 1f; void InitEquips() { m_Equips.Add(new Equip_Gun()); m_Equips.Add(new Equip_GrenadeLauncher()); m_AutoFire = false; } /// /// 装备循环 /// void UpdateEquips() { for(int i = 0; i < m_Equips.Count; ++i) { m_Equips[i].Update(); } } /// /// 检查输入,使用装备 /// void CheckInput() { if (Input.GetButtonDown("Fire1") || (Input.GetAxisRaw("GunTrigger") == 1)) { if(m_AutoFire) { m_AutoFire = false; } if(TinyCountDown.Instance.Get("ReleaseFire") > 0) { m_AutoFire = true; } isFire = true; if (m_CoFire == null) { m_CoFire = GameApp.Instance.StartCoroutine(coFire()); } } if (!m_AutoFire && !Input.GetButton("Fire1") && (Input.GetAxisRaw("GunTrigger") == 0)) { TinyCountDown.Instance.Set("ReleaseFire", m_AutoFireDuration); isFire = false; if (m_CoFire != null) { GameApp.Instance.StopCoroutine(m_CoFire); m_CoFire = null; } } } /// /// 开火 /// /// IEnumerator coFire() { while (true) { for(int i = 0; i < m_Equips.Count; ++i) { EquipBase equip = m_Equips[i]; if (equip == null) continue; if(equip.autoMode == EquipBase.AutoMode.Interval) { string id = equip.GetHashCode().ToString(); float countDown = TinyCountDown.Instance.Get(id); // 倒计时脱离fire单独计时 if(countDown <= 0) { equip.OnTrigger(m_Crew.gameObject); TinyCountDown.Instance.Set(id, equip.interval); } else { } } } yield return null; } } }