| | |
| | | using TowerDefense.Level; |
| | | using TowerDefense.UI.HUD; |
| | | using UnityEngine; |
| | | using UnityEngine.UI; |
| | | |
| | | namespace TowerDefense.Towers.Placement |
| | | { |
| | |
| | | /// 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; |
| | | |
| | |
| | | |
| | | private float[,] m_arrCoinGenTime; |
| | | |
| | | public GameObject GridContainer; |
| | | |
| | | /// <summary> |
| | | /// 每一个Tile格子的中心店的世界坐标 |
| | | /// 所有格子对应的世界坐标 |
| | | /// </summary> |
| | | private Vector3[,] GridWorldPosArr; |
| | | |
| | | /// <summary> |
| | | /// 每一个Tile格子的中心店的屏幕坐标 |
| | | /// </summary> |
| | | private Vector2[,] arrGridCentPos; |
| | | |
| | |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 是否是等待购买的攻击塔位. |
| | |
| | | /// <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) |
| | |
| | | { |
| | | // 初始化塔位类型. |
| | | initTileGridType(); |
| | | InitGridWorldPos(); |
| | | |
| | | // Precalculate inverted grid size, to save a division every time we translate coords |
| | | m_InvGridSize = 1 / gridSize; |
| | |
| | | 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> |
| | |
| | | { |
| | | 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(); |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | |
| | | { |
| | | 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; |