From 8afc9ce1c752c24decad77e0989b367b8f2c4179 Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Thu, 29 Oct 2020 14:34:52 +0800 Subject: [PATCH] Merge branch 'master' of ssh://172.16.1.52:8091/GemBattle --- Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs | 11 ++ Assets/Scripts/TowerDefense/Level/EndlessDropManager.cs | 30 ++----- Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs | 52 +++++++++---- Assets/Scripts/Common/GameConfig.cs | 5 - Assets/Scripts/TowerDefense/UI/EndlessSettlementPropList.cs | 34 +++++-- Assets/Scripts/TowerDefense/UI/HUD/RandomTower.cs | 2 Assets/Scripts/TowerDefense/UI/HUD/GameUI.cs | 66 +++++++++++----- Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs | 3 Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs | 2 Assets/Scripts/TowerDefense/UI/EndlessDropReward.cs | 2 Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs | 2 Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs | 2 12 files changed, 129 insertions(+), 82 deletions(-) diff --git a/Assets/Scripts/Common/GameConfig.cs b/Assets/Scripts/Common/GameConfig.cs index e469c66..ecce532 100644 --- a/Assets/Scripts/Common/GameConfig.cs +++ b/Assets/Scripts/Common/GameConfig.cs @@ -46,11 +46,6 @@ public static bool IsNewbie = true; /// <summary> - /// 所有新手的引导步骤是否全部完成 - /// </summary> - public static bool IsNewbieGuideCompleted = false; - - /// <summary> /// 无尽模式每一轮游戏中成功使用技能宝石的次数 /// </summary> public static int EndlessPortUseSkillTowerCount; diff --git a/Assets/Scripts/TowerDefense/Level/EndlessDropManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessDropManager.cs index cff5332..4fbb897 100644 --- a/Assets/Scripts/TowerDefense/Level/EndlessDropManager.cs +++ b/Assets/Scripts/TowerDefense/Level/EndlessDropManager.cs @@ -45,7 +45,7 @@ /// <summary> /// 掉落半径 /// </summary> - public float DropRadius { get; set; } = 50f; + public float DropRadius { get; set; } = 5f; public Canvas canvas; @@ -144,29 +144,19 @@ Transform mainUITransform = mainUI.GetComponent<Transform>(); obj.GetComponent<Transform>().SetParent(mainUITransform, true); - // Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos); - // Vector2 targetPos; - // RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, screenPos, canvas.worldCamera, out targetPos); - // RectTransform rectTransform = obj.GetComponent<RectTransform>(); - // rectTransform.anchoredPosition = pos; - // obj.transform.localRotation = Quaternion.identity; - - // Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos); - // screenPos.z = 0; - obj.transform.position = worldPos; obj.transform.localRotation = Quaternion.identity; obj.transform.localScale = Vector3.one; - // if (isRandom) - // { - // Vector2 p = UnityEngine.Random.insideUnitCircle * DropRadius; - // Vector3 pos1 = p.normalized * p.magnitude; - // Vector3 objPos = obj.transform.position; - // objPos.x += pos1.x; - // objPos.y += pos1.y; - // obj.transform.position = objPos; - // } + if (isRandom) + { + Vector2 p = UnityEngine.Random.insideUnitCircle * DropRadius; + Vector3 pos1 = p.normalized * p.magnitude; + Vector3 objPos = obj.transform.position; + objPos.x += pos1.x; + objPos.z += pos1.y; + obj.transform.position = objPos; + } dropReward.PlayParticle(); DropObjDic.Add(drop.Id, obj); diff --git a/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs index cff3ab6..b0b994f 100644 --- a/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs +++ b/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs @@ -314,7 +314,7 @@ if (EndlessLeveltate == LevelState.SpawningEnemies && IsAllWaveCompleted && NumberOfEnemies == 0) { // 新手的话,第一关完了暂停 - if (!GameConfig.IsNewbie || GameConfig.IsNewbieGuideCompleted) + if (!GameConfig.IsNewbie) { if (!UpdateLevel()) ChangeLevelState(LevelState.AllEnemiesSpawned); diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs b/Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs index 50cadb4..a657698 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs @@ -43,7 +43,12 @@ SelectBtn.onClick.AddListener(OnClickSelectBtn); } - private void OnEnable() + private void OnDisable() + { + Reset(); + } + + private void Reset() { isCompleted = false; SelectedIndex = -1; @@ -74,10 +79,12 @@ { if (SelectedIndex == -1) return; + int index = SelectedIndex; + HideBuffUI(); if (BuffSelectCompleted != null) - BuffSelectCompleted(SelectedIndex); + BuffSelectCompleted(index); } public void ShowBuffUI() diff --git a/Assets/Scripts/TowerDefense/UI/EndlessDropReward.cs b/Assets/Scripts/TowerDefense/UI/EndlessDropReward.cs index a6a93e4..9766aed 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessDropReward.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessDropReward.cs @@ -84,7 +84,7 @@ if (DropData.Reward.id == 0) resId = $"{path}{(int)DropData.Reward.type}"; else - resId = $"{path}{(int)DropData.Reward.type}_${DropData.Reward.id}"; + resId = $"{path}{(int)DropData.Reward.type}_{DropData.Reward.id}"; Icon.sprite = Resources.Load<Sprite>(resId); Icon.SetNativeSize(); } diff --git a/Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs b/Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs index eee7a10..f1f562a 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs @@ -53,9 +53,6 @@ /// </summary> public void ReturnToMainMenu() { - if (GameConfig.IsNewbieGuideCompleted) - GameConfig.IsNewbie = false; - // 清空所有Tween数据: DOTween.Clear(); EndlessUIStart.bFirstLoaded = false; diff --git a/Assets/Scripts/TowerDefense/UI/EndlessSettlementPropList.cs b/Assets/Scripts/TowerDefense/UI/EndlessSettlementPropList.cs index e7e7729..e32c86b 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessSettlementPropList.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessSettlementPropList.cs @@ -3,6 +3,7 @@ using UnityEngine; using TowerDefense.Level; using UnityEngine.UI; +using Protobuf; /** * 无尽模式结算界面列表脚本 @@ -30,20 +31,31 @@ for (int i = 0; i < list.Count; ++i) { - for (int j = 0; j < list[i].Reward.count; ++j) + if (list[i].Reward.type == CURRENCY.Gold) { - GameObject item = Instantiate(ItemPrefab); - EndlessPropIcon propIcon = item.GetComponent<EndlessPropIcon>(); - string resId = list[i].Reward.id == 0 ? resId = $"{(int)list[i].Reward.type}" : $"{list[i].Reward.type}_{list[i].Reward.id}"; - - Sprite iconSp = Resources.Load<Sprite>($"{iconPath}{resId}"); - Sprite bgSp = Resources.Load<Sprite>($"{bgPath}{resId}"); - - propIcon.SetIcon(iconSp); - propIcon.SetBg(bgSp); - item.transform.SetParent(Grid.transform, false); + AddItem($"{(int)list[i].Reward.type}"); + } + else + { + for (int j = 0; j < list[i].Reward.count; ++j) + { + AddItem($"{(int)list[i].Reward.type}_{list[i].Reward.id}"); + } } } } + + private void AddItem(string resId) + { + GameObject item = Instantiate(ItemPrefab); + EndlessPropIcon propIcon = item.GetComponent<EndlessPropIcon>(); + + Sprite iconSp = Resources.Load<Sprite>($"{iconPath}{resId}"); + Sprite bgSp = Resources.Load<Sprite>($"{bgPath}{resId}"); + + propIcon.SetIcon(iconSp); + propIcon.SetBg(bgSp); + item.transform.SetParent(Grid.transform, false); + } } } \ No newline at end of file diff --git a/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs b/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs index 66f1c8f..59b28ed 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs @@ -200,7 +200,7 @@ private void NewbieGuideEnd() { EndlessLevelManager.instance.RestartWave(); - GameConfig.IsNewbieGuideCompleted = true; + GameConfig.IsNewbie = false; } /// <summary> diff --git a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs index 0a94bfc..39f916e 100644 --- a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs +++ b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs @@ -1198,18 +1198,6 @@ SetState(State.Normal); // 新的代码,合并升级为随机塔防类型. randomUpgradeTower(); - // 在sTower的位置播放升级特效 - GameObject obj = Instantiate(TowerUpgradeEffectPrefab); - obj.transform.position = sTower.transform.position; - Vector3 pos = obj.transform.position; - pos.y += 5f; - obj.transform.position = pos; - ParticleSystem ps = obj.GetComponent<ParticleSystem>(); - - if (ps == null) - ps = obj.transform.GetChild(0).GetComponent<ParticleSystem>(); - ps.Play(); - Destroy(obj, ps.main.duration); } } else @@ -1242,6 +1230,35 @@ { PlaceGhost(pointer); } + } + + /// <summary> + /// 播放升级特效 + /// </summary> + /// <param name="worldPos"></param> + public void PlayUpgradeEffect(Tower newTower) + { + GameObject effect = TowerUpgradeEffectPrefab; + + if (newTower.towerFeature == EFeatureTower.NULL) + { + string path = $"UI/ToBattle_{newTower.attributeId}"; + GameObject prefab = Resources.Load<GameObject>(path); + effect = Instantiate(prefab); + } + + // 在sTower的位置播放升级特效 + GameObject obj = Instantiate(effect); + obj.transform.position = newTower.transform.position; + Vector3 pos = obj.transform.position; + pos.y += 5f; + obj.transform.position = pos; + ParticleSystem ps = obj.GetComponent<ParticleSystem>(); + + if (ps == null) + ps = obj.transform.GetChild(0).GetComponent<ParticleSystem>(); + ps.Play(); + Destroy(obj, ps.main.duration); } /// <summary> @@ -1309,7 +1326,7 @@ /// <exception cref="InvalidOperationException"> /// Throws exception if not in Build State or <see cref="m_CurrentTower"/> is not at a valid position /// </exception> - public void PlaceTower(int lvl = 0, bool opponent = false) + public void PlaceTower(int lvl = 0, bool isUpgrade = false, bool opponent = false) { if (!isBuilding) throw new InvalidOperationException("Trying to place tower when not in a Build Mode"); @@ -1330,7 +1347,10 @@ // River: 内部缓存数据,用于后期容易找到数据. addTower(createdTower); CancelGhostPlacement(); - PlayAppearEffect(createdTower.transform.position); + if (!isUpgrade) + PlayAppearEffect(createdTower.transform.position); + else + PlayUpgradeEffect(createdTower); // 处理成长骰子,复制骰子等等功能. if (lvl == 0) @@ -1520,7 +1540,7 @@ /// 直接在IPlaceArea上随机放置一个Tower。这是随机放置塔防的入口类。这是入口的塔防类。 /// </summary> /// <param name="tow"></param> - public bool RandomPlaceTower(Tower tow, int posx = -1, int posy = -1, int lvl = 0, int forceCost = -1) + public bool RandomPlaceTower(Tower tow, int posx = -1, int posy = -1, int lvl = 0, int forceCost = -1, bool isUpgrade = false) { // 获取IPlaceArea. if (m_CurrentArea == null) @@ -1584,7 +1604,7 @@ OnSuccessBuyTower(); SetState(State.Building); - PlaceTower(lvl); + PlaceTower(lvl, isUpgrade); } return true; diff --git a/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs b/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs index 428c776..a666cf0 100644 --- a/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs +++ b/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs @@ -346,6 +346,6 @@ targetTower = getTowerByName(tname); // River: 随机找一个空白位置放置塔防。 - EndlessGameUI.instance.RandomPlaceTower(targetTower, x, y, lvl); + EndlessGameUI.instance.RandomPlaceTower(targetTower, x, y, lvl, -1, true); } } diff --git a/Assets/Scripts/TowerDefense/UI/HUD/GameUI.cs b/Assets/Scripts/TowerDefense/UI/HUD/GameUI.cs index 5283f15..dbc42c5 100644 --- a/Assets/Scripts/TowerDefense/UI/HUD/GameUI.cs +++ b/Assets/Scripts/TowerDefense/UI/HUD/GameUI.cs @@ -358,7 +358,7 @@ public void delTower(Tower t) { // 删除Tower之前去掉充能条数据. - if( t.bInAttackMode) + if (t.bInAttackMode) t.DisableTowerUICtrl(); // 删除Tower有可能对应的Timer. @@ -609,7 +609,7 @@ towerOld.showTower(false); towerToMove = towerOld; - if( towerOld.bInAttackMode) + if (towerOld.bInAttackMode) { int pro = towerOld.GetTowerUICtrlProgress(); uiCtlProgresss = pro; @@ -865,7 +865,7 @@ if (tw != null) { LevelManager.instance.startWaveLine(m_GridPosition.x, false, tw.attributeId); - + // 顺便设置界面的进展 if (uiCtlProgresss > 0) { @@ -1287,18 +1287,7 @@ //UpgradeSelectedTower(); // 新的代码,合并升级为随机塔防类型. randomUpgradeTower(); - // 在sTower的位置播放升级特效 - GameObject obj = Instantiate(TowerUpgradeEffect); - obj.transform.position = sTower.transform.position; - Vector3 pos = obj.transform.position; - pos.y += 5f; - obj.transform.position = pos; - ParticleSystem ps = obj.GetComponent<ParticleSystem>(); - if (ps == null) - ps = obj.transform.GetChild(0).GetComponent<ParticleSystem>(); - ps.Play(); - Destroy(obj, ps.main.duration); } } else @@ -1331,6 +1320,35 @@ { PlaceGhost(pointer); } + } + + /// <summary> + /// 播放升级特效 + /// </summary> + /// <param name="worldPos"></param> + public void PlayUpgradeEffect(Tower newTower) + { + GameObject effect = TowerUpgradeEffect; + + if (newTower.towerFeature == EFeatureTower.NULL) + { + string path = $"UI/ToBattle_{newTower.attributeId}"; + GameObject prefab = Resources.Load<GameObject>(path); + effect = Instantiate(prefab); + } + + // 在sTower的位置播放升级特效 + GameObject obj = Instantiate(effect); + obj.transform.position = newTower.transform.position; + Vector3 pos = obj.transform.position; + pos.y += 5f; + obj.transform.position = pos; + ParticleSystem ps = obj.GetComponent<ParticleSystem>(); + + if (ps == null) + ps = obj.transform.GetChild(0).GetComponent<ParticleSystem>(); + ps.Play(); + Destroy(obj, ps.main.duration); } /// <summary> @@ -1424,7 +1442,7 @@ /// <exception cref="InvalidOperationException"> /// Throws exception if not in Build State or <see cref="m_CurrentTower"/> is not at a valid position /// </exception> - public void PlaceTower(int lvl = 0, bool opponent = false) + public void PlaceTower(int lvl = 0, bool opponent = false, bool isUpgrade = false) { if (!isBuilding) throw new InvalidOperationException("Trying to place tower when not in a Build Mode"); @@ -1452,6 +1470,14 @@ CancelGhostPlacement(); + if (!opponent) + { + if (!isUpgrade) + PlayAppearEffect(createdTower.transform.position); + else + PlayUpgradeEffect(createdTower); + } + PlayAppearEffect(createdTower.transform.position); // 处理成长骰子,复制骰子等等功能. @@ -1473,10 +1499,10 @@ obj.transform.position = pos; ParticleSystem ps = obj.GetComponent<ParticleSystem>(); - + if (ps == null) ps = obj.transform.GetChild(0).GetComponent<ParticleSystem>(); - + ps.Play(); Destroy(obj, ps.main.duration); } @@ -1743,7 +1769,7 @@ /// 直接在IPlaceArea上随机放置一个Tower。这是随机放置塔防的入口类。这是入口的塔防类。 /// </summary> /// <param name="tow"></param> - public void RandomPlaceTower(Tower tow, int posx = -1, int posy = -1, int lvl = 0) + public void RandomPlaceTower(Tower tow, int posx = -1, int posy = -1, int lvl = 0, bool isUpgrade = false) { // 获取IPlaceArea. if (m_CurrentArea == null) @@ -1804,7 +1830,7 @@ OnSuccessBuyTower(); SetState(State.Building); - PlaceTower(lvl); + PlaceTower(lvl, false, isUpgrade); } } @@ -2212,7 +2238,7 @@ if (ps == null) ps = obj.transform.GetChild(0).GetComponent<ParticleSystem>(); - + ps.Play(); Destroy(obj, ps.main.duration); } diff --git a/Assets/Scripts/TowerDefense/UI/HUD/RandomTower.cs b/Assets/Scripts/TowerDefense/UI/HUD/RandomTower.cs index e8673bc..30f9cc2 100644 --- a/Assets/Scripts/TowerDefense/UI/HUD/RandomTower.cs +++ b/Assets/Scripts/TowerDefense/UI/HUD/RandomTower.cs @@ -507,7 +507,7 @@ } // River: 随机找一个空白位置放置塔防。 - GameUI.instance.RandomPlaceTower(targetTower, x, y, lvl); + GameUI.instance.RandomPlaceTower(targetTower, x, y, lvl, true); return; } } -- Gitblit v1.9.1