chenxin
2020-12-25 6baa5a654138a2e0a9871adaef311a74e132dd6e
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -189,6 +189,9 @@
        /// </summary>
        Camera m_Camera;
        //Camera m_CameraBG;
        /// <summary>
        /// Current tower placeholder. Will be null if not in the <see cref="State.Building" /> state.
        /// </summary>
@@ -332,6 +335,44 @@
            // ATTENTION TO FIX: 先写死,有一个简单的逻辑再说:
            if (m_listTower.Count >= MAX_TOWERNUM)
                disableRandomTowerBtn();
        }
        public void PlayBuffPS(int get_buffID)
        {
            //Debug.Log("开始播放特效");
            int targetID = 0;
            switch (get_buffID)
            {
                case 0:
                    //无特效
                    break;
                case 1:
                    for (int i = 0; i < m_listTower.Count; i++)
                    {
                        m_listTower[i].CurrentTowerLevel.ShowBuffPS();
                    }
                    break;
                case 2:
                    targetID = 101;
                    break;
                case 3:
                    targetID = 201;
                    break;
                case 4:
                    targetID = 301;
                    break;
            }
            if (targetID > 1)
            {
                for (int i = 0; i < m_listTower.Count; i++)
                {
                    if (m_listTower[i].ElfId == targetID)
                    {
                        m_listTower[i].CurrentTowerLevel.ShowBuffPS();
                    }
                }
            }
        }
        /// <summary>
@@ -510,6 +551,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)
            {
@@ -545,6 +593,8 @@
        /// </summary>
        public void GameOver()
        {
            CommonDebugHelper.Debug("游戏结束了");
            SetState(State.GameOver);
        }
@@ -1143,25 +1193,27 @@
                        //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);
                        //m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(m_GridPosition, m_CurrentTower.controller.dimensions);
                    }
                    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:{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
                                {
@@ -1182,7 +1234,7 @@
                                        }
                                    }
                                }
                                m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(checkTowerPlaceTower.gridPosition, m_CurrentTower.controller.dimensions);
                                //m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(checkTowerPlaceTower.gridPosition, m_CurrentTower.controller.dimensions);
                            }
                        }
                        else if ((m_CurrentArea as TowerPlacementGridEndless).isFreeAtackPos(m_GridPosition.x, m_GridPosition.y))
@@ -1191,7 +1243,7 @@
                            (m_CurrentArea as TowerPlacementGridEndless).CheckCanPlaceUpdate(m_GridPosition.x, m_GridPosition.y, true, towerToMove.towerName);
                            m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(m_GridPosition, m_CurrentTower.controller.dimensions);
                            //m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(m_GridPosition, m_CurrentTower.controller.dimensions);
                        }
                        else
@@ -1205,13 +1257,17 @@
                                (m_CurrentArea as TowerPlacementGridEndless).CheckCanPlaceUpdate(m_GridPosition.x, m_GridPosition.y, true, towerToMove.towerName);
                                m_CurrentTower.transform.position = towerToMove.position;
                                //m_CurrentTower.transform.position = towerToMove.position;
                            }
                            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);
                            }
                        }
                    }
@@ -1367,7 +1423,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);
@@ -1580,6 +1636,7 @@
            return controller;
        }
        private Vector2 dragOffect = new Vector2(0, -55f);
        /// <summary>
        /// Position the ghost tower at the given pointer
        /// </summary>
@@ -1592,15 +1649,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>
@@ -2216,6 +2287,8 @@
            }
            //placeObj = GameObject.FindGameObjectWithTag("PlaceTowerOpponent");
            EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessHeartAllLose, AllHeartLose);
            EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.PlayBuffPS, PlayBuffPS);
        }
        /// <summary>
@@ -2473,6 +2546,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];
        }
@@ -2588,7 +2663,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);