Exemple #1
0
 private void ClearPreview()
 {
     Destroy(_previewPart.gameObject);
     _previewPart    = null;
     _cachedMaterial = null;
     _resultRotation = Quaternion.Euler(0, 0, 0);
 }
Exemple #2
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);

            //
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }