summaryrefslogtreecommitdiff
path: root/SurvivalTest/Assets/Scripts/Managers/PlayerManager_Equips.cs
blob: a0a595af661a5657122efe5dcc1a039b11573ba9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public partial class PlayerManager : Singleton<PlayerManager>
{
	// 持有的装备
	public List<EquipBase> equips { get { return m_Equips; } }
	private List<EquipBase> m_Equips = new List<EquipBase>();

	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;
	}

	/// <summary>
	/// 装备循环
	/// </summary>
	void UpdateEquips()
	{
		for(int i = 0; i < m_Equips.Count; ++i)
		{
			m_Equips[i].Update();
		}
	}

	/// <summary>
	/// 检查输入,使用装备
	/// </summary>
	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;
			}
		}
	}

	/// <summary>
	/// 开火
	/// </summary>
	/// <returns></returns>
	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;
		}
	}

}