// Handles update for normal pins private void PinUpdate(long thisTick) { if (thisTick > m_pinLastTick + m_pinTick) { int thisCount = 0; Vector2 pos = OnlineMapsLocationService.instance.position; for (int i = 0 + m_lastPlace; i < PinUtilities.PointDatas.Count && thisCount < pinsPerUpdate; ++i, ++m_lastPlace, ++thisCount) { int index = i; if (PinUtilities.PointDatas[index]._Pin.enabled == true && !PinUtilities.PointDatas[index].DeltasActiveNow((long)thisTick, PinUtilities.pinDeltas[PinUtilities.PointDatas[index]._Label]) && !PinUtilities.PointDatas[index].ActiveNow()) { PinUtilities.PointDatas[index].RemovePin(); continue; } else if (PinUtilities.PointDatas[index]._Pin.enabled == false && PinUtilities.PointDatas[index].DeltasActiveNow((long)thisTick, PinUtilities.pinDeltas[PinUtilities.PointDatas[index]._Label]) && PinUtilities.PointDatas[index].ActiveNow()) { AddPin(PinUtilities.PointDatas[index]); continue; } double pinDist = PinUtilities.DistanceInMeters(pos.y, pos.x, PinUtilities.PointDatas[index]._Position.Latitude, PinUtilities.PointDatas[index]._Position.Longitude); if (PinUtilities.PointDatas[index]._Pin.texture.name != PinUtilities.PointDatas[index]._Icon.name && (PinUtilities.PointDatas[index]._Pin.enabled == false || !PinUtilities.PointDatas[index].DeltasActiveNow((long)thisTick, PinUtilities.pinDeltas[PinUtilities.PointDatas[index]._Label]) || !PinUtilities.PointDatas[index].ActiveNow() || pinDist > pinRadius)) { PinUtilities.PointDatas[index]._Pin.texture = PinUtilities.PointDatas[index]._Icon; PinUtilities.PointDatas[index]._Pin.Init(); OnlineMaps.instance.Redraw(); continue; } else if (PinUtilities.PointDatas[index]._Pin.texture.name != PinUtilities.PointDatas[index]._ActiveIcon.name && PinUtilities.PointDatas[index]._Pin.enabled == true && PinUtilities.PointDatas[index].DeltasActiveNow((long)thisTick, PinUtilities.pinDeltas[PinUtilities.PointDatas[index]._Label]) && PinUtilities.PointDatas[index].ActiveNow() && pinDist < pinRadius) { PinUtilities.PointDatas[index]._Pin.texture = PinUtilities.PointDatas[index]._ActiveIcon; PinUtilities.PointDatas[index]._Pin.Init(); OnlineMaps.instance.Redraw(); continue; } if (m_lastPlace >= PinUtilities.PointDatas.Count - 1) { m_lastPlace = 0; } } m_pinLastTick = (long)thisTick; } }
// Handles update for token pins private void TokenPinUpdate(long thisTick) { if (thisTick > m_TokenLastPlace + m_pinTick) { int thisCount = 0; Vector2 pos = OnlineMapsLocationService.instance.position; for (int i = 0 + m_TokenLastPlace; i < PinUtilities.TokenPointDatas.Count && thisCount < pinsPerUpdate; ++i, ++m_TokenLastPlace, ++thisCount) { int index = i; double pinDist = PinUtilities.DistanceInMeters(pos.y, pos.x, PinUtilities.TokenPointDatas[index]._Position.Latitude, PinUtilities.TokenPointDatas[index]._Position.Longitude); string key = PinUtilities.TokenPointDatas[index]._Position.Latitude.ToString() + PinUtilities.TokenPointDatas[index]._Position.Longitude.ToString(); if (PinUtilities.TokenPointDatas[index]._Pin.enabled == false && PinUtilities.TokenPointDatas[index].TokenDeltasActiveNow((long)thisTick, PinUtilities.tokenPinDeltas[key]) && PinUtilities.TokenPointDatas[index].ActiveNow()) { AddTokenPin(PinUtilities.TokenPointDatas[index]); continue; } else if (pinDist < pinRadius && PinUtilities.TokenPointDatas[index]._Pin.enabled == true && PinUtilities.TokenPointDatas[index].TokenDeltasActiveNow((long)thisTick, PinUtilities.tokenPinDeltas[key]) && PinUtilities.TokenPointDatas[index].ActiveNow()) { if (PinUtilities.TokenPointDatas[index]._Pin.texture.name != PinUtilities.TokenPointDatas[index]._ActiveIcon.name) { PinUtilities.TokenPointDatas[index]._Pin.texture = PinUtilities.TokenPointDatas[index]._ActiveIcon; PinUtilities.TokenPointDatas[index]._Pin.Init(); OnlineMaps.instance.Redraw(); } continue; } else if (pinDist > pinRadius && PinUtilities.TokenPointDatas[index]._Pin.enabled == true && PinUtilities.TokenPointDatas[index].TokenDeltasActiveNow((long)thisTick, PinUtilities.tokenPinDeltas[key]) && PinUtilities.TokenPointDatas[index].ActiveNow()) { if (PinUtilities.TokenPointDatas[index]._Pin.texture.name != PinUtilities.TokenPointDatas[index]._Icon.name) { PinUtilities.TokenPointDatas[index]._Pin.texture = PinUtilities.TokenPointDatas[index]._Icon; PinUtilities.TokenPointDatas[index]._Pin.Init(); OnlineMaps.instance.Redraw(); } continue; } } if (m_TokenLastPlace >= PinUtilities.TokenPointDatas.Count - 1) { m_TokenLastPlace = 0; } } m_tokenPinLastTick = (long)thisTick; }
/// <summary> Handles when a pin is clicked </summary> public void Pin_Click(OnlineMapsMarkerBase marker) { try { Vector2 pos = OnlineMapsLocationService.instance.position; Vector2 markerPos = marker.position; double pinDist = PinUtilities.DistanceInMeters(pos.y, pos.x, markerPos.y, markerPos.x); if (pinDist < pinRadius) { PointData pd = PinUtilities.GetPointData(marker.tags, PinUtilities.PointDatas); if (PinUtilities.GetTypeFromTag(marker.tags) != "Tokens") { UserUtilities.AllocatePoints(pd._Value); UIManager.Instance.IndicateScore(pd._Value, true); SoundManager.Instance.PlaySound("CoinCollect"); long now = (long)(DateTime.UtcNow - epochStart).TotalMilliseconds; PinUtilities.pinDeltas[marker.label] = now; pd.RemovePin(); PinUtilities.SavePins(); UserUtilities.Save(); Organizations pinOrg = (Organizations)Enum.Parse(typeof(Organizations), pd._Type.ToString()); if (MinigamePinUnlock.Contains(pinOrg) && MiniGameEnabledOrgs.Contains(pinOrg)) { Unlock(pinOrg); } if (TriviaEnabledOrgs.Contains(pinOrg)) { TriviaGame.CheckForTrivia(marker.label); } return; } else { pd = PinUtilities.GetPointData(marker.tags, PinUtilities.TokenPointDatas); TokenPinActivate(pd, pd._Position.Latitude.ToString() + pd._Position.Longitude.ToString()); } } } catch (Exception e) { Debug.Log("ERROR: " + e.Message); } }