From 24f59b89e9eabcfe948fc0ba304a8dbec2deda14 Mon Sep 17 00:00:00 2001 From: River Jiang <546213258@qq.com> Date: Tue, 27 Oct 2020 14:09:47 +0800 Subject: [PATCH] Merge branch 'master' of http://172.16.1.52:8090/r/GemBattle into master --- Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs | 165 ++++++++++++++++++++++++++++++------------------------ 1 files changed, 91 insertions(+), 74 deletions(-) diff --git a/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs b/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs index 23760df..c2fed45 100644 --- a/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs +++ b/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs @@ -80,9 +80,9 @@ private float[,] m_arrCoinGenTime; /// <summary> - /// 每一个Tile格子的中心点对应的屏幕坐标. + /// 每一个Tile格子的中心店的世界坐标 /// </summary> - private Vector2[,] m_arrGridCentUIPos; + private Vector2[,] arrGridCentPos; /// <summary> /// 攻击塔位对应的UI位置信息. @@ -95,11 +95,6 @@ private TowerBloodVis[,] arrTowerBloodUi; /// <summary> - /// 塔位对应的屏幕坐标尺寸 - /// </summary> - private float m_fGridUISize; - - /// <summary> /// Array of <see cref="PlacementTile"/>s /// </summary> private PlacementTile[,] m_Tiles; @@ -109,6 +104,26 @@ /// </summary> /// <value></value> public int AttackRowNumbers { get; } = 2; + + /// <summary> + /// 攻击塔位对应的子弹UI位置信息. + /// </summary> + private Vector2[,] m_arrTowerBulletUIPos; + + private BulletUICtl[,] arrTowerBulletUi; + + private EnergyUICtl[,] arrTowerEnergyUi; + + /// <summary> + /// 此位置上塔对应的子弹充能Prefab.塔放置到当前的塔位后,如果是对应的塔防类型,需要把 + /// 相应的界面指针传到塔防的数据结构内。 + /// </summary> + public GameObject towerBulletUIPrefab; + + /// <summary> + /// 充能条对应的界面 + /// </summary> + public GameObject towerEnergyUIPrefab; /// <summary> /// Converts a location in world space into local grid coordinates. @@ -152,9 +167,9 @@ /// </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> @@ -162,9 +177,9 @@ /// </summary> /// <param name="x"></param> /// <returns></returns> - public EnergyUICtl GetEnergyUICtl(int x) + public EnergyUICtl GetEnergyUICtl(int x, int y) { - return null; + return arrTowerEnergyUi[x, 3 - y]; } @@ -533,49 +548,21 @@ /// </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; } } @@ -583,30 +570,27 @@ PreCalculateTowerBloodUi(); m_arrTGO = new EndlessTowerGridOpen[dimensions.x, dimensions.y]; - // 设置界面相关的内容: - for (int y = dimensions.y - AttackRowNumbers; y < dimensions.y; y++) + + 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; + GameObject container = GameObject.Find("BuyButtonContainer"); + 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; - - // 设置为界面最下层: - tbtn.transform.SetAsFirstSibling(); + Vector3 pos = buyButton.transform.position; + pos.x = arrGridCentPos[x, y].x; + pos.z = arrGridCentPos[x, y].y + (y - AttackRowNumbers) * 1.9f; + 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); @@ -654,30 +638,63 @@ 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]; + 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; 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); + + img = Instantiate(towerBulletUIPrefab); + img.transform.SetParent(container.transform, true); + tpos = img.transform.position; + tpos.x = m_arrTowerBulletUIPos[x, y].x + 4.2f; + tpos.z = m_arrTowerBulletUIPos[x, y].y + 1.1f - y * 1.66f; + tpos.y = 30f; + img.transform.position = tpos; + img.transform.localScale = Vector3.one; + img.transform.localRotation = Quaternion.identity; + + 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.2f; + tpos.z = m_arrTowerBulletUIPos[x, y].y + 1.1f - y * 1.66f; + 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); } } } -- Gitblit v1.9.1