private void PlaceAction() { if (ic != null && (ic.IcType == ICType.breadboard || ic.IcType == ICType.powerrail)) { PlaceActionBreadBoard(); return; } int layer_mask = LayerMask.GetMask("Pin"); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit, 500, layer_mask) && !EventSystem.current.IsPointerOverGameObject()) { if (ic != null && icModel != null) { string nodeId = hit.transform.gameObject.name; int index = CircuitHelper.GetIndexFromNode(nodeId, hit.point); int x = Mathf.RoundToInt(hit.point.x); int z = Mathf.RoundToInt(hit.point.z); icModel.transform.position = new Vector3(x, 0, z); if (circuitPool.CanPlace(ic.IcType, ic.Pins, nodeId, index)) { PlaceComponent(nodeId, index, new Vector3(x, 0, z)); } else { Debug.Log("Cannot place item here"); } } }
private void PlaceAction_Hover() { if (ic != null && ic.IcType == ICType.wire) { PlaceActionWire_Hover(); return; } if (ic != null && (ic.IcType == ICType.breadboard || ic.IcType == ICType.powerrail)) { PlaceActionBreadboard_Hover(); return; } int layer_mask = LayerMask.GetMask("Pin"); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit, 500, layer_mask) && !EventSystem.current.IsPointerOverGameObject()) { string nodeId = hit.transform.gameObject.name; int index = CircuitHelper.GetIndexFromNode(nodeId, hit.point); int x = Mathf.RoundToInt(hit.point.x); int z = Mathf.RoundToInt(hit.point.z); if (ic != null && icModel != null) { Vector3 location = new Vector3(x, 0, z); switch (ic.IcType) { case ICType.dual: break; default: icModel.transform.position = location; icModel.transform.rotation = Quaternion.Euler(0, CircuitHelper.IsNodeRotated(nodeId) ? 90 : 0, 0); break; } if (circuitPool.CanPlace(ic.IcType, ic.Pins, nodeId, index)) { if (showsError) { showsError = false; RemoveOutline(icModel.GetComponentsInChildren <Renderer>()); } } else { if (!showsError) { showsError = true; AddOutline(icModel.GetComponentsInChildren <Renderer>(), outlineMat); } } } }
private void PlaceAction() { if (ic != null && icModel != null) { switch (ic.IcType) { case ICType.breadboard: case ICType.powerrail: if (raycastManager.GetNodeId(out RaycastHit hit1, out string _, "Ground")) { int x = Mathf.RoundToInt(hit1.point.x); int z = Mathf.RoundToInt(hit1.point.z); icModel.transform.position = new Vector3(x, 0, z); string type = (ic.IcType == ICType.breadboard ? "0" : "1"); if (fabricator.canPlaceBreadBoard(type, x, z, placeRotated)) { fabricator.addBoard(type, x, z, placeRotated); } else { Debug.Log("Cannot place item here"); } } else { icModel.transform.position = GameObjectPool; } break; default: if (raycastManager.GetNodeId(out RaycastHit hit2, out string nodeId, "Pin")) { int index = CircuitHelper.GetIndexFromNode(nodeId, hit2.point); int x = Mathf.RoundToInt(hit2.point.x); int z = Mathf.RoundToInt(hit2.point.z); icModel.transform.position = new Vector3(x, 0, z); if (circuitPool.CanPlace(ic.IcType, ic.Pins, nodeId, index)) { PlaceComponent(nodeId, index, new Vector3(x, 0, z)); } else { Debug.Log("Cannot place item here"); } } else { icModel.transform.position = GameObjectPool; } break; } } }
private void PlaceActionWire_Hover() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit) && !EventSystem.current.IsPointerOverGameObject()) { if (hit.transform.gameObject.layer == LayerMask.NameToLayer("UI")) { icModel.transform.position = GameObjectPool; return; } bool isPin = hit.transform.gameObject.layer == LayerMask.NameToLayer("Pin"); string nodeId = hit.transform.gameObject.name; int index = 0; int x = Mathf.RoundToInt(hit.point.x); int z = Mathf.RoundToInt(hit.point.z); if (isPin) { index = CircuitHelper.GetIndexFromNode(nodeId, hit.point); } Vector3 location = new Vector3(x, 0, z); if (locationASelected) { List <Vector3> hoverLinePos = new List <Vector3>(wireNodes); //hoverLinePos.Add(hit.point); hoverLinePos.Add(new Vector3(Mathf.Round(hit.point.x * 2) / 2, hit.point.y, Mathf.Round(hit.point.z * 2) / 2)); icModel.GetComponentInChildren <LineRenderer>().positionCount = hoverLinePos.Count; icModel.GetComponentInChildren <LineRenderer>().SetPositions(hoverLinePos.ToArray()); } else { icModel.transform.position = location; } if (isPin && circuitPool.CanPlace(ic.IcType, ic.Pins, nodeId, index)) { if (showsError) { showsError = false; RemoveOutline(icModel.GetComponentsInChildren <Renderer>()); } } else { if (!showsError) { showsError = true; AddOutline(icModel.GetComponentsInChildren <Renderer>(), outlineMat); } } } else if (icModel != null) { if (ic.IcType != ICType.wire) { icModel.transform.position = GameObjectPool; } } }