Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs
@@ -5,7 +5,6 @@
using TowerDefense.Level;
using TowerDefense.UI.HUD;
using UnityEngine;
using UnityEngine.UI;
namespace TowerDefense.Towers.Placement
{
@@ -14,7 +13,7 @@
    /// Its origin is centered in the middle of the lower-right cell. It can be oriented in any direction
    /// </summary>
    [RequireComponent(typeof(BoxCollider))]
    public class TowerPlacementGridEndless : MonoBehaviour, IPlacementArea
    public class TowerPlacementGridEndless : Singleton<TowerPlacementGridEndless>, IPlacementArea
    {
        public static float GRID_OPENCASH = 200;
@@ -59,7 +58,7 @@
        /// Size of the edge of a cell
        /// </summary>
        [Tooltip("The size of the edge of one grid cell for area. Should match the physical grid size of towers")]
        public float gridSize = 1;
        public float gridSize = 1;//1.109
        /// <summary>
        /// Inverted grid size, to multiply with
@@ -86,8 +85,15 @@
        private float[,] m_arrCoinGenTime;
        public GameObject GridContainer;
        /// <summary>
        /// 每一个Tile格子的中心店的世界坐标
        /// 所有格子对应的世界坐标
        /// </summary>
        private Vector3[,] GridWorldPosArr;
        /// <summary>
        /// 每一个Tile格子的中心店的屏幕坐标
        /// </summary>
        private Vector2[,] arrGridCentPos;
@@ -320,8 +326,6 @@
            return false;
        }
        /// <summary>
        /// 是否是等待购买的攻击塔位.
@@ -569,8 +573,9 @@
        /// <summary>
        /// Initialize values
        /// </summary>
        protected virtual void Awake()
        protected override void Awake()
        {
            base.Awake();
            ResizeCollider();
            // Initialize empty bool array (defaults are false, which is what we want)
@@ -586,6 +591,7 @@
        {
            // 初始化塔位类型.
            initTileGridType();
            InitGridWorldPos();
            // Precalculate inverted grid size, to save a division every time we translate coords
            m_InvGridSize = 1 / gridSize;
@@ -593,6 +599,36 @@
            // 初始化格子对应的屏幕坐标数据 延迟执行
            Invoke("preCalculateGridUIPos", 0.3f);
            EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EndlessCritBulletNumChange, OnCritBulletNumChange);
            EventCenter.Ins.Add((int)KTGMGemClient.EventType.OpenAllTowerGrid, OpenAllTowerGrid);
        }
        /// <summary>
        /// 初始化所有格子的世界坐标(中心)
        /// </summary>
        private void InitGridWorldPos()
        {
            GridWorldPosArr = new Vector3[dimensions.x, dimensions.y];
            for (int i = 0; i < dimensions.x; ++i)
            {
                for (int j = 0; j < dimensions.y; ++j)
                {
                    GridWorldPosArr[i, j] = GridToWorld(new IntVector2(i, j), new IntVector2(1, 1));
                }
            }
        }
        /// <summary>
        /// 根据坐标获取格子世界坐标(中心)
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public Vector3 GetGridWorldPos(int x, int y)
        {
            if (x < 0 || x >= dimensions.x || y < 0 || y >= dimensions.y) return new Vector3();
            return GridWorldPosArr[x, y];
        }
        /// <summary>
@@ -619,7 +655,7 @@
        {
            arrGridCentPos = new Vector2[dimensions.x, dimensions.y];
            Vector3 targetPos = GridToWorld(new IntVector2(0, 0), new IntVector2(1, 1));
            Vector3 targetPos = GetGridWorldPos(0, 0);
            if (!ViewPortAdj.instance.bAdjViewPort)
                ViewPortAdj.instance.adjViewportRect();
@@ -865,6 +901,30 @@
        }
        /// <summary>
        /// 免费开启所有塔位
        /// </summary>
        public void OpenAllTowerGrid()
        {
            int sy = dimensions.y - 1;
            for (int tx = 0; tx < dimensions.x; tx++)
            {
                if (m_arrGridType[tx, sy - 1] == PlacementGridType.EGridWaitBuy)
                {
                    BuyTowerGrid(tx, sy - 1);
                    Destroy(m_arrTGO[tx, sy - 1].gameObject);
                    ++GameConfig.EndlessOpenAttackTowerCount;
                }
                if (m_arrGridType[tx, sy] == PlacementGridType.EGridWaitBuy)
                {
                    BuyTowerGrid(tx, sy);
                    Destroy(m_arrTGO[tx, sy].gameObject);
                    ++GameConfig.EndlessOpenAttackTowerCount;
                }
            }
        }
        /// <summary>
        /// 购买对应的待购攻击塔位.
        /// </summary>
        /// <param name="x"></param>
@@ -890,11 +950,9 @@
            for (int tx = 0; tx < dimensions.x; tx++)
            {
                // cx test
                m_arrGridType[tx, sy - 1] = PlacementGridType.EGridWaitBuy;
                m_arrGridType[tx, sy] = PlacementGridType.EGridOpen;
            }
            // m_arrGridType[2, 3] = PlacementGridType.EGridOpen;
            ++GameConfig.EndlessOpenAttackTowerCount;
        }
@@ -993,7 +1051,7 @@
                {
                    for (int x = 0; x < dimensions.x; x++)
                    {
                        Vector3 targetPos = GridToWorld(new IntVector2(x, y), new IntVector2(1, 1));
                        Vector3 targetPos = GetGridWorldPos(x, y);
                        targetPos.z -= 1.0f;
                        PlacementTile newTile = Instantiate(tileToUse);
                        newTile.transform.parent = tilesParent.transform;
@@ -1002,7 +1060,7 @@
                        m_Tiles[x, y] = newTile;
                        newTile.SetTileType(m_arrGridType[x, y]);
                        newTile.CheckCanPlace(false);//初始化不显示
                        newTile.SetRender(false, "");//初始化不显示
                    }
                }
            }
@@ -1037,7 +1095,7 @@
                                }
                            }
                        }
                        m_Tiles[ix, y].CheckCanPlace(canPlace);
                        //m_Tiles[ix, y].CheckCanPlace(canPlace);
                    }
                }
            }
@@ -1082,11 +1140,11 @@
        {
            CloseCanPlace();
            currentCanPlace = m_Tiles[x, y];
            currentCanPlace.SetSelect(true);
            if (isEmpty)
            {
                currentCanPlace.SetTowerVirtualshadow(towerName);
            }
            currentCanPlace?.SetRender(true, isEmpty ? towerName : "");
            // if (isEmpty)
            // {
            //     currentCanPlace.SetTowerVirtualshadow(towerName);
            // }
        }
        /// <summary>
@@ -1096,7 +1154,7 @@
        {
            if (currentCanPlace != null)
            {
                currentCanPlace.SetSelect(false);
                currentCanPlace.SetRender(false, "");
                currentCanPlace = null;
            }
        }
@@ -1113,7 +1171,8 @@
                {
                    if (m_arrGridType[ix, y] == PlacementGridType.EGridOpen)
                    {
                        m_Tiles[ix, y].CheckCanPlace(false);
                        //m_Tiles[ix, y].CheckCanPlace(false);
                        m_Tiles[ix, y].SetRender(false, "");
                    }
                }
            }