//Clear snapped from cache and clean up any dictionaries public IEnumerator RemoveSnapper(BuildingSnapper snapper) { buildingSnappers[snapper.buildingType][snapper.transform.position].Remove(snapper); Vector3 pos = snapper.transform.position; BuildingTypes type = snapper.buildingType; //No more supports exist at this snapper's position - if a building component exists there, destroy it if (buildingSnappers[type][pos].Count == 0) { if (type != BuildingTypes.foundation) { if (structures[type].ContainsKey(pos)) { NewBuildingComponent component = structures[type][pos]; yield return(new WaitForSeconds(delayDominoTime)); if (component) { Destroy(component.gameObject); } } } buildingSnappers[type].Remove(pos); } else //Activate the most recently instantiated snapper at this position { EnableLastSnapperAtPos(type, pos); } }
// Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Mouse0)) { RaycastHit hit = new RaycastHit(); if (Physics.Raycast(transform.position, child.forward, out hit, 100, layerMask, QueryTriggerInteraction.Ignore)) { BuildingSnapper snapper = hit.transform.GetComponentInParent <BuildingSnapper>(); if (snapper) { if (snapper.faceCamera) { Vector3 one = new Vector3(transform.position.x, 0, transform.position.z); Vector3 two = new Vector3(snapper.transform.position.x, 0, snapper.transform.position.z); snapper.transform.rotation = Quaternion.LookRotation(one - two, Vector3.up); snapper.transform.localEulerAngles = new Vector3(0, Mathf.Round(snapper.transform.localEulerAngles.y / 90) * 90, 0); } Instantiate(buildingComponents[(int)snapper.buildingType], snapper.transform.position, snapper.transform.rotation); snapper.gameObject.SetActive(false); } } } else if (Input.GetKeyDown(KeyCode.Mouse1)) { RaycastHit hit = new RaycastHit(); if (Physics.Raycast(transform.position, child.forward, out hit, 100, layerMask, QueryTriggerInteraction.Ignore)) { if (hit.transform.GetComponent <NewBuildingComponent>()) { Destroy(hit.transform.GetComponentInParent <NewBuildingComponent>().gameObject); } } } }
//Add snapper public void AddSnapper(BuildingSnapper snapper) { if (buildingSnappers[snapper.buildingType].ContainsKey(snapper.transform.position) == false) { buildingSnappers[snapper.buildingType].Add(snapper.transform.position, new List <BuildingSnapper>()); } else { //Deactivate last one at this position List <BuildingSnapper> snapperList = buildingSnappers[snapper.buildingType][snapper.transform.position]; if (snapperList != null) { if (snapperList.Count > 1) { snapperList[snapperList.Count - 1].gameObject.SetActive(false); } } } buildingSnappers[snapper.buildingType][snapper.transform.position].Add(snapper); }