public override void Run(FeatureBehaviour fb)
        {
            var ts = fb.gameObject.AddComponent <TextureSelector>();

            // find the "height" property for this feature
            int height = 0;

            if (fb.Data.Properties.ContainsKey("crimeIndex"))
            {
                if (int.TryParse(fb.Data.Properties["crimeIndex"].ToString(), out height))
                {
                }
            }

            // find the top and side materials for this height; start with arbitrary defaults
            Material topMaterial  = _materialRanges[0].topMaterial;
            Material sideMaterial = _materialRanges[0].sideMaterial;

            foreach (var materialRange in _materialRanges)
            {
                if (materialRange.min <= height && materialRange.max >= height)
                {
                    topMaterial  = materialRange.topMaterial;
                    sideMaterial = materialRange.sideMaterial;
                    break;
                }
            }

            Material[] topMaterials  = new Material[] { topMaterial };
            Material[] sideMaterials = new Material[] { sideMaterial };
            ts.Initialize(fb, true, false, topMaterials, true, sideMaterials);
        }
Example #2
0
 public override void Run(FeatureBehaviour fb, UnityTile tile)
 {
     foreach (var t in _types)
     {
         fb.gameObject.AddComponent(t.Type);
     }
 }
Example #3
0
        void Update()
        {
            UnityTile[] _tile;
            _tile = _tileprovider.GetComponentsInChildren <UnityTile>();
            foreach (UnityTile tile in _tile)
            {
                Transform   poiChild = tile.gameObject.transform.GetChild(2);
                Transform[] others   = poiChild.gameObject.GetComponentsInChildren <Transform>();

                foreach (Transform other in others)
                {
                    if (other)
                    {
                        distance = Vector3.Distance(other.position, transform.position);
                        if (distance < 5)
                        {
                            GameObject building = other.gameObject;
                            feature             = building.GetComponent <FeatureBehaviour>();
                            buildingInformation = feature.DataString.ToString();
                            Debug.Log("Player is near the building now");
                            OnGUI();
                        }
                    }
                }
            }
        }
Example #4
0
        public override void Run(FeatureBehaviour fb, UnityTile tile)
        {
            int selpos = fb.Data.Points[0].Count / 2;
            var met    = fb.Data.Points[0][selpos];
            var go     = Instantiate(_prefab);

            go.name = fb.Data.Data.Id.ToString();
            go.transform.position = met;
            go.transform.SetParent(fb.transform, false);

            var bd = go.AddComponent <FeatureBehaviour>();

            bd.Init(fb.Data);

            var tm = go.GetComponent <IFeaturePropertySettable>();

            if (tm != null)
            {
                tm.Set(fb.Data.Properties);
            }

            if (!_scaleDownWithWorld)
            {
                go.transform.localScale = Vector3.one / tile.TileScale;
            }
        }
 public override void Run(VectorEntity ve, UnityTile tile)
 {
     if (_features.ContainsKey(ve.GameObject))
     {
         _features[ve.GameObject].Initialize(ve);
     }
     else
     {
         _tempFeature = ve.GameObject.AddComponent <FeatureBehaviour>();
         _features.Add(ve.GameObject, _tempFeature);
         _tempFeature.Initialize(ve);
     }
 }
Example #6
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 #7
0
        public override void Run(FeatureBehaviour fb, UnityTile tile)
        {
            int selpos = fb.Data.Points[0].Count / 2;
            var met    = fb.Data.Points[0][selpos];

            GameObject prefab = _prefabs[Random.Range(0, _prefabs.Length)];
            var        go     = Instantiate(prefab);

            go.name = fb.Data.Data.Id.ToString();
            go.transform.position = met;
            go.transform.SetParent(fb.transform, false);

            var bd = go.AddComponent <FeatureBehaviour>();

            bd.Init(fb.Data);

            var tm = go.GetComponent <IFeaturePropertySettable>();

            if (tm != null)
            {
                tm.Set(fb.Data.Properties);
            }

            /// Runs modifiers on each prefab
            foreach (GameObjectModifier mod in _prefabModifiers.Where(x => x.Active))
            {
                mod.Run(bd, tile);
            }

            /// Scale tree based on its diameter
            TreeModel tree            = TreeModel.ParseData(fb.Data.Properties);
            float     scale           = _scale;
            float     runningDiameter = tree.diameter ?? 1.0f;

            while (runningDiameter > 1)
            {
                scale           += 0.02f;
                runningDiameter -= 12.0f;
            }
            go.transform.localScale *= scale * Random.Range(.9f, 1.1f);

            /// Rotate tree in different directions
            float rotationY = Random.Range(0, 360);

            go.transform.localEulerAngles = new Vector3(0, rotationY, 0);
        }
Example #8
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);
        }
Example #9
0
        public override void Run(FeatureBehaviour fb, UnityTile tile)
        {
            if (_marker == null)
            {
                var    canvases = FindObjectsOfType <Canvas>();
                Canvas canv     = null;

                foreach (Canvas _canv in canvases)
                {
                    if (_canv.name == CANVAS_NAME)
                    {
                        canv = _canv;
                        break;
                    }
                }

                if (canv == null)
                {
                    var go = new GameObject(CANVAS_NAME, typeof(Canvas), typeof(CanvasScaler), typeof(GraphicRaycaster));
                    canv            = go.GetComponent <Canvas>();
                    canv.renderMode = RenderMode.ScreenSpaceOverlay;
                }

                var sel = Instantiate(Resources.Load <GameObject>(SELECTOR_PATH));
                sel.transform.SetParent(canv.transform);
                sel.transform.SetAsFirstSibling();
                sel.SetActive(false);

                var infoPanel = Instantiate(Resources.Load <GameObject>(INFO_PATH), canv.transform);
                infoPanel.transform.SetAsFirstSibling();
                infoPanel.SetActive(false);

                Text infoText = infoPanel.GetComponentInChildren <Text>();
                infoText.fontSize = fontSize;

                _marker            = sel.GetComponent <FeatureUiMarker>();
                _marker._infoPanel = infoPanel.transform;
                _marker._info      = infoText;
            }

            var det = fb.gameObject.AddComponent <FeatureSelectionDetector>();

            det.Initialize(_marker, fb);
        }
Example #10
0
        public override void Run(FeatureBehaviour fb, UnityTile tile)
        {
            switch (_colliderType)
            {
            case ColliderType.BoxCollider:
                fb.gameObject.AddComponent <BoxCollider>();
                break;

            case ColliderType.MeshCollider:
                fb.gameObject.AddComponent <MeshCollider>();
                break;

            case ColliderType.SphereCollider:
                fb.gameObject.AddComponent <SphereCollider>();
                break;

            default:
                break;
            }
        }
        public override void Run(FeatureBehaviour fb)
        {
            if (_marker == null)
            {
                var canv = FindObjectOfType <Canvas>();
                if (canv == null)
                {
                    var go = new GameObject("Canvas", typeof(Canvas), typeof(CanvasScaler), typeof(GraphicRaycaster));
                    canv            = go.GetComponent <Canvas>();
                    canv.renderMode = RenderMode.ScreenSpaceOverlay;
                }

                var sel = Instantiate(Resources.Load <GameObject>("selector"));
                sel.transform.SetParent(canv.transform);
                _marker = sel.GetComponent <FeatureUiMarker>();
            }

            var det = fb.gameObject.AddComponent <FeatureSelectionDetector>();

            det.Initialize(_marker, fb);
        }
Example #12
0
        public override void Run(FeatureBehaviour fb)
        {
            //   Debug.Log("ColliderModifier:Run");
            switch (_colliderType)
            {
            case ColliderType.BoxCollider:
                fb.gameObject.AddComponent <BoxCollider>();
                break;

            case ColliderType.MeshCollider:
                fb.gameObject.AddComponent <MeshCollider>();
                break;

            case ColliderType.SphereCollider:
                fb.gameObject.AddComponent <SphereCollider>();
                break;

            default:
                break;
            }
        }
Example #13
0
        public override void Run(FeatureBehaviour fb, UnityTile tile)
        {
            var _meshRenderer = fb.gameObject.AddComponent <MeshRenderer>();

            if (_textureSides && _sideMaterials.Length > 0)
            {
                _meshRenderer.materials = new Material[2]
                {
                    _topMaterials[Random.Range(0, _topMaterials.Length)],
                    _sideMaterials[Random.Range(0, _sideMaterials.Length)]
                };
            }
            else if (_textureTop)
            {
                _meshRenderer.materials = new Material[1]
                {
                    _topMaterials[Random.Range(0, _topMaterials.Length)]
                };
            }

            if (_useSatelliteTexture)
            {
                var _tile = fb.gameObject.GetComponent <UnityTile>();
                var t     = fb.transform;
                while (_tile == null && t.parent != null)
                {
                    t     = t.parent;
                    _tile = t.GetComponent <UnityTile>();
                }

                _meshRenderer.materials[0].mainTexture      = _tile.GetRasterData();
                _meshRenderer.materials[0].mainTextureScale = new Vector2(1f, 1f);
            }


            //var ts = fb.gameObject.AddComponent<TextureSelector>();
            //         ts.Initialize(fb, _textureTop, _useSatelliteTexture, _topMaterials, _textureSides, _sideMaterials);
        }
Example #14
0
 public override void Run(FeatureBehaviour fb, UnityTile tile)
 {
     fb.gameObject.layer = _layerId;
 }
 public void OnEnable()
 {
     _beh = (FeatureBehaviour)target;
 }
Example #16
0
 public virtual void Run(FeatureBehaviour fb)
 {
 }
Example #17
0
 public virtual void Run(FeatureBehaviour fb, UnityTile tile)
 {
 }
Example #18
0
 internal void Initialize(FeatureUiMarker marker, FeatureBehaviour fb)
 {
     _marker  = marker;
     _feature = fb;
 }
Example #19
0
 public override void Run(FeatureBehaviour fb)
 {
     fb.gameObject.layer = _layerId;
 }
        public override void Run(FeatureBehaviour fb)
        {
            var ts = fb.gameObject.AddComponent <TextureSelector>();

            ts.Initialize(fb, _textureTop, _useSatelliteTexture, _topMaterials, _textureSides, _sideMaterials);
        }
Example #21
0
 /* checks whether this material was used during the filter dates
  * @return true if recorded use falls outside these dates
  */
 private bool OutsideDates(FeatureBehaviour fb)
 {
     return((fb.endDate != null && start != null && start.CompareTo(fb.endDate) > 0) || // material use predates filtered era
            (fb.startDate != null && end != null && end.CompareTo(fb.startDate) < 0)); // material use began after filtered era
 }
Example #22
0
    // does a spherecast to detect materials in surrounding regions and displays them on panel
    private void ShowList(int layerMask)
    {
        RaycastHit[] hits = Physics.SphereCastAll(ray, radiusSlide.value * 1000 * map.WorldRelativeScale, 120, 1 << layerMask);

        //reset dictionaries for new search
        found.Clear();
        display.Clear();


        // no tilesets found
        if (hits.Length == 0)
        {
            if (loading) // something might be here, it just hasn't loaded
            {
                materialsList.text = "\n<size=25pt>Map is loading. Please click again when this panel closes.</size>";
            }
            else // nothing is here
            {
                SetMissingText(LayerMask.LayerToName(layerMask));
            }
            // Debug.Log("Nothing here...");
        }

        else // found tilesets!
        {
            double d;
            foreach (RaycastHit hit in hits)
            {
                // geographic location of collision with shapefile (in meters)
                point = Conversions.LatLonToMeters(hit.point.GetGeoPosition(map.CenterMercator, map.WorldRelativeScale));

                d = Vector2d.Distance(point / 1000, click / 1000); // distance from click location to collision in km

                // within range (I think it should always be, but just in case, here's another check)
                if (d < radiusSlide.value)
                {
                    // GetComponent is expensive. Better way?
                    FeatureBehaviour fb   = hit.transform.gameObject.GetComponent <FeatureBehaviour>();
                    string           name = fb.DataString;
                    if (name == null)
                    {
                        Debug.Log(hit.transform.name);
                    }
                    if (layerMask == 11)      // quarry
                    {
                        if (OutsideDates(fb)) // don't include this material in the list
                        {
                            Debug.Log("Bad");
                            continue;
                        }
                    }

                    // already found a collision with this shapefile; keep the closer one
                    if (found.ContainsKey(name))
                    {
                        double distance = found[name];
                        if (d < distance)
                        {
                            found.Remove(name);
                            found.Add(name, d);
                        }
                    }

                    else
                    {
                        found.Add(name, d);
                    }
                }
            }

            // Debug.Log(found.Count + "vs." + hits.Length);
            if (found.Count == 0) // no tilesets within range
            {
                SetMissingText(LayerMask.LayerToName(layerMask));
            }

            else
            {
                // go through kv pairs and assign to categories
                foreach (KeyValuePair <string, double> pair in found)
                {
                    int category = Category(pair.Value);

                    // other tilesets are in the same distance range
                    if (display.ContainsKey(category))
                    {
                        display[category].Add(pair.Key);
                    }

                    else // this is the first hit at this distance
                    {
                        List <string> thisList = new List <string>();
                        thisList.Add(pair.Key);
                        display.Add(category, thisList);
                    }
                }

                // display by distance categories
                StringBuilder text = new StringBuilder();
                foreach (KeyValuePair <int, List <string> > pair in display)
                {
                    // category label
                    text.Append(string.Format("\n<i>Within a {0}-km radius:</i>\n", pair.Key));

                    switch (layerMask) // text differs depending on type of material
                    {
                    case 8:            // species list for wood
                        foreach (string species in pair.Value)
                        {
                            text.Append("<size=90%><link=\"id_tree\"><color=\"blue\"><u>" + species + "</color></u></link></size>\n");
                        }
                        break;

                    case 9:     // underlying geology
                        foreach (string id in pair.Value)
                        {
                            text.Append("<size=90%><link=\"" + id + "\"><color=\"blue\"><u>Find stone</color></u></link></size>\n");
                        }
                        break;

                    case 11:     // stone quarries
                        foreach (string type in pair.Value)
                        {
                            text.Append("<size=90%><link=\"id_quarry\"><color=\"blue\"><u>" + type + "</color></u></link></size>\n");
                        }
                        break;
                    }
                }
                SetListText(layerMask, text.ToString()); // display text
            }
        }
    }