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); }
public override void Run(FeatureBehaviour fb, UnityTile tile) { foreach (var t in _types) { fb.gameObject.AddComponent(t.Type); } }
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(); } } } } }
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); } }
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++; } } }
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); }
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); }
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); }
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); }
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; } }
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); }
public override void Run(FeatureBehaviour fb, UnityTile tile) { fb.gameObject.layer = _layerId; }
public void OnEnable() { _beh = (FeatureBehaviour)target; }
public virtual void Run(FeatureBehaviour fb) { }
public virtual void Run(FeatureBehaviour fb, UnityTile tile) { }
internal void Initialize(FeatureUiMarker marker, FeatureBehaviour fb) { _marker = marker; _feature = fb; }
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); }
/* 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 }
// 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 } } }