using System.Collections; using System.Collections.Generic; using UnityEngine; using Core.Utilities; using UnityEngine.UI; using TMPro; using DG.Tweening; using TowerDefense.Agents; using TowerDefense.UI.HUD; /** * 无尽模式分数管理器 * @Author: chenxin * @Date: 2020-11-10 13:43:54 */ namespace KTGMGemClient { public class EndlessScoreManager : Singleton { public TextMeshProUGUI ScoreText; private int score; /// /// 数字滚动时间 /// public float RollTime { get; set; } = 0.4f; public GameObject DoubleHit; public Text DoubleHitText; public DoubleHitImg OneTimeKillObj; public Text OneTimeKillText; /// /// 连击的CD时间 /// private float doubleHitCD = 0.8f; private float remainTime; /// /// 连击次数 /// public int DoubleHitCount { get; private set; } /// /// 连击是否开启 /// private bool openDoubleHit; private CanvasGroup canvasGroup; private int CurrentScore { get { return score; } set { score = value; ScoreText.text = score.ToString().PadLeft(7, '0'); } } // Start is called before the first frame update private void Start() { Init(); EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessAgentDead, AgentDead); EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessOneHit, OnHit); EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, OnTimeKill); canvasGroup = DoubleHit.GetComponent(); } /// /// /// 一次性击杀 /// /// private void OnTimeKill(int count) { if (count >= 10) { AddScore(0); ShowOneTimeKill(); } } private void AgentDead(int point) { if (EndlessGameUI.instance.state == EndlessGameUI.State.GameOver) return; AddScore(point); } // Update is called once per frame private void Update() { if (openDoubleHit) { if (remainTime <= 0) { openDoubleHit = false; DoubleHitCount = 0; HideDoubleHit(); } else remainTime -= Time.deltaTime; } } /// /// 一次击打 /// private void OnHit() { ++DoubleHitCount; openDoubleHit = true; DoubleHitText.text = $"{DoubleHitCount}"; if (DoubleHitCount >= 10) ShowDoubleHit(); remainTime = doubleHitCD; // 策划说先写死吧 if (DoubleHitCount == 50) { AddScore(0); FloatDoubleHitReward(200); } else if (DoubleHitCount == 100) { AddScore(0); FloatDoubleHitReward(500); } else if (DoubleHitCount == 200) { AddScore(0); FloatDoubleHitReward(1500); } } private void ShowDoubleHit() { canvasGroup.alpha = 1; if (!DoubleHit.activeInHierarchy) { DoubleHit.SetActive(true); DoubleHit.transform.localScale = Vector3.zero; DOTween.To(() => DoubleHit.transform.localScale, (Vector3 v) => DoubleHit.transform.localScale = v, Vector3.one, 0.15f) .SetEase(Ease.OutBack); } else { Sequence sequence = DOTween.Sequence(); sequence.Append(DOTween.To(() => DoubleHit.transform.localScale, (Vector3 v) => DoubleHit.transform.localScale = v, new Vector3(1.2f, 1.2f, 1.2f), 0.08f)); sequence.Append(DOTween.To(() => DoubleHit.transform.localScale, (Vector3 v) => DoubleHit.transform.localScale = v, Vector3.one, 0.05f)); } } private void HideDoubleHit() { if (!DoubleHit.activeInHierarchy) return; DOTween.To(() => canvasGroup.alpha, (float v) => canvasGroup.alpha = v, 0, 0.3f); } /// /// 显示一次性击杀飘字 /// /// private void ShowOneTimeKill() { OneTimeKillObj.SetkillCount(); } /// /// 飘连击奖励分数 /// /// private void FloatDoubleHitReward(int score) { } public void ShowScore() { gameObject.SetActive(true); } public void HideScore() { gameObject.SetActive(false); } public void Init() { EndlessScoreData.CurrentSocre = 0; score = 0; ScoreText.text = EndlessScoreData.FormatScore; HideDoubleHit(); } /// /// 增加分数 /// /// public void AddScore(int score) { EndlessScoreData.CurrentSocre += score; DOTween.To(() => CurrentScore, (int v) => CurrentScore = v, EndlessScoreData.CurrentSocre, RollTime).SetEase(Ease.Linear); } } }