public void Update() { Transform dataDisp = transform.Find("DataDisplay"); Vector3 screenPoint = Camera.main.WorldToViewportPoint(transform.position); bool onScreen = screenPoint.z > 0 && screenPoint.x > 0 && screenPoint.x < 1 && screenPoint.y > 0 && screenPoint.y < 1; if (dataDisp && onScreen) { if (showText) { dataDisp.GetComponent <TextMesh>().text = metadata.getTextData(); dataDisp.LookAt(Camera.main.transform); dataDisp.Rotate(new Vector3(0, 180, 0)); } else { dataDisp.GetComponent <TextMesh>().text = ""; return; } } else { return; } }
// Update is called once per frame void Update() { if (map == null) { try { map = GameObject.FindGameObjectWithTag("Map").GetComponent <AbstractMap>(); } catch (System.Exception) { } } if (dataSource != null) { dataFrame = dataSource.DataFrame; } if (dataFrame != null) { tick = dataFrame.tick; if (tick != lastTick) { if (dataFrame.targets.Length > 0) { foreach (gpsData target in dataFrame.targets) { if (target.Type != "Train") { GameObject radarTarget = GameObject.Find("DataManager/" + target.id); if (radarTarget != null) { Vector3 pos = map.GeoToWorldPosition(new Mapbox.Utils.Vector2d(target.Latitude, target.Longitude)); //Debug.Log(map.QueryElevationInMetersAt(new Mapbox.Utils.Vector2d(target.Latitude, target.Longitude))); if (target.Type == "Sat") { pos.y += Mathf.Min((target.Elevation * map.WorldRelativeScale * 1000), 10000f * map.WorldRelativeScale); } else { pos.y += radarTarget.transform.GetChild(0).GetComponent <Renderer>().bounds.size.y + (target.Elevation * map.WorldRelativeScale); } radarTarget.transform.position = pos; radarTarget.transform.rotation = Quaternion.Euler(0, target.TrueTrack, 0); radarTarget.GetComponent <targetHandler>().metadata.copy(target); if (radarTarget.GetComponent <targetHandler>().lostContact) { radarTarget.transform.GetChild(0).GetComponent <MeshRenderer>().material.color = radarTarget.GetComponent <targetHandler>().orgColor; radarTarget.GetComponent <targetHandler>().lostContact = false; } radarTarget.GetComponent <targetHandler>().timeSinceUpdate = tick; if (target.Type == "Aircraft") { //pos = radarTarget.transform.GetChild(0).Find("node_id33 12").GetComponent<Renderer>().bounds.center; pos = radarTarget.transform.GetChild(0).Find("node_id33 12").GetComponent <Renderer>().bounds.center; } radarTarget.GetComponent <LineRenderer>().SetPosition(0, new Vector3(pos.x, pos.y - radarTarget.transform.GetChild(0).GetComponent <Renderer>().bounds.size.y * 2, pos.z)); radarTarget.GetComponent <LineRenderer>().SetPosition(1, new Vector3(pos.x, Mathf.Max(-10, pos.y - (radarTarget.transform.GetChild(0).GetComponent <Renderer>().bounds.size.y + (target.Elevation * map.WorldRelativeScale))), pos.z)); } else { if (insideMap(target.Latitude, target.Longitude) && target.Elevation > -10 && target.Type != "Train") { Vector3 pos = map.GeoToWorldPosition(new Mapbox.Utils.Vector2d(target.Latitude, target.Longitude)); if (target.Type == "Sat") { pos.y += Mathf.Min((target.Elevation * map.WorldRelativeScale * 1000), 10000f * map.WorldRelativeScale); } else { pos.y += (target.Elevation * map.WorldRelativeScale); } try { radarTarget = Instantiate(Resources.Load("HART/Prefabs/" + target.Type, typeof(GameObject)), pos, Quaternion.Euler(0, target.TrueTrack, 0), transform) as GameObject; } catch (System.Exception) { radarTarget = Instantiate(targetPrefab, pos, Quaternion.Euler(0, target.TrueTrack, 0), transform); } radarTarget.GetComponent <targetHandler>().metadata.copy(target); radarTarget.name = target.id; radarTarget.tag = "target"; radarTarget.layer = 9; radarTarget.GetComponent <targetHandler>().timeSinceUpdate = tick; if (target.Type == "Aircraft") { //pos = radarTarget.transform.GetChild(0).Find("node_id33 12").GetComponent<Renderer>().bounds.center; pos = radarTarget.transform.GetChild(0).Find("node_id33 12").GetComponent <Renderer>().bounds.center; } if (radarTarget.GetComponent <LineRenderer>()) { radarTarget.GetComponent <LineRenderer>().positionCount = 2; radarTarget.GetComponent <LineRenderer>().SetPosition(0, new Vector3(pos.x, pos.y - radarTarget.transform.GetChild(0).GetComponent <Renderer>().bounds.size.y * 2, pos.z)); radarTarget.GetComponent <LineRenderer>().SetPosition(1, new Vector3(pos.x, Mathf.Max(-10, pos.y - (radarTarget.transform.GetChild(0).GetComponent <Renderer>().bounds.size.y + (target.Elevation * map.WorldRelativeScale))), pos.z)); radarTarget.GetComponent <LineRenderer>().startWidth = .04f; radarTarget.GetComponent <LineRenderer>().endWidth = 0; } try { Transform dataDisp = radarTarget.transform.Find("DataDisplay"); if (dataDisp.GetComponent <TextMesh>() != null) { gpsData tmp = radarTarget.GetComponent <targetHandler>().metadata; dataDisp.GetComponent <TextMesh>().text = tmp.getTextData(); dataDisp.transform.position += new Vector3(0, dataDisp.GetComponent <TextMesh>().GetComponent <Renderer>().bounds.size.y); dataDisp.LookAt(Camera.main.transform); dataDisp.Rotate(new Vector3(0, 180, 0)); } } catch (Exception) { } } } } else if (target.Type == "Train") { foreach (station sta in target.stops) { GameObject radarTarget = GameObject.Find("DataManager/" + sta.stationId); if (radarTarget != null) { radarTarget.GetComponent <targetHandler>().metadata.stops[0] = sta; radarTarget.GetComponent <targetHandler>().metadata.Latitude = sta.Latitude; radarTarget.GetComponent <targetHandler>().metadata.Longitude = sta.Longitude; radarTarget.GetComponent <targetHandler>().timeSinceUpdate = tick; } else { if (insideMap(sta.Latitude, sta.Longitude)) { Vector3 pos = map.GeoToWorldPosition(new Mapbox.Utils.Vector2d(sta.Latitude, sta.Longitude)); try { radarTarget = Instantiate(Resources.Load("HART/Prefabs/" + target.Type, typeof(GameObject)), pos, Quaternion.Euler(0, target.TrueTrack, 0), transform) as GameObject; } catch (System.Exception) { Debug.LogError("Failed to create train station, something is really broken"); } radarTarget.name = sta.stationId; radarTarget.tag = "target"; radarTarget.layer = 9; radarTarget.GetComponent <targetHandler>().showText = false; radarTarget.GetComponent <targetHandler>().metadata.copy(target); radarTarget.GetComponent <targetHandler>().metadata.stops = new station[1] { sta }; radarTarget.GetComponent <targetHandler>().metadata.id = sta.stationId + ":" + sta.stationName; radarTarget.GetComponent <targetHandler>().metadata.Latitude = sta.Latitude; radarTarget.GetComponent <targetHandler>().metadata.Longitude = sta.Longitude; radarTarget.GetComponent <targetHandler>().timeSinceUpdate = tick; } } } } } } foreach (Transform target in transform) { if (target.GetComponent <targetHandler>().timeSinceUpdate != tick && tick - target.GetComponent <targetHandler>().timeSinceUpdate >= dropTime) { colorKey[0].color = target.GetComponent <targetHandler>().orgColor; g.SetKeys(colorKey, alphaKey); //Debug.Log("Lost contact with: " + target.name + " for " + (tick - target.GetComponent<targetHandler>().timeSinceUpdate) + " ticks"); target.GetComponent <targetHandler>().lostContact = true; target.transform.GetChild(0).GetComponent <MeshRenderer>().material.color = g.Evaluate((tick - target.GetComponent <targetHandler>().timeSinceUpdate) / dropTime); target.transform.GetComponent <targetHandler>().diff = ((float)(tick - target.GetComponent <targetHandler>().timeSinceUpdate)) / dropTime; } if (tick - target.GetComponent <targetHandler>().timeSinceUpdate > dropTime) { //Debug.Log(target.name + " is gone"); target.GetComponent <targetHandler>().removeDelegate(); Destroy(target.gameObject); } } lastTick = tick; } } }