liuzhiwei
2020-12-22 987fd66dc6d6c28e3ed08a08141ddc3dbd772cea
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -144,7 +144,7 @@
        /// </summary>
        protected TextMeshProUGUI towerPriceText;
        protected bool tdBuyDisable = false;
        public bool tdBuyDisable { get; protected set; } = false;
        /// <summary>
        /// 鼠标在移动一个Tower之前,要隐藏的Tower数据和指针。
@@ -188,6 +188,9 @@
        /// Our cached camera reference
        /// </summary>
        Camera m_Camera;
        //Camera m_CameraBG;
        /// <summary>
        /// Current tower placeholder. Will be null if not in the <see cref="State.Building" /> state.
@@ -277,12 +280,12 @@
        //首次购买宝石特效
        public GameObject fireAppearEffect1;
        public GameObject fireAppearEffect2;
        //public GameObject fireAppearEffect2;
        public GameObject waterAppearEffect1;
        public GameObject waterAppearEffect2;
        //public GameObject waterAppearEffect2;
        public GameObject woodAppearEffect1;
        public GameObject woodAppearEffect2;
        //public GameObject woodAppearEffect2;
        /// <summary>
        /// 保存所有生成或合成的塔的最小等级
        /// </summary>
@@ -348,6 +351,25 @@
                    return lt;
            }
            return null;
        }
        /// <summary>
        /// 根据塔位索引位置,查找位置上是否有对应的塔防数据。
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public int GetTowerNum()
        {
            int num = 0;
            foreach (Tower lt in m_listTower)
            {
                if (lt.gridPosition.y == 0 || lt.gridPosition.y == 1)
                {
                    num++;
                }
            }
            return num;
        }
        public bool towerInList(Tower t)
@@ -491,6 +513,13 @@
            {
                return;
            }
            if (state == State.GameOver)
            {
                CommonDebugHelper.DebugError("已经游戏结束了,为什么还在修改状态");
                return;
            }
            CommonDebugHelper.Debug($"设置了状态 state:{state} newState:{newState} ");
            State oldState = state;
            if (oldState == State.Paused || oldState == State.GameOver)
            {
@@ -526,6 +555,8 @@
        /// </summary>
        public void GameOver()
        {
            CommonDebugHelper.Debug("游戏结束了");
            SetState(State.GameOver);
        }
@@ -643,7 +674,7 @@
            if ((m_GridPosition.x >= 0) && (m_GridPosition.y >= 0))
            {
                if (m_CurrentArea.isFreeAtackPos(m_GridPosition.x, m_GridPosition.y))
                if ((m_CurrentArea as TowerPlacementGridEndless).isFreeAtackPos(m_GridPosition.x, m_GridPosition.y))
                {
                    return true;
                }
@@ -793,7 +824,9 @@
                    PlayUpgradeEffect(m_listTower[i]);
                }
            }
            GameConfig.IsUpgradeTowerLevel = true;
            UpdateMinLevelArr();
            EndlessRandomTower.instance.UpdateDescDisplay();
        }
        /// <summary>
@@ -1119,7 +1152,7 @@
                {
                    if (m_GridPosition.y == 0 || m_GridPosition.y == 1)
                    {
                        Debug.Log("未上阵区域,不管有没有塔,都强行吸附");
                        //Debug.Log("未上阵区域,不管有没有塔,都强行吸附");
                        (m_CurrentArea as TowerPlacementGridEndless).CheckCanPlaceUpdate(m_GridPosition.x, m_GridPosition.y, true, "");
                        m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(m_GridPosition, m_CurrentTower.controller.dimensions);
@@ -1128,19 +1161,21 @@
                    else if (m_GridPosition.y == 2 || m_GridPosition.y == 3)
                    {
                        //Debug.Log("已上阵区域,如果是空格子就强行吸附,先判断是否有塔");
                        //pointerInfo.currentPosition += new Vector2(0, -25f);
                        checkTowerPlaceTower = isFreeAttackGridOnDrag(pointerInfo);
                        if (checkTowerPlaceTower != null)
                        {
                            Debug.Log(checkTowerPlaceTower.name);
                            //Debug.Log(checkTowerPlaceTower.name);
                            //Debug.Log($"checkTowerPlaceTower.name:{checkTowerPlaceTower.name}  m_GridPosition:{m_GridPosition}");
                            if (m_CurrentTower.controller.towerFeature == EFeatureTower.NULL)
                            {
                                if (checkTowerPlaceTower.bInAttackMode)
                                {
                                    //Debug.Log("检测到了塔");
                                    //鼠标检测到了塔
                                    (m_CurrentArea as TowerPlacementGridEndless).CheckCanPlaceUpdate(m_GridPosition.x, m_GridPosition.y, false, "");
                                    (m_CurrentArea as TowerPlacementGridEndless).CheckCanPlaceUpdate(checkTowerPlaceTower.gridPosition.x, checkTowerPlaceTower.gridPosition.y, false, "");
                                }
                                else
                                {
@@ -1188,9 +1223,13 @@
                            }
                            else
                            {
                                CloseCanPlace();
                                //CloseCanPlace();
                                //Debug.Log("上阵区域,没有开放的塔位");
                                (m_CurrentArea as TowerPlacementGridEndless).CheckCanPlaceUpdate(m_GridPosition.x, m_GridPosition.y, true, "");
                                m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(m_GridPosition, m_CurrentTower.controller.dimensions);
                            }
                        }
                    }
@@ -1301,11 +1340,14 @@
            // 判断目标位置是否有Tower且类型和等级一致,如果没有,则GhostTower删除,原Tower显示。
            if (isValidateCombineTarget(pointerInfo))
            {
                //Debug.Log("isValidateCombineTarget");
                TryPlaceTower(pointerInfo);
                EndlessRandomTower.instance.UpdateDescDisplay();
            }
            else if (isFreeAttackGrid(pointerInfo))
            {
                //Debug.Log("isFreeAttackGrid:" + m_GridPosition);
                if (!TryPlaceTower(pointerInfo, false))
                {
                    CancelPlaceTower(pointerInfo);
@@ -1326,9 +1368,9 @@
            }
            else if (EndlessLevelManager.instanceExists && IsSubstitute(pointerInfo))
            {
                //Debug.Log("IsSubstitute");
                CheckCanChangePos(pointerInfo);
                if (EndlessUIStart.instance.GameStartTime >= JsonDataCenter.DOUBLE_GEM_TIME)
                    UpgradeAllTowerMinLevel(1);
            }
            else
                CancelPlaceTower(pointerInfo);
@@ -1343,7 +1385,7 @@
            if (sTower == null)
                return false;
            Debug.Log("开始检测是否可以交换塔");
            //Debug.Log("开始检测是否可以交换塔");
            //if (sTower.bInAttackMode == towerToMove.bInAttackMode)
            {
                IntVector2 v1 = new IntVector2(towerToMove.gridPosition.x, towerToMove.gridPosition.y);
@@ -1556,6 +1598,7 @@
            return controller;
        }
        private Vector2 dragOffect = new Vector2(0, -55f);
        /// <summary>
        /// Position the ghost tower at the given pointer
        /// </summary>
@@ -1568,15 +1611,29 @@
                return;
                //throw new InvalidOperationException("Trying to move the tower ghost when we don't have one");
            }
            // 我操,终于可以了!ATTENTION TO OPP:
            PointerInfo tp = new PointerActionInfo();
            tp.currentPosition = pointerInfo.currentPosition + dragOffect;
            tp.previousPosition = pointerInfo.previousPosition;
            tp.delta = pointerInfo.delta;
            tp.startedOverUI = pointerInfo.startedOverUI;
            UIPointer pointer = WrapPointer(pointerInfo);
            UIPointer npt = new UIPointer
            {
                overUI = false,
                pointer = tp,
                overWaveLine = false,
                ray = m_Camera.ScreenPointToRay(tp.currentPosition)
            };
            //UIPointer pointer = WrapPointer(tp);
            // Do nothing if we're over UI
            if (pointer.overUI && hideWhenInvalid)
            if (npt.overUI && hideWhenInvalid)
            {
                m_CurrentTower.Hide();
                return;
            }
            MoveGhost(pointer, hideWhenInvalid);
            MoveGhost(npt, hideWhenInvalid);
        }
        /// <summary>
@@ -1733,6 +1790,7 @@
        {
            if (!isBuilding) return false;
            //Debug.Log("开始造塔" + m_GridPosition);
            // 判断是否格子上重复放置塔防
            if (!m_CurrentTower || !IsGhostAtValidPosition())
            {
@@ -1765,6 +1823,7 @@
                        CancelGhostPlacement();
                        return false;
                    }
                    PlaceGhost(pointer);
                }
                return true;
@@ -1912,7 +1971,7 @@
            {
                //火元素
                PlayAppearEffect(worldPos, fireAppearEffect1);
                PlayAppearEffect(worldPos, fireAppearEffect2);
                //PlayAppearEffect(worldPos, fireAppearEffect2);
                if (Application.platform == RuntimePlatform.WindowsEditor)
                {
                    //UnityEditor.EditorApplication.isPaused = true;
@@ -1922,14 +1981,14 @@
            {
                //木元素
                PlayAppearEffect(worldPos, woodAppearEffect1);
                PlayAppearEffect(worldPos, woodAppearEffect2);
                //PlayAppearEffect(worldPos, woodAppearEffect2);
            }
            else if (towerName.StartsWith("CopyCatTower"))
            {
                //水元素
                PlayAppearEffect(worldPos, waterAppearEffect1);
                PlayAppearEffect(worldPos, waterAppearEffect2);
                //PlayAppearEffect(worldPos, waterAppearEffect2);
            }
        }
        void PlayAppearEffect(Vector3 worldPos, GameObject prefab)
@@ -2063,7 +2122,7 @@
        /// <summary>
        /// 随机放置Tower按钮禁止使用,灰掉.
        /// </summary>
        protected void disableRandomTowerBtn()
        public void disableRandomTowerBtn()
        {
            randomTowerBtn.GetComponent<EndlessRandomTower>().ChangeBtnClick();
            //randomTowerBtn.interactable = false;
@@ -2078,7 +2137,7 @@
        /// <summary>
        /// 随机购买Tower的按钮重设置为有效.
        /// </summary>
        protected void enableRandomTowerBtn()
        public void enableRandomTowerBtn()
        {
            // ATTENTION TO FIX: 再次判断是因为有的地方是直接调用
            if ((TowerPrice.instance.currentTowerPrice > EndlessLevelManager.instance.Currency.currentCurrency) ||
@@ -2275,7 +2334,6 @@
            bool successfulPurchase = EndlessLevelManager.instance.Currency.TryPurchase(cost);
            if (!successfulPurchase) return false;
            EndlessRandomTower.instance.UpdateDescDisplay();
            SetUpGhostTower(tow);
            //Debug.Log("设置影子塔防.");
            m_CurrentTower.Show();
@@ -2448,6 +2506,8 @@
            state = State.Normal;
            m_Camera = GameObject.Find("SceneCamera3D").GetComponent<Camera>();
            //m_Camera = GameObject.Find("BackCamera").GetComponent<Camera>();
            //m_Camera = GetComponent<Camera>();
            TowerDestroyArr = new bool[5, AttackRowNumbers];
        }
@@ -2563,7 +2623,7 @@
            // WORK START: 从这里开始,移动的时候与场景内的WaveSelEffect射线做碰撞。  
            // Raycast onto placement layer
            PlacementAreaRaycast(ref npt);
            //Debug.Log("npt.raycast:" + npt.raycast);
            if (npt.raycast != null)
            {
                MoveGhostWithRaycastHit(npt.raycast.Value);
@@ -2627,6 +2687,7 @@
                return;
            }
            m_GridPosition = m_CurrentArea.WorldToGrid(raycast.point, m_CurrentTower.controller.dimensions);
            //Debug.Log("修改了m_GridPosition:" + m_GridPosition);
            TowerFitStatus fits = m_CurrentArea.Fits(m_GridPosition, m_CurrentTower.controller.dimensions);
            m_CurrentTower.Show();
@@ -2677,10 +2738,12 @@
        /// <exception cref="InvalidOperationException">If we're not in the correct state</exception>
        protected void PlaceGhost(UIPointer pointer)
        {
            MoveGhost(pointer);
            //MoveGhost(pointer);
            if (m_CurrentArea != null)
            {
                //Debug.Log("开始检测PlaceGhost:" + m_GridPosition);
                TowerFitStatus fits = m_CurrentArea.Fits(m_GridPosition, m_CurrentTower.controller.dimensions);
                if (fits == TowerFitStatus.Fits)
@@ -2843,10 +2906,6 @@
            m_CurrentTower = Instantiate(towerToBuild.towerGhostPrefab);
            m_CurrentTower.Initialize(towerToBuild);
            Debug.Log("SetUpGhostTower:" + towerToBuild.gridPosition);
            Debug.Log("SetUpGhostTower:" + m_CurrentTower.controller.gridPosition);
        }
        /// <summary>