Example #1
0
        public override void Run(FeatureBehaviour fb, UnityTile tile)
        {
            _spawnedCount = 0;
            var collider = fb.GetComponent <Collider>();
            var bounds   = collider.bounds;
            var center   = bounds.center;

            center.y = 0;

            var area       = (int)(bounds.size.x * bounds.size.z);
            int spawnCount = Mathf.Min(area / _spawnRateInSquareMeters, _maxSpawn);

            while (_spawnedCount < spawnCount)
            {
                var x   = Random.Range(-bounds.extents.x, bounds.extents.x);
                var z   = Random.Range(-bounds.extents.z, bounds.extents.z);
                var ray = new Ray(bounds.center + new Vector3(x, 100, z), Vector3.down * 2000);

                RaycastHit hit;
                //Debug.DrawRay(ray.origin, ray.direction * 1000, Color.yellow, 1000);
                if (Physics.Raycast(ray, out hit, 150, _layerMask))
                {
                    //Debug.DrawLine(ray.origin, hit.point, Color.red, 1000);
                    var index     = Random.Range(0, _prefabs.Length);
                    var transform = ((GameObject)Instantiate(_prefabs[index], fb.transform, false)).transform;
                    transform.position = hit.point;
                    if (_randomizeRotation)
                    {
                        transform.localEulerAngles = new Vector3(0, Random.Range(-180f, 180f), 0);
                    }
                    if (!_scaleDownWithWorld)
                    {
                        transform.localScale = Vector3.one / tile.TileScale;
                    }

                    if (_randomizeScale)
                    {
                        var scale = transform.localScale;
                        var y     = Random.Range(scale.y * .7f, scale.y * 1.3f);
                        scale.y = y;
                        transform.localScale = scale;
                    }

                    _spawnedCount++;
                }
            }
        }
Example #2
0
        internal void Show(FeatureBehaviour selectedFeature)
        {
            if (selectedFeature == null)
            {
                Clear();
                return;
            }
            _selectedFeature   = selectedFeature;
            transform.position = new Vector3(0, 0, 0);
            var mesh = selectedFeature.GetComponent <MeshFilter>();

            if (mesh != null)
            {
                _targetVerts = mesh.mesh.vertices;
                Snap();
            }
            gameObject.SetActive(true);
        }