public IEnumerator ShowBuildingShade(EBuildingType eBuildingType) { m_bDraggingBuildingShade = true; for (int i = 0; i < m_pBuildingShadesPrefabs.Count; i++) { if (m_pBuildingShadesPrefabs[i].m_eType == eBuildingType) { m_pCurrentBuildingShade = Instantiate<BuildingShade>(m_pBuildingShadesPrefabs[i]); m_pCurrentBuildingShade.transform.SetParent(transform, false); break; } } if (m_pCurrentBuildingShade == null) { Debug.LogError("BuildingShade not found: " + eBuildingType); yield break; } RaycastHit tHit; do { if (m_pCurrentBuildingShade == null) yield break; Ray tRay = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(tRay, out tHit, 100.0f, LayersManager.Instance.GetLayer("Ground"), QueryTriggerInteraction.Ignore)) { m_pCurrentBuildingShade.gameObject.SetActive(true); m_pCurrentBuildingShade.transform.position = tHit.point; } else { m_pCurrentBuildingShade.gameObject.SetActive(false); } yield return false; } while (!Input.GetButtonDown("Submit") || !m_pCurrentBuildingShade.CanBePlaced); DestroyCurrentShade(); for (int i = 0; i < m_pBuildingsPrefabs.Count; i++) { if (m_pBuildingsPrefabs[i].m_eBuildingType == eBuildingType) { Building pNewBuilding = Instantiate<Building>(m_pBuildingsPrefabs[i]); pNewBuilding.transform.SetParent(transform, false); pNewBuilding.transform.position = tHit.point; break; } } m_bDraggingBuildingShade = false; }
void DestroyCurrentShade() { Destroy(m_pCurrentBuildingShade.gameObject); m_pCurrentBuildingShade = null; }