From 9abbdf408daf5bc140ffd039125f6ac54f2774b9 Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Fri, 06 Nov 2020 10:13:55 +0800 Subject: [PATCH] Merge branch 'master' of ssh://172.16.1.52:8091/GemBattle --- Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs | 100 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 95 insertions(+), 5 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs index 92083ef..babb6dc 100644 --- a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs +++ b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs @@ -642,6 +642,29 @@ } /// <summary> + /// 判断是否有不同类型的Tower,可以发生置换,仅限于火木水之间发生 + /// </summary> + /// <param name="pinfo"></param> + /// <returns></returns> + protected bool IsSubstitute(PointerInfo pinfo) + { + if (!m_CurrentTower || !IsGhostAtValidPosition()) + { + // 判断格子上的塔防: + UIPointer pointer = WrapPointer(pinfo); + Tower sTower = PickTowerInGrid(pointer); + + if (sTower && sTower != towerToMove) + { + if (towerToMove && sTower.towerFeature == EFeatureTower.NULL && towerToMove.towerFeature == EFeatureTower.NULL && sTower.bInAttackMode == towerToMove.bInAttackMode) + return true; + } + } + + return false; + } + + /// <summary> /// 获取目标格子上的塔防的名字数据 /// </summary> /// <param name="pinfo"></param> @@ -694,6 +717,7 @@ /// <param name="opponent"></param> public void DestroyTowerGrid(int xidx) { + // cx test 这里的逻辑已经不走了 for (int i = 0; i < AttackRowNumbers; ++i) { if (TowerDestroyArr[xidx, i]) continue; @@ -753,11 +777,38 @@ } } - // 红心减少逻辑 - // HealthHeartState.instance.killHeart(false); GameOver(); overTimer = new Timer(1.2f, SafelyCallGameOverEvent); } + } + + /// <summary> + /// 爱心数量为0,游戏结束 + /// </summary> + private void AllHeartLose() + { + // 清理技能 + EndlessBossSkillManager.instance.ClearSkillList(); + + // 停止所有兵线的出兵 + for (int i = 0; i < TotalWaveLines; ++i) + { + EndlessLevelManager.instance.StopWaveLine(i); + } + + // 让所有兵线上已经生成的所有agent播放一个死亡动画然后销毁 + WaveLineAgentInsMgr[] waveLineAgentIns = AgentInsManager.instance.GetWaveLineList(); + + for (int i = 0; i < waveLineAgentIns.Length; ++i) + { + while (waveLineAgentIns[i].listAgent.Count > 0) + { + waveLineAgentIns[i].listAgent[0].PlayDeath(); + } + } + + GameOver(); + overTimer = new Timer(1.2f, SafelyCallGameOverEvent); } private void SafelyCallGameOverEvent() @@ -801,6 +852,40 @@ towerToMove = null; } } + else if (EndlessLevelManager.instanceExists && IsSubstitute(pointerInfo)) + { + // 可以发生置换 + UIPointer pointer = WrapPointer(pointerInfo); + // 格子上的塔 + Tower sTower = PickTowerInGrid(pointer); + + if (sTower.bInAttackMode == towerToMove.bInAttackMode) + { + IntVector2 v1 = new IntVector2(towerToMove.gridPosition.x, towerToMove.gridPosition.y); + IntVector2 v2 = new IntVector2(sTower.gridPosition.x, sTower.gridPosition.y); + + Tower newTower1 = PlaceTowerForce(EndlessRandomTower.instance.getTowerByName(sTower.towerName), v1, sTower.currentLevel + 1, false); + Tower newTower2 = PlaceTowerForce(m_CurrentTower.controller, v2, towerToMove.currentLevel + 1, false); + + if (towerToMove != null) + { + delTower(towerToMove); + towerToMove.showTower(true); + towerToMove.Sell(); + towerToMove = null; + } + + delTower(sTower); + sTower.showTower(true); + sTower.Sell(); + sTower = null; + + CancelGhostPlacement(); + + newTower1.placementArea.Occupy(newTower1.gridPosition, newTower1.dimensions); + newTower2.placementArea.Occupy(newTower2.gridPosition, newTower2.dimensions); + } + } // 当前是Skill塔位的状态. else if (bSkill) { @@ -831,19 +916,23 @@ /// <param name="newTower"></param> /// <param name="pos"></param> /// <param name="level">塔的等级</param> - public void PlaceTowerForce(Tower newTower, IntVector2 pos, int level) + public Tower PlaceTowerForce(Tower newTower, IntVector2 pos, int level, bool playEffect = true) { TowerPlacementGhost currentTower = Instantiate(newTower.towerGhostPrefab); currentTower.Initialize(newTower); Tower controller = currentTower.controller; Tower createdTower = Instantiate(controller); + createdTower.PlayWaveLineFlash = playEffect; createdTower.Initialize(m_CurrentArea, pos); createdTower.SetLevel(level - 1); - PlayUpgradeEffect(createdTower); + if (playEffect) + PlayUpgradeEffect(createdTower); addTower(createdTower); Destroy(currentTower.gameObject); + + return createdTower; } protected bool SkillPlayEndDrag(PointerInfo pointer) @@ -1514,7 +1603,7 @@ if (crit) bloodStr += "Crt!"; bloodStr += "-"; - bloodStr += val.ToString(); + bloodStr += ((Int64)val).ToString(); tm.moveBloodText(spos.x, spos.y, bloodStr, crit); } @@ -1527,6 +1616,7 @@ if (placeObj != null) m_CurrentArea = placeObj.GetComponent<IPlacementArea>(); placeObj = GameObject.FindGameObjectWithTag("PlaceTowerOpponent"); + EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessHeartAllLose, AllHeartLose); } /// <summary> -- Gitblit v1.9.1