public SitelinkMarker placeSitelinkMarker(SitelinkPair sitelinkPair, Dictionary <SiteId, SiteMarker> siteMarkers) { SitelinkReporting sitelink0 = sitelinkPair.pair[0]; SiteMarker fromSite = siteMarkers[sitelink0.local_site]; SiteMarker toSite = siteMarkers[sitelink0.remote_site]; Debug.Log($"Drawing sitelink from {fromSite.site.name} to {toSite.site.name}"); GameObject sitelinkMarkerObject = Instantiate(sitelinkMarkerPrefab, Vector3.zero, Quaternion.identity, transform); SitelinkMarker sitelinkMarker = sitelinkMarkerObject.GetComponent <SitelinkMarker>(); sitelinkMarker.Set(fromSite, toSite, sitelinkPair, transform.position, globeRadius * 1.03f); return(sitelinkMarker); }
public IPromise <List <SitelinkPair> > GetSitelinkPairs(bool forceRefresh) { if (forceRefresh || _sitelinkPairsPromise == null) { _sitelinkPairsPromise = _sitesPromise .ThenAll(sites => sites.Select(site => _steelConnect.GetSitelinks(site.id))) .Then(sitelinks => { List <SitelinkPair> sitelinkPairs = new List <SitelinkPair>(); foreach (SitelinkReportingItems sitelinkContainer in sitelinks) { foreach (SitelinkReporting sitelink in sitelinkContainer.items) { // Check if there is a matching sitelink already. // This is somewhat inefficient, but I couldn't think of a better way at the time I wrote this. SitelinkPair matchedPair = sitelinkPairs.Find(sitelinkPair => sitelinkPair.pair.Count == 1 && sitelinkPair.pair[0].remote_site == sitelink.local_site && sitelinkPair.pair[0].local_site == sitelink.remote_site); if (matchedPair != null) { // Complete this pair. matchedPair.pair.Add(sitelink); } else { // New pair! SitelinkPair newPair = new SitelinkPair(); newPair.pair.Add(sitelink); sitelinkPairs.Add(newPair); } } } _sitelinkPairs = sitelinkPairs; return(sitelinkPairs); }); } return(_sitelinkPairsPromise); }
public void Set(SiteMarker fromSiteMarker, SiteMarker toSiteMarker, SitelinkPair sitelinkPair, Vector3 globePosition, float globeRadius = 0.0f) { this.fromSiteMarker = fromSiteMarker; this.toSiteMarker = toSiteMarker; this.sitelinkPair = sitelinkPair; _stateManager = GameObject.Find("State Manager").GetComponent <StateManager>(); _lineRenderer = GetComponent <LineRenderer>(); // TODO: Get these values in a better way, eg. link the globe object here with a public member variable. this._globePosition = globePosition; this._globeRadius = globeRadius; // --- SitelinkReporting sitelink0 = sitelinkPair.pair[0]; _lineColor = Color.green; _lineWidth = 0.1f; _blinkPeriodSeconds = 0.0f; if (sitelink0.state == "up") { _lineColor = Color.green; _lineWidth = 0.05f + sitelink0.throughput_out * 0.01f; } else { _lineColor = Color.red; _blinkPeriodSeconds = 2.0f; } // --- Draw(); UpdateCollider(); UpdateInformation(); }