| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using Core.Utilities; |
| | | using KTGMGemClient; |
| | | using TowerDefense.Level; |
| | |
| | | |
| | | public float gridFreePos2; |
| | | |
| | | public float gridFreePos3; |
| | | |
| | | public float gridFreePos4; |
| | | |
| | | /// <summary> |
| | | /// The dimensions of the grid |
| | | /// </summary> |
| | |
| | | /// </summary> |
| | | private EndlessTowerGridOpen[,] m_arrTGO; |
| | | |
| | | public GameObject[] TowerGridOpenObjArr; |
| | | |
| | | private float[,] m_arrCoinGenTime; |
| | | |
| | | /// <summary> |
| | | /// 每一个Tile格子的中心点对应的屏幕坐标. |
| | | /// 每一个Tile格子的中心店的世界坐标 |
| | | /// </summary> |
| | | private Vector2[,] m_arrGridCentUIPos; |
| | | private Vector2[,] arrGridCentPos; |
| | | |
| | | /// <summary> |
| | | /// 攻击塔位对应的UI位置信息. |
| | |
| | | private TowerBloodVis[,] arrTowerBloodUi; |
| | | |
| | | /// <summary> |
| | | /// 塔位对应的屏幕坐标尺寸 |
| | | /// </summary> |
| | | private float m_fGridUISize; |
| | | |
| | | /// <summary> |
| | | /// Array of <see cref="PlacementTile"/>s |
| | | /// </summary> |
| | | private PlacementTile[,] m_Tiles; |
| | |
| | | /// </summary> |
| | | /// <value></value> |
| | | public int AttackRowNumbers { get; } = 2; |
| | | |
| | | /// <summary> |
| | | /// 攻击塔位对应的子弹UI位置信息. |
| | | /// </summary> |
| | | private Vector2[,] m_arrTowerBulletUIPos; |
| | | |
| | | private BulletUICtl[,] arrTowerBulletUi; |
| | | |
| | | private EnergyUICtl[,] arrTowerEnergyUi; |
| | | |
| | | private FreezeBreath[,] arrTowerFreezeBreathUi; |
| | | |
| | | private GameObject[,] arrTowerEnergyEffect; |
| | | |
| | | /// <summary> |
| | | /// 水精灵充能满特效 |
| | | /// </summary> |
| | | private GameObject[,] arrTowerFreezeBreathEffect; |
| | | |
| | | /// <summary> |
| | | /// 充能特效对应的Prefab. |
| | | /// </summary> |
| | | public GameObject energyEffectPrefab; |
| | | |
| | | /// <summary> |
| | | /// 此位置上塔对应的子弹充能Prefab.塔放置到当前的塔位后,如果是对应的塔防类型,需要把 |
| | | /// 相应的界面指针传到塔防的数据结构内。 |
| | | /// </summary> |
| | | public GameObject towerBulletUIPrefab; |
| | | |
| | | /// <summary> |
| | | /// 充能条对应的界面 |
| | | /// </summary> |
| | | public GameObject towerEnergyUIPrefab; |
| | | |
| | | /// <summary> |
| | | /// 水精灵塔技能(冷冻气息)充能条 |
| | | /// </summary> |
| | | public GameObject FreezeBreathChargePrefab; |
| | | |
| | | /// <summary> |
| | | /// 水精灵塔充能条特效 |
| | | /// </summary> |
| | | public GameObject FreezeBreathChargeEffect; |
| | | |
| | | /// <summary> |
| | | /// Converts a location in world space into local grid coordinates. |
| | |
| | | /// </summary> |
| | | /// <param name="x"></param> |
| | | /// <returns></returns> |
| | | public BulletUICtl GetBulletUICtl(int x) |
| | | public BulletUICtl GetBulletUICtl(int x, int y) |
| | | { |
| | | return null; |
| | | return arrTowerBulletUi[x, 3 - y]; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取对应位置的能量条界面指针. |
| | | /// </summary> |
| | | /// <param name="x"></param> |
| | | /// <returns></returns> |
| | | public EnergyUICtl GetEnergyUICtl(int x, int y) |
| | | { |
| | | return arrTowerEnergyUi[x, 3 - y]; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取水精灵对应位置的充能条 |
| | | /// </summary> |
| | | /// <param name="x"></param> |
| | | /// <param name="y"></param> |
| | | /// <returns></returns> |
| | | public FreezeBreath GetFreezeBreath(int x, int y) |
| | | { |
| | | return arrTowerFreezeBreathUi[x, 3 - y]; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | public bool isFreeAtackPos(int x, int y) |
| | | { |
| | | if (m_AvailableCells[x, y]) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | if (m_arrGridType[x, y] == PlacementGridType.EGridOpen) |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 是否是等待购买的攻击塔位. |
| | |
| | | freePos = gridFreePos; |
| | | else if (gridPosition.y == 2) |
| | | freePos = gridFreePos2; |
| | | else if (gridPosition.y == 1) |
| | | { |
| | | freePos = gridFreePos3; |
| | | } |
| | | else if (gridPosition.y == 0) |
| | | { |
| | | freePos = gridFreePos4; |
| | | } |
| | | // Calculate scaled local position |
| | | Vector3 localPos = new Vector3(gridPosition.x + (sizeOffset.x * 0.5f), 0, gridPosition.y + (sizeOffset.y * 0.5f) + freePos) * |
| | | gridSize; |
| | |
| | | |
| | | // Precalculate inverted grid size, to save a division every time we translate coords |
| | | m_InvGridSize = 1 / gridSize; |
| | | |
| | | SetUpGrid(); |
| | | // 初始化格子对应的屏幕坐标数据 延迟执行 |
| | | Invoke("preCalculateGridUIPos", 0.3f); |
| | | EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EndlessCritBulletNumChange, OnCritBulletNumChange); |
| | | } |
| | | |
| | | // 初始化格子对应的屏幕坐标数据 |
| | | preCalculateGridUIPos(); |
| | | /// <summary> |
| | | /// 木属性暴击子弹数量改变 |
| | | /// </summary> |
| | | /// <param name="count"></param> |
| | | private void OnCritBulletNumChange(int count) |
| | | { |
| | | for (int i = 0; i < dimensions.x; ++i) |
| | | { |
| | | for (int j = 0; j < AttackRowNumbers; ++j) |
| | | { |
| | | arrTowerBulletUi[i, j].CritBulletNum = count; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | void preCalculateGridUIPos() |
| | | { |
| | | m_arrGridCentUIPos = new Vector2[dimensions.x, dimensions.y]; |
| | | arrGridCentPos = new Vector2[dimensions.x, dimensions.y]; |
| | | |
| | | Vector3 targetPos = GridToWorld(new IntVector2(0, 0), new IntVector2(1, 1)); |
| | | Vector3 svec = transform.position; |
| | | |
| | | if (!ViewPortAdj.instance.bAdjViewPort) |
| | | ViewPortAdj.instance.adjViewportRect(); |
| | | |
| | | UnityEngine.Camera sceneCam = ViewPortAdj.instance.cachedCamera; |
| | | Vector3 centPos = sceneCam.WorldToScreenPoint(targetPos); |
| | | Vector3 lbPos = sceneCam.WorldToScreenPoint(svec); |
| | | float size = 10.29f; |
| | | |
| | | m_fGridUISize = (centPos.y - lbPos.y) * 2.0f; |
| | | |
| | | for (int ty = 0; ty < dimensions.y; ty++) |
| | | for (int x = 0; x < dimensions.x; ++x) |
| | | { |
| | | for (int tx = 0; tx < dimensions.x; tx++) |
| | | for (int y = 0; y < dimensions.y; ++y) |
| | | { |
| | | m_arrGridCentUIPos[tx, ty].x = centPos.x + tx * m_fGridUISize; |
| | | m_arrGridCentUIPos[tx, ty].y = centPos.y + ty * m_fGridUISize; |
| | | } |
| | | |
| | | if ((gridFreePos > 0) && (ty == (dimensions.y - 1))) |
| | | { |
| | | targetPos = GridToWorld(new IntVector2(0, ty), new IntVector2(1, 1)); |
| | | centPos = sceneCam.WorldToScreenPoint(targetPos); |
| | | |
| | | for (int tx = 0; tx < dimensions.x; tx++) |
| | | { |
| | | m_arrGridCentUIPos[tx, ty].x = centPos.x + tx * m_fGridUISize; |
| | | m_arrGridCentUIPos[tx, ty].y = centPos.y; |
| | | } |
| | | } |
| | | else if (gridFreePos2 > 0 && ty == dimensions.y - 2) |
| | | { |
| | | targetPos = GridToWorld(new IntVector2(0, ty), new IntVector2(1, 1)); |
| | | centPos = sceneCam.WorldToScreenPoint(targetPos); |
| | | |
| | | for (int tx = 0; tx < dimensions.x; tx++) |
| | | { |
| | | m_arrGridCentUIPos[tx, ty].x = centPos.x + tx * m_fGridUISize; |
| | | m_arrGridCentUIPos[tx, ty].y = centPos.y; |
| | | } |
| | | arrGridCentPos[x, y].x = targetPos.x + x * size; |
| | | arrGridCentPos[x, y].y = targetPos.y + y * size - 44.5f; |
| | | } |
| | | } |
| | | |
| | | // 血条位置的设定 |
| | | PreCalculateTowerBloodUi(); |
| | | |
| | | float[] gapArr = { 0.2f, 0.7f }; |
| | | m_arrTGO = new EndlessTowerGridOpen[dimensions.x, dimensions.y]; |
| | | // 设置界面相关的内容: |
| | | for (int y = dimensions.y - AttackRowNumbers; y < dimensions.y; y++) |
| | | |
| | | GameObject container = GameObject.Find("BuyButtonContainer"); |
| | | float[] xup = { -0.6f, -0.3f, 0, 0.3f, 0.6f }; |
| | | for (int x = 0; x < dimensions.x; ++x) |
| | | { |
| | | for (int x = 0; x < dimensions.x; x++) |
| | | for (int y = dimensions.y - AttackRowNumbers; y < dimensions.y; ++y) |
| | | { |
| | | if (m_arrGridType[x, y] != PlacementGridType.EGridWaitBuy) |
| | | continue; |
| | | if (m_arrGridType[x, y] != PlacementGridType.EGridWaitBuy) continue; |
| | | |
| | | Button tbtn = Instantiate(waitBuyBtnPrefab); |
| | | GameObject go = GameObject.Find("MainUI"); |
| | | if (!go) continue; |
| | | Button buyButton = Instantiate(waitBuyBtnPrefab); |
| | | buyButton.transform.SetParent(container.transform); |
| | | |
| | | Transform tp = go.GetComponent<Transform>(); |
| | | tbtn.GetComponent<Transform>().SetParent(tp, true); |
| | | Vector3 tpos = tbtn.transform.position; |
| | | tpos.x = m_arrGridCentUIPos[x, y].x; |
| | | tpos.y = m_arrGridCentUIPos[x, y].y + m_fGridUISize / 10; |
| | | tbtn.transform.position = tpos; |
| | | Vector3 pos = buyButton.transform.position; |
| | | pos.x = arrGridCentPos[x, y].x + (x - 2) * gapArr[3 - y] + xup[x]; |
| | | |
| | | // 设置为界面最下层: |
| | | tbtn.transform.SetAsFirstSibling(); |
| | | if (y == 2) |
| | | { |
| | | pos.z = arrGridCentPos[x, y].y + 9f; |
| | | } |
| | | else if (y == 3) |
| | | { |
| | | pos.z = arrGridCentPos[x, y].y + 7f; |
| | | } |
| | | pos.y = 30; |
| | | buyButton.transform.position = pos; |
| | | buyButton.transform.localRotation = Quaternion.identity; |
| | | buyButton.transform.localScale = Vector3.one; |
| | | |
| | | // 设置按钮对应的点击功能 |
| | | EndlessTowerGridOpen tgo = tbtn.GetComponent<EndlessTowerGridOpen>(); |
| | | EndlessTowerGridOpen tgo = buyButton.GetComponent<EndlessTowerGridOpen>(); |
| | | if (tgo) |
| | | { |
| | | tgo.SetBuyBtnInfo(x, y, this); |
| | |
| | | arrTowerBloodUi = new TowerBloodVis[dimensions.x, AttackRowNumbers]; |
| | | int dy = dimensions.y - 1; |
| | | |
| | | // 处理攻击塔位对应的血条 |
| | | m_arrTowerBulletUIPos = new Vector2[dimensions.x, AttackRowNumbers]; |
| | | arrTowerBulletUi = new BulletUICtl[dimensions.x, AttackRowNumbers]; |
| | | arrTowerEnergyUi = new EnergyUICtl[dimensions.x, AttackRowNumbers]; |
| | | arrTowerFreezeBreathUi = new FreezeBreath[dimensions.x, AttackRowNumbers]; |
| | | arrTowerEnergyEffect = new GameObject[dimensions.x, AttackRowNumbers]; |
| | | arrTowerFreezeBreathEffect = new GameObject[dimensions.x, AttackRowNumbers]; |
| | | |
| | | float[] gapArr = { 0.4f, 0.6f }; |
| | | |
| | | for (int x = 0; x < dimensions.x; x++) |
| | | { |
| | | for (int y = 0; y < AttackRowNumbers; ++y) |
| | | { |
| | | m_arrTowerBloodUIPos[x, y].x = m_arrGridCentUIPos[x, dy - y].x; |
| | | m_arrTowerBloodUIPos[x, y].y = m_arrGridCentUIPos[x, dy - y].y + m_fGridUISize / 10 * 3; |
| | | m_arrTowerBloodUIPos[x, y].x = arrGridCentPos[x, dy - y].x; |
| | | m_arrTowerBloodUIPos[x, y].y = arrGridCentPos[x, dy - y].y; |
| | | m_arrTowerBulletUIPos[x, y].x = arrGridCentPos[x, dy - y].x; |
| | | m_arrTowerBulletUIPos[x, y].y = arrGridCentPos[x, dy - y].y; |
| | | |
| | | // 现在PVE基地不需要血条 |
| | | GameObject img = Instantiate(towerBloodUIPrefab); |
| | | GameObject go = GameObject.Find("MainUI"); |
| | | if (!go) continue; |
| | | |
| | | Transform tp = go.GetComponent<Transform>(); |
| | | img.GetComponent<Transform>().SetParent(tp, true); |
| | | GameObject container = GameObject.Find("BuyButtonContainer"); |
| | | img.transform.SetParent(container.transform); |
| | | Vector3 tpos = img.transform.position; |
| | | tpos.x = m_arrTowerBloodUIPos[x, y].x; |
| | | tpos.y = m_arrTowerBloodUIPos[x, y].y; |
| | | tpos.z = m_arrTowerBloodUIPos[x, y].y + 4.2f - y * 1.66f; |
| | | tpos.y = 30f; |
| | | img.transform.position = tpos; |
| | | |
| | | // 设置为界面最下层: |
| | | img.transform.SetAsFirstSibling(); |
| | | img.transform.localScale = Vector3.one; |
| | | img.transform.localRotation = Quaternion.identity; |
| | | |
| | | TowerBloodVis tbv = img.GetComponent<TowerBloodVis>(); |
| | | arrTowerBloodUi[x, y] = tbv; |
| | | tbv.gameObject.SetActive(false); |
| | | |
| | | Vector3 targetPos = GridToWorld(new IntVector2(x, dy - y), new IntVector2(2, 1)); |
| | | |
| | | // 子弹条 |
| | | img = Instantiate(towerBulletUIPrefab); |
| | | img.transform.SetParent(transform, false); |
| | | img.transform.position = targetPos; |
| | | Vector3 pos = img.transform.position; |
| | | pos.x -= 1f; |
| | | img.transform.position = pos; |
| | | |
| | | BulletUICtl buc = img.GetComponent<BulletUICtl>(); |
| | | arrTowerBulletUi[x, y] = buc; |
| | | buc.gameObject.SetActive(false); |
| | | |
| | | // 把充能条也创建出来了. |
| | | img = Instantiate(towerEnergyUIPrefab); |
| | | img.transform.SetParent(container.transform); |
| | | tpos = img.transform.position; |
| | | tpos.x = m_arrTowerBulletUIPos[x, y].x + 4.4f + (x - 2) * gapArr[y]; |
| | | tpos.z = m_arrTowerBulletUIPos[x, y].y + 5f; |
| | | tpos.y = 30f; |
| | | img.transform.position = tpos; |
| | | img.transform.localScale = Vector3.one; |
| | | img.transform.localRotation = Quaternion.identity; |
| | | |
| | | EnergyUICtl euc = img.GetComponent<EnergyUICtl>(); |
| | | arrTowerEnergyUi[x, y] = euc; |
| | | euc.gameObject.SetActive(false); |
| | | |
| | | // 设置播放特效对应的3D坐标: |
| | | Vector3 vpos = GridToWorld(new IntVector2(x, dy - y), new IntVector2(2, 1)); |
| | | vpos.x -= 1f; |
| | | |
| | | arrTowerEnergyEffect[x, y] = Instantiate(energyEffectPrefab); |
| | | arrTowerEnergyEffect[x, y].transform.position = vpos; |
| | | |
| | | // 创建水精灵充能条 |
| | | img = Instantiate(FreezeBreathChargePrefab); |
| | | img.transform.SetParent(container.transform); |
| | | tpos = img.transform.position; |
| | | tpos.x = m_arrTowerBulletUIPos[x, y].x + 4.4f + (x - 2) * gapArr[y]; |
| | | tpos.z = m_arrTowerBulletUIPos[x, y].y + 5f; |
| | | tpos.y = 30f; |
| | | img.transform.position = tpos; |
| | | img.transform.localScale = Vector3.one; |
| | | img.transform.localRotation = Quaternion.identity; |
| | | |
| | | FreezeBreath freezeBreath = img.GetComponent<FreezeBreath>(); |
| | | arrTowerFreezeBreathUi[x, y] = freezeBreath; |
| | | freezeBreath.gameObject.SetActive(false); |
| | | |
| | | arrTowerFreezeBreathEffect[x, y] = Instantiate(FreezeBreathChargeEffect); |
| | | arrTowerFreezeBreathEffect[x, y].transform.position = vpos; |
| | | } |
| | | } |
| | | } |
| | | |
| | | public void updateGridOpenCoin(int ix, int iy) |
| | | { |
| | | GRID_OPENCASH += GRID_OPENCASH; |
| | | GRID_OPENCASH = Mathf.Floor(GRID_OPENCASH * 1.2f); |
| | | |
| | | for (int x = 0; x < dimensions.x; x++) |
| | | { |
| | |
| | | } |
| | | // 设置塔位默认开启,后面需要根据配置来 |
| | | m_arrGridType[2, 3] = PlacementGridType.EGridOpen; |
| | | ++GameConfig.EndlessOpenAttackTowerCount; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 在指定的位置播放充能成功的特效. |
| | | /// </summary> |
| | | /// <param name="x"></param> |
| | | /// <param name="y"></param> |
| | | /// <param name="play">是播放还是停止播放</param> |
| | | public void PlayEnergyEffect(int x, int y, bool play = true) |
| | | { |
| | | int dy = dimensions.y - 1 - y; |
| | | |
| | | if (!arrTowerEnergyEffect[x, dy]) return; |
| | | |
| | | ParticleSystem ps = arrTowerEnergyEffect[x, dy].GetComponent<ParticleSystem>(); |
| | | |
| | | if (ps == null) |
| | | ps = arrTowerEnergyEffect[x, dy].transform.GetChild(0).GetComponent<ParticleSystem>(); |
| | | |
| | | if (play) |
| | | { |
| | | if (!arrTowerEnergyEffect[x, dy].gameObject.activeSelf) |
| | | arrTowerEnergyEffect[x, dy].gameObject.SetActive(true); |
| | | ps.Play(); |
| | | } |
| | | else |
| | | { |
| | | |
| | | ps.Stop(); |
| | | arrTowerEnergyEffect[x, dy].gameObject.SetActive(false); |
| | | } |
| | | } |
| | | |
| | | public void PlayFreezeBreathEffect(int x, int y, bool play = true) |
| | | { |
| | | int dy = dimensions.y - 1 - y; |
| | | |
| | | if (!arrTowerFreezeBreathEffect[x, dy]) return; |
| | | |
| | | ParticleSystem ps = arrTowerFreezeBreathEffect[x, dy].GetComponent<ParticleSystem>(); |
| | | |
| | | if (ps == null) |
| | | ps = arrTowerFreezeBreathEffect[x, dy].transform.GetChild(0).GetComponent<ParticleSystem>(); |
| | | |
| | | if (play) |
| | | { |
| | | if (!arrTowerFreezeBreathEffect[x, dy].gameObject.activeSelf) |
| | | arrTowerFreezeBreathEffect[x, dy].gameObject.SetActive(true); |
| | | ps.Play(); |
| | | } |
| | | else |
| | | { |
| | | ps.Stop(); |
| | | arrTowerFreezeBreathEffect[x, dy].gameObject.SetActive(false); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | PlacementTile tileToUse; |
| | | #if UNITY_STANDALONE |
| | | tileToUse = placementTilePrefab; |
| | | //tileToUse = placementTilePrefab; |
| | | tileToUse = placementTilePrefabMobile; |
| | | #else |
| | | tileToUse = placementTilePrefabMobile; |
| | | #endif |
| | |
| | | |
| | | m_Tiles[x, y] = newTile; |
| | | newTile.SetTileType(m_arrGridType[x, y]); |
| | | newTile.CheckCanPlace(false);//初始化不显示 |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | PlacementTile currentCanPlace;//记录当前标记 |
| | | |
| | | /// <summary> |
| | | /// 开始拖拽的时候判断哪些可以放置 |
| | | /// </summary> |
| | | /// <param name="allTowerP">不符合条件的数组</param> |
| | | public void CheckAllCanPlace(List<IntVector2> allTowerP) |
| | | { |
| | | int iy = dimensions.y - 1;//3 |
| | | bool canPlace; |
| | | currentCanPlace = null; |
| | | for (int ix = 0; ix < dimensions.x; ix++) |
| | | { |
| | | for (int y = iy; y >= dimensions.y - AttackRowNumbers; --y) |
| | | { |
| | | if (m_arrGridType[ix, y] == PlacementGridType.EGridOpen) |
| | | { |
| | | canPlace = true; |
| | | for (int i = 0; i < allTowerP.Count; i++) |
| | | { |
| | | if (allTowerP[i].x == ix && allTowerP[i].y == y) |
| | | { |
| | | canPlace = false; |
| | | break; |
| | | } |
| | | } |
| | | m_Tiles[ix, y].CheckCanPlace(canPlace); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 播放升级动画 |
| | | /// </summary> |
| | | /// <param name="allTowerP"></param> |
| | | public void PlayPS(List<IntVector2> allTowerP) |
| | | { |
| | | // for (int i = 0; i < allTowerP.Count; i++) |
| | | // { |
| | | // m_Tiles[allTowerP[i].x, allTowerP[i].y].SetParticleSystem(true); |
| | | // } |
| | | } |
| | | /// <summary> |
| | | /// /// 停止所有升级动画 |
| | | /// </summary> |
| | | public void StopPS() |
| | | { |
| | | // int iy = dimensions.y - 1;//3 |
| | | // for (int ix = 0; ix < dimensions.x; ix++) |
| | | // { |
| | | // for (int y = iy; y >= dimensions.y - AttackRowNumbers; --y) |
| | | // { |
| | | // if (m_arrGridType[ix, y] == PlacementGridType.EGridOpen) |
| | | // { |
| | | // m_Tiles[ix, y].SetParticleSystem(false); |
| | | // } |
| | | // } |
| | | // } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 拖动时候实时检查距离哪个格子近 |
| | | /// </summary> |
| | | /// <param name="x"></param> |
| | | /// <param name="y"></param> |
| | | public void CheckCanPlaceUpdate(int x, int y, bool isEmpty, string towerName) |
| | | { |
| | | CloseCanPlace(); |
| | | currentCanPlace = m_Tiles[x, y]; |
| | | currentCanPlace.SetSelect(true); |
| | | if (isEmpty) |
| | | { |
| | | currentCanPlace.SetTowerVirtualshadow(towerName); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 关闭上一个 |
| | | /// </summary> |
| | | public void CloseCanPlace() |
| | | { |
| | | if (currentCanPlace != null) |
| | | { |
| | | currentCanPlace.SetSelect(false); |
| | | currentCanPlace = null; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 关闭所有 |
| | | /// </summary> |
| | | public void CloseCanPlaceRenderer() |
| | | { |
| | | int iy = dimensions.y - 1; |
| | | for (int ix = 0; ix < dimensions.x; ix++) |
| | | { |
| | | for (int y = iy; y >= dimensions.y - AttackRowNumbers; --y) |
| | | { |
| | | if (m_arrGridType[ix, y] == PlacementGridType.EGridOpen) |
| | | { |
| | | m_Tiles[ix, y].CheckCanPlace(false); |
| | | } |
| | | } |
| | | } |
| | | //StopPS(); |
| | | } |
| | | |
| | | #if UNITY_EDITOR |
| | |
| | | freePos = gridFreePos; |
| | | else if (y > 0 && y == dimensions.y - 2) |
| | | freePos = gridFreePos2; |
| | | |
| | | else if (y > 0 && y == dimensions.y - 3) |
| | | freePos = gridFreePos3; |
| | | else if (y == dimensions.y - 4) |
| | | freePos = gridFreePos4; |
| | | for (int x = 0; x < dimensions.x; x++) |
| | | { |
| | | var position = new Vector3((x + 0.5f) * gridSize, 0, (y + 0.5f) * gridSize + freePos); |