private void ClearPreview() { Destroy(_previewPart.gameObject); _previewPart = null; _cachedMaterial = null; _resultRotation = Quaternion.Euler(0, 0, 0); }
private void CreatePreview(string partName) { _previewPart = Instantiate(cachedBuildParts[partName] /*, _buildingsHolder.transform*/); _previewPart.GameObject().SetActive(true); _previewPart.GetComponentInChildren <Collider>().enabled = false; //material swap var rend = _previewPart.GetComponentInChildren <Renderer>(); _cachedMaterial = rend.material; var transMat = new Material(transparentMaterial); rend.material = transMat; rend.sharedMaterial.SetTexture("_BaseMap", _cachedMaterial.mainTexture); // }
private void CreateBuildPartData(BuildPart part, GameObject floor, GameObject building) { var floorData = new BuildingsHolder.FloorData { Object = floor, FloorIndex = 0 }; floorData.AddPart(part); var buildingData = new BuildingsHolder.BuildingData { BuildingGameObject = building }; buildingData.Floors.Add(floorData); _bHolder.AddBuilding(buildingData); }
private void UpdatePreviewTransform() { var ray = SelectionManager.Instance.cam.ViewportPointToRay(SelectionManager.Instance.cam.ScreenToViewportPoint(Input.mousePosition)); var rend = _previewPart.GetComponentInChildren <Renderer>(); var rayCastHit = Physics.Raycast(ray, out var hit, 150, _previewPart.buildOnLayers); _hitPart = hit.collider.GetComponentInChildren <BuildPart>(); if (rayCastHit && !heightAdjusting) { if (_hitPart != null && _previewPart.buildOnLayers.Includes(_hitPart.gameObject.layer)) { var pointList = new List <PointData>(); inSnap = true; //snap to point foreach (var snap in _hitPart.buildingPart.snappingParts) { if (Enum.GetName(typeof(BuildingPart.SnappingParts.PartName), snap.partName) != Enum.GetName(typeof(BuildingPart.BuildName), _previewPart.buildingPart.buildName)) { continue; } foreach (var point in snap.snapPoints) { var pointDistance = _hitPart.transform.position + _hitPart.transform.TransformDirection(point.position); var pointRotation = point.rotation + _hitPart.transform.eulerAngles; var pointData = new PointData { Position = pointDistance, Rotation = pointRotation }; if (pointList.Contains(pointData)) { break; } pointList.Add(pointData); Debug.DrawLine(_hitPart.transform.position + new Vector3(0, 2, 0), pointDistance + new Vector3(0, 2, 0)); } } pointList.Sort((a, b) => Vector3.Distance(hit.point, a.Position).CompareTo(Vector3.Distance(hit.point, b.Position))); if (pointList.Count > 0) { _previewPart.transform.position = pointList[0].Position; //sorted so can use first in list _previewPart.transform.eulerAngles = _snappedRotation + pointList[0].Rotation; } return; } inSnap = false; var offset = _previewPart.buildingPart.buildOffset + _heightAdjustment; _previewPart.transform.position = new Vector3(hit.point.x, hit.point.y + offset, hit.point.z); } _previewPart.UpdatePlaceableColor(rend); }