From f5a5416b754abdfb2b84a72ede5d237161a2a248 Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Thu, 26 Nov 2020 15:22:00 +0800 Subject: [PATCH] buff预览界面 --- Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs | 621 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 544 insertions(+), 77 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs b/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs index ca518d0..75b170d 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs @@ -1,4 +1,5 @@ -using Core.Utilities; +using TowerDefense.Towers; +using Core.Utilities; using System; using TMPro; using UnityEngine; @@ -6,6 +7,8 @@ using MoreMountains.NiceVibrations; using TowerDefense.Level; using KTGMGemClient; +using TowerDefense.UI.HUD; +using System.Collections; /// <summary> /// 无尽模式用自己的EndlessUIStart @@ -16,7 +19,7 @@ public TextMeshProUGUI timeTextNew = null; - public TextMeshProUGUI timeStatic = null; + //public TextMeshProUGUI timeStatic = null; /// <summary> /// 结算界面 @@ -44,44 +47,353 @@ private bool isPause; + public bool beginDragStep = false; + public bool guideThirdWaveStep = false; + + public GameObject darkGroundImg; + + private TextMeshProUGUI energyText;//显示能量的TEXT + private Image fireEnergyImg, bombEnergyImg; + private Image fireEnergyBgImg, bombEnergyBgImg; + + //public Sprite energyNormal, energyDisplay;//能量够买,能量不够 + + private ParticleSystem energyPS;//能量足够的特效 + + /// <summary> + /// Awake is called when the script instance is being loaded. + /// </summary> + protected override void Awake() + { + base.Awake(); + //这里为了方便直接使用Endless2D + GameObject root = GameObject.Find("ManagerRoot"); + + if (root == null) + { + root = new GameObject("ManagerRoot"); + root.AddComponent<DoNotDestory>(); + root.AddComponent<MasterSocket>(); + root.AddComponent<TDAA_SDKManager>(); + root.AddComponent<AudioSourceManager>(); + root.AddComponent<JsonDataReader>(); + root.AddComponent<JsonDataInit>(); + } + firstStart = true; + //EventCenter.Ins.Add((int)KTGMGemClient.EventType.JsonDataReadDone, JsonDataReadDone); + } + + Vector2 tmpOffect;//计算适配的偏移量 + bool firstStart = true; // Start is called before the first frame update void Start() { + InitSDK(); + bGameStart = false; + bFirstLoaded = false; + GameConfig.CreateRandomTower = true; + bVibrate = new bool[4]; bVibrate[0] = bVibrate[1] = bVibrate[2] = bVibrate[3] = false; - // 设置为顶层渲染: - countDownTextNew.transform.SetAsLastSibling(); - - if (timeStatic) - timeStatic.gameObject.SetActive(false); EndlessBuffSelect.instance.HideBuffUI(); - EndlessBossHPManager.instance.HideHP(); - EndlessSettlement settlement = SettlementUI.transform.GetChild(0).GetComponent<EndlessSettlement>(); + EndlessSettlement settlement = SettlementUI.transform.Find("BgMask").GetComponent<EndlessSettlement>(); settlement.Init(); SettlementUI.SetActive(false); + EndlessMaskUI.instance.Hide(); + EndlessBossHPManager.instance.HideHP(); + EndlessScoreManager.instance.HideScore(); + + + float ratio = 0.06666667f; + RectTransform ts = GetComponent<RectTransform>(); + float tmpScale = ratio / ts.localScale.x - 1.0f; + float offect = tmpScale * (ts.sizeDelta.y * 0.5f); + //Debug.Log($"tmpScale:{tmpScale} offect:{offect}"); + tmpOffect = new Vector2(0, offect); + transform.Find("Panel/Bottom").GetComponent<RectTransform>().anchoredPosition += tmpOffect; + transform.Find("Panel/TowerBuyBtn").GetComponent<RectTransform>().anchoredPosition += tmpOffect; + transform.Find("Panel/SwitchSpeed").GetComponent<RectTransform>().anchoredPosition += tmpOffect; + + transform.Find("Panel/BossHPBar").GetComponent<RectTransform>().anchoredPosition -= tmpOffect * 0.5f; + transform.Find("Panel/Score").GetComponent<RectTransform>().anchoredPosition -= tmpOffect * 0.5f; + transform.Find("Panel/TimeInfo").GetComponent<RectTransform>().anchoredPosition -= tmpOffect * 0.5f; + //transform.Find("Panel/Boss").GetComponent<RectTransform>().anchoredPosition -= tmpOffect*0.5f; + + + //darkGroundImg = transform.Find("Image_DarkGround").gameObject; + darkGroundImg.GetComponent<RectTransform>().offsetMin += tmpOffect; + darkGroundImg.GetComponent<RectTransform>().offsetMax -= tmpOffect * 0.5f; + + darkGroundImg.SetActive(false); //查询是否已经做过了新手引导 - int guide = PlayerPrefs.GetInt("GemBattleGuide"); - // if (guide == 0) - // { - // Debug.Log("需要进行新手引导"); - // Pause(); + //CheckIsNewbie(); - // uiStartMssk.gameObject.SetActive(false); - // countDownTextNew.text = ""; - // countDownTextNew.gameObject.SetActive(false); + GameConfig.EndlessOpenAttackTowerCount = 0; + GameConfig.EndlessBuyTowerCount = 0; + GameConfig.EndlessPortUseSkillTowerCount = 0; - // Instantiate(Resources.Load<GameObject>("UI/Guide/GuidePanel"), this.transform); - // //bGameStart = true; - // // 开始关卡 - // //EndlessLevelManager.instance.StartLevel(); - // //timeTextNew.gameObject.SetActive(true); + AudioSourceManager.Ins.Play(AudioEnum.BGM2); - // // 开始播放背景音乐. - // // if (bgMusic != null) - // // bgMusic.Play(); - // } + energyText = transform.Find("Panel/Energy/EnergyShow/EnergyText").GetComponent<TextMeshProUGUI>(); + + fireEnergyImg = transform.Find("Panel/Energy/FireSkillBtn/Image").GetComponent<Image>(); + bombEnergyImg = transform.Find("Panel/Energy/BombSkillBtn/Image").GetComponent<Image>(); + + fireEnergyBgImg = transform.Find("Panel/Energy/FireSkillBtn").GetComponent<Image>(); + bombEnergyBgImg = transform.Find("Panel/Energy/BombSkillBtn").GetComponent<Image>(); + + energyPS = transform.Find("Panel/Energy/FireSkillBtn/Effect_UI_JiNengTuBiao/03 (7)").GetComponent<ParticleSystem>(); + fireEnergyBgImg.color = normalColor; + + + transform.Find("Panel/Energy/FireSkillBtn").GetComponent<Button>().onClick.AddListener(OnClickFireSkillBtn); + transform.Find("Panel/Energy/BombSkillBtn").GetComponent<Button>().onClick.AddListener(OnClickBombSkillBtn); + + transform.Find("Panel/Energy").gameObject.SetActive(false); + transform.Find("Panel/BuffPreviewButton").gameObject.SetActive(false); + + GameConfig.EnergyCount = 0; + GameConfig.SkillLevel = 1; + + energyText.text = GameConfig.EnergyCount.ToString(); + fireSkillLevelText = transform.Find("Panel/Energy/FireSkillBtn/Level/Text").GetComponent<Text>(); + bombSkillLevelText = transform.Find("Panel/Energy/BombSkillBtn/Level/Text").GetComponent<Text>(); + + transform.Find("Panel/Energy/BombSkillBtn").gameObject.SetActive(false);//手动关闭了电按钮 + + EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EnergyUp, EnergyUp); + EventCenter.Ins.Add((int)KTGMGemClient.EventType.SkillLevelUpBuff, SkillLevelUpBuff); + + + } + + private void CheckIsNewbie() + { + //GameConfig.IsNewbie = false; + if (GameConfig.IsNewbie) + { + Debug.Log("开始新手引导"); + GameConfig.CanDragTower = false; + Pause(); + HideUIMask(); + countDownTextNew.text = ""; + countDownTextNew.gameObject.SetActive(false); + + GameObject guideObj = Instantiate(Resources.Load<GameObject>("UI/Guide/GuidePanel"), transform.Find("Panel")); + guideObj.GetComponent<RectTransform>().offsetMin += tmpOffect; + AddGuideEvent(); + + transform.Find("Panel/SwitchSpeed").gameObject.SetActive(false); + } + } + + /// <summary> + /// 所有数据读取完毕 + /// </summary> + private void JsonDataReadDone() + { + transform.Find("Panel/Energy").gameObject.SetActive(true); + transform.Find("Panel/BuffPreviewButton").gameObject.SetActive(true); + fireSkillCost = JsonDataCenter.GetSkillLevelInfo(fireSkillID, GameConfig.SkillLevel).cost; + bombSkillCost = JsonDataCenter.GetSkillLevelInfo(bombSkillID, GameConfig.SkillLevel).cost; + + energyMax = JsonDataCenter.GetById<battle>(22).value; + + transform.Find("Panel/Energy/FireSkillBtn/Image/EnergyText").GetComponent<TextMeshProUGUI>().text = fireSkillCost.ToString(); + transform.Find("Panel/Energy/BombSkillBtn/Image/EnergyText").GetComponent<TextMeshProUGUI>().text = bombSkillCost.ToString(); + + EnergyUp(0); + } + + /// <summary> + /// 拖拽时候黑色背景 + /// </summary> + /// <param name="isOn"></param> + public void SetDarkGround(bool isOn) + { + if (darkGroundImg.activeSelf != isOn) + darkGroundImg.SetActive(isOn); + } + private void InitSDK() + { + if (TDAA_SDKManager.Ins == null) + gameObject.AddComponent<TDAA_SDKManager>(); + TDAA_SDKManager.Ins.ArriveBattle();//埋点 + TDAA_SDKManager.Ins.Statistics(4);//埋点 + + if (AudioSourceManager.Ins == null) + gameObject.AddComponent<AudioSourceManager>(); + } + + public void ShowUIMask() + { + uiStartMssk.gameObject.SetActive(true); + } + + public void HideUIMask() + { + uiStartMssk.gameObject.SetActive(false); + } + + /// <summary> + /// 添加新手引导事件 + /// </summary> + private void AddGuideEvent() + { + EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateFireLv2, CreateFireLv2); + EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateFirstWave, CreateFirstWave); + EventCenter.Ins.Add((int)KTGMGemClient.EventType.RestartWave, RestartWave); + EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.AddGold, AddGold); + EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateWaterLv1, CreateWaterLv1); + EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateSecondWave, CreateSecondWave); + EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateThirdWave, CreateThirdWave); + EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateThirdWaveDone, CreateThirdWaveDone); + EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.GuideEnergyUp, GuideEnergyUp); + + + //EventCenter.Ins.Add((int)KTGMGemClient.EventType.SkillRelease, SkillRelease); + EventCenter.Ins.Add((int)KTGMGemClient.EventType.GuideFinish, NewbieGuideEnd); + + //EventCenter.Ins.Add<Vector3>((int)KTGMGemClient.EventType.PlayAppearEffect, GuidePlayAppearEffect); + EventCenter.Ins.Add<Vector3>((int)KTGMGemClient.EventType.GuidePlayUpgradeEffect, GuidePlayUpgradeEffect); + } + + /// <summary> + /// 在(2,3)位置放置一个火元素的塔 + /// </summary> + private void CreateFireLv2() + { + Tower aTower = EndlessRandomTower.instance.getTowerByName("GrowUpTower"); + EndlessGameUI.instance.PlaceTowerForce(aTower, new IntVector2(2, 3), 2); + } + + /// <summary> + /// 开始第一关的第一个波次 + /// </summary> + private void CreateFirstWave() + { + Restart(); + EventCenter.Ins.Add((int)KTGMGemClient.EventType.FireTowerChargeEnd, OnFireTowerChargeEnd); + } + + /// <summary> + /// 火塔充能释放完成 + /// </summary> + private void OnFireTowerChargeEnd() + { + Pause(); + EndlessLevelManager.instance.PauseWave(); + EventCenter.Ins.Remove((int)KTGMGemClient.EventType.FireTowerChargeEnd, OnFireTowerChargeEnd); + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.ChargingEnd); + } + + /// <summary> + /// 恢复波次 + /// </summary> + private void RestartWave() + { + Restart(); + EndlessLevelManager.instance.RestartWave(); + } + + /// <summary> + /// 获得金币 + /// </summary> + /// <param name="gold"></param> + private void AddGold(int gold) + { + EndlessLevelManager.instance.Currency.AddCurrency(gold); + } + + /// <summary> + /// 新手引导生成特效 + /// </summary> + private void GuidePlayAppearEffect(Vector3 worldPos) + { + EndlessGameUI.instance.PlayAppearEffectGuide(worldPos); + } + + /// <summary> + /// 新手引导合成特效 + /// </summary> + private void GuidePlayUpgradeEffect(Vector3 worldPos) + { + EndlessGameUI.instance.GuidePlayUpgradeEffect(worldPos); + } + + /// <summary> + /// 在攻击位置上创建一个1级的木塔 + /// </summary> + private void CreateWaterLv1() + { + Tower aTower = EndlessRandomTower.instance.getTowerByName("BlinkTower"); + EndlessGameUI.instance.PlaceTowerForce(aTower, new IntVector2(1, 3), 1); + } + + /// <summary> + /// 开始第二关 + /// </summary> + private void CreateSecondWave() + { + EndlessLevelManager.instance.NewbieUpdateLevel(); + beginDragStep = true; + } + + /// <summary> + /// 开始第三关 + /// </summary> + private void CreateThirdWave() + { + CommonDebugHelper.Debug($"开始下一关"); + + EndlessLevelManager.instance.NewbieUpdateLevel(); + beginDragStep = false; + guideThirdWaveStep = true; + } + + /// <summary> + /// 第三关出兵完毕,暂停出兵 + /// </summary> + private void CreateThirdWaveDone() + { + EndlessLevelManager.instance.PauseWave(); + } + + + + + /// <summary> + /// 在第三条兵线释放技能宝石 + /// </summary> + private void SkillRelease() + { + int attributeId = 99902; + int level = 1; + int waveLineIndex = 1; + + // 播放特效,并处理伤害. + EndlessWaveLineManager.instance.PlayWaveLineEffect(waveLineIndex); + AgentInsManager.instance.ExecWavelineAttack(waveLineIndex, attributeId, level, false); + ++GameConfig.EndlessPortUseSkillTowerCount; + StartCoroutine(Delay1()); + } + + private IEnumerator Delay1() + { + yield return new WaitForSeconds(1f); + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.SkillReleaseDone); + } + + /// <summary> + /// 新手引导结束 + /// </summary> + private void NewbieGuideEnd() + { + EndlessLevelManager.instance.RestartWave(); + GameConfig.IsNewbie = false; + transform.Find("Panel/SwitchSpeed").gameObject.SetActive(true); } @@ -126,6 +438,129 @@ } } + #region 点击右侧技能按钮释放技能 + + private int fireSkillCost, bombSkillCost;//两个技能花费 + private int fireSkillID = 99902; + private int bombSkillID = 99901; + private int energyMax = 0;//能量最大值,目前写死 + private Color normalColor = new Color(1.0f, 1.0f, 1.0f, 1.0f); + private Color disColor = new Color(1.0f, 1.0f, 1.0f, 0); + + private Text fireSkillLevelText, bombSkillLevelText; + + /// <summary> + /// 点击火技能 + /// </summary> + private void OnClickFireSkillBtn() + { + //Debug.Log("释放了火技能:" + GameConfig.EnergyCount + " fireSkillCost:" + fireSkillCost); + if (GameConfig.EnergyCount >= fireSkillCost) + { + EnergyUp(-fireSkillCost); + Debug.Log("释放了火技能" + GameConfig.SkillLevel); + // 播放特效,并处理伤害. + EndlessWaveLineManager.instance.PlayAllWaveLineEffect(); + AgentInsManager.instance.ExecAllWavelineAttack(fireSkillID, GameConfig.SkillLevel, false); + ++GameConfig.EndlessPortUseSkillTowerCount; + } + } + + /// <summary> + /// 点击释放电击技能 + /// </summary> + private void OnClickBombSkillBtn() + { + return; + Debug.Log("释放了电技能:" + GameConfig.EnergyCount + " bombSkillCost:" + bombSkillCost); + + if (GameConfig.EnergyCount >= bombSkillCost) + { + EnergyUp(-bombSkillCost); + + Debug.Log("释放了电技能"); + } + } + + public void GuideEnergyUp(int count) + { + GameConfig.EnergyCount = count; + EnergyUp(0); + } + + /// <summary> + /// 击杀小怪能量(释放技能使用) + /// </summary> + private void EnergyUp(int upCount) + { + GameConfig.EnergyCount += upCount; + if (GameConfig.EnergyCount > energyMax) + { + GameConfig.EnergyCount = energyMax; + } + energyText.text = GameConfig.EnergyCount.ToString(); + if (GameConfig.EnergyCount >= fireSkillCost) + { + //激活特效 + if (!energyPS.isPlaying) + { + energyPS.Play(); + fireEnergyBgImg.color = disColor; + fireEnergyImg.gameObject.SetActive(false); + } + } + else + { + //关闭特效 + if (energyPS.isPlaying) + { + energyPS.Stop(); + fireEnergyBgImg.color = normalColor; + fireEnergyImg.gameObject.SetActive(true); + } + } + + // if (GameConfig.EnergyCount >= bombSkillCost) + // { + // if (bombEnergyBgImg.color != normalColor) + // { + // bombEnergyImg.sprite = energyNormal; + // bombEnergyBgImg.color = normalColor; + // } + // } + // else + // { + // if (bombEnergyBgImg.color != disColor) + // { + // bombEnergyImg.sprite = energyDisplay; + // bombEnergyBgImg.color = disColor; + // } + // } + } + + + + /// <summary> + /// 增加技能等级的事件监听 + /// </summary> + private void SkillLevelUpBuff() + { + if (GameConfig.SkillLevel <= 5) + { + GameConfig.SkillLevel++; + fireSkillCost = JsonDataCenter.GetSkillLevelInfo(fireSkillID, GameConfig.SkillLevel).cost; + bombSkillCost = JsonDataCenter.GetSkillLevelInfo(bombSkillID, GameConfig.SkillLevel).cost; + Debug.Log($"技能最高5级,当前技能等级:{GameConfig.SkillLevel} fireSkillCost:{fireSkillCost} "); + fireSkillLevelText.text = "Lv." + GameConfig.SkillLevel; + bombSkillLevelText.text = "Lv." + GameConfig.SkillLevel; + } + } + + + + + #endregion + public void Pause() { isPause = true; @@ -141,6 +576,16 @@ // Update is called once per frame void Update() { + if (firstStart) + { + if (!GameConfig.JsonReadDone) + return; + else + { + firstStart = false; + CheckIsNewbie(); + } + } if (isPause) return; if (bGameStart) @@ -149,66 +594,88 @@ timeTextNew.text = ConvertTime((float)Math.Ceiling(startTime)); } - if (!bFirstLoaded && !bGameStart) + if (!GameConfig.IsNewbie) { - bFirstLoaded = true; - secToDo = 4; + if (!bFirstLoaded && !bGameStart) + { + bFirstLoaded = true; + secToDo = 4; + } + + if (bFirstLoaded && !bGameStart) + { + secToDo -= Time.deltaTime; + countDownTextNew.gameObject.SetActive(true); + + if (secToDo >= 3) + { + countDownTextNew.text = "3"; + if (!bVibrate[3]) + { + bVibrate[3] = true; + MMVibrationManager.Haptic(HapticTypes.SoftImpact); + } + } + else if (secToDo >= 2) + { + countDownTextNew.text = "2"; + if (!bVibrate[2]) + { + bVibrate[2] = true; + MMVibrationManager.Haptic(HapticTypes.MediumImpact); + } + } + else if (secToDo >= 1) + { + countDownTextNew.text = "1"; + if (!bVibrate[1]) + { + bVibrate[1] = true; + MMVibrationManager.Haptic(HapticTypes.HeavyImpact); + } + } + else if (secToDo < 1) + { + countDownTextNew.text = "GO!"; + if (!bVibrate[0]) + { + bVibrate[0] = true; + MMVibrationManager.Haptic(HapticTypes.HeavyImpact); + } + } + + // 开启游戏,且隐藏中间的数字. + if (secToDo <= 0) + { + HideUIMask(); + countDownTextNew.text = ""; + countDownTextNew.gameObject.SetActive(false); + bGameStart = true; + // 开始关卡 + EndlessLevelManager.instance.StartLevel(); + timeTextNew.gameObject.SetActive(true); + + JsonDataReadDone(); + // 开始播放背景音乐. + if (bgMusic != null) + bgMusic.Play(); + } + } } - - if (bFirstLoaded && !bGameStart) + else { - secToDo -= Time.deltaTime; - countDownTextNew.gameObject.SetActive(true); + // 新手走的流程 + if (!bFirstLoaded && !bGameStart) + bFirstLoaded = true; - if (secToDo >= 3) + if (bFirstLoaded && !bGameStart) { - countDownTextNew.text = "3"; - if (!bVibrate[3]) - { - bVibrate[3] = true; - MMVibrationManager.Haptic(HapticTypes.SoftImpact); - } - } - else if (secToDo >= 2) - { - countDownTextNew.text = "2"; - if (!bVibrate[2]) - { - bVibrate[2] = true; - MMVibrationManager.Haptic(HapticTypes.MediumImpact); - } - } - else if (secToDo >= 1) - { - countDownTextNew.text = "1"; - if (!bVibrate[1]) - { - bVibrate[1] = true; - MMVibrationManager.Haptic(HapticTypes.HeavyImpact); - } - } - else if (secToDo < 1) - { - countDownTextNew.text = "GO!"; - if (!bVibrate[0]) - { - bVibrate[0] = true; - MMVibrationManager.Haptic(HapticTypes.HeavyImpact); - } - } - - // 开启游戏,且隐藏中间的数字. - if (secToDo <= 0) - { - uiStartMssk.gameObject.SetActive(false); - countDownTextNew.text = ""; - countDownTextNew.gameObject.SetActive(false); bGameStart = true; - // 开始关卡 EndlessLevelManager.instance.StartLevel(); timeTextNew.gameObject.SetActive(true); - // 开始播放背景音乐. + JsonDataReadDone(); + if (bgMusic != null) bgMusic.Play(); } -- Gitblit v1.9.1