public void LoadEvent(Guid eid, EventDetails ev, FloorMapDetails map, bool isChampion) { int mid = ev.MapId; if (!m_MapLayers.ContainsKey(mid)) { m_MapLayers.Add(mid, new MapLayer()); } if (!m_MapEvents.ContainsKey(mid)) { m_MapEvents.Add(mid, new MapLayer()); // we insert instead of add so events always show up under other pushpins m_MapLayers[mid].Children.Insert(0, m_MapEvents[mid]); } if (!m_MapEventPolygons.ContainsKey(mid)) { m_MapEventPolygons.Add(mid, new MapLayer()); // we insert instead of add so events always show up under other pushpins m_MapLayers[mid].Children.Insert(0, m_MapEventPolygons[mid]); } // clean up if (m_EventMapPolygons.ContainsKey(eid)) { m_MapEvents[mid].Children.Remove(m_EventMapPolygons[eid]); m_EventMapPolygons.Remove(eid); } if (m_EventPushpins.ContainsKey(eid)) { m_MapEvents[mid].Children.Remove(m_EventPushpins[eid]); m_EventPushpins.Remove(eid); } Point center = new Point(ArenaNetMap.TranslateX(ev.Location.Center[0], map.MapRect, map.ContinentRect), ArenaNetMap.TranslateZ(ev.Location.Center[1], map.MapRect, map.ContinentRect)); switch (ev.Location.TypeEnum) { case LocationType.Poly: EventMapPolygon evPoly = new EventMapPolygon(ev, isChampion); foreach (List <double> pt in ev.Location.Points) { evPoly.Locations.Add( ArenaNetMap.Unproject( new Point( ArenaNetMap.TranslateX(pt[0], map.MapRect, map.ContinentRect), ArenaNetMap.TranslateZ(pt[1], map.MapRect, map.ContinentRect)), ArenaNetMap.MaxZoomLevel)); } m_EventMapPolygons[eid] = evPoly; // insert so polys are below all pushpins m_MapEventPolygons[mid].Children.Insert(0, evPoly); break; case LocationType.Sphere: case LocationType.Cylinder: EventMapPolygon evCircle = new EventMapPolygon(ev, isChampion); double radius = ArenaNetMap.TranslateX(ev.Location.Center[0] + ev.Location.Radius, map.MapRect, map.ContinentRect) - center.X; for (int i = 0; i < 360; i += 10) { evCircle.Locations.Add( ArenaNetMap.Unproject( new Point( center.X + radius * Math.Cos(i * (Math.PI / 180)), center.Y + radius * Math.Sin(i * (Math.PI / 180))), ArenaNetMap.MaxZoomLevel)); } m_EventMapPolygons[eid] = evCircle; // insert so polys are below all pushpins m_MapEventPolygons[ev.MapId].Children.Insert(0, evCircle); break; default: break; } EventPushpin evPin = new EventPushpin(ev); evPin.Location = ArenaNetMap.Unproject(center, ArenaNetMap.MaxZoomLevel); m_EventPushpins[eid] = evPin; m_MapEvents[ev.MapId].Children.Add(evPin); }
public void LoadEvent(Guid eid, EventDetails ev, FloorMapDetails map, bool isChampion) { int mid = ev.MapId; if (!m_MapLayers.ContainsKey(mid)) { m_MapLayers.Add(mid, new MapLayer()); } if (!m_MapEvents.ContainsKey(mid)) { m_MapEvents.Add(mid, new MapLayer()); // we insert instead of add so events always show up under other pushpins m_MapLayers[mid].Children.Insert(0, m_MapEvents[mid]); } if (!m_MapEventPolygons.ContainsKey(mid)) { m_MapEventPolygons.Add(mid, new MapLayer()); // we insert instead of add so events always show up under other pushpins m_MapLayers[mid].Children.Insert(0, m_MapEventPolygons[mid]); } // clean up if (m_EventMapPolygons.ContainsKey(eid)) { m_MapEvents[mid].Children.Remove(m_EventMapPolygons[eid]); m_EventMapPolygons.Remove(eid); } if (m_EventPushpins.ContainsKey(eid)) { m_MapEvents[mid].Children.Remove(m_EventPushpins[eid]); m_EventPushpins.Remove(eid); } Point center = new Point(ArenaNetMap.TranslateX(ev.Location.Center[0], map.MapRect, map.ContinentRect), ArenaNetMap.TranslateZ(ev.Location.Center[1], map.MapRect, map.ContinentRect)); switch (ev.Location.TypeEnum) { case LocationType.Poly: EventMapPolygon evPoly = new EventMapPolygon(ev, isChampion); foreach (List<double> pt in ev.Location.Points) { evPoly.Locations.Add( ArenaNetMap.Unproject( new Point( ArenaNetMap.TranslateX(pt[0], map.MapRect, map.ContinentRect), ArenaNetMap.TranslateZ(pt[1], map.MapRect, map.ContinentRect)), ArenaNetMap.MaxZoomLevel)); } m_EventMapPolygons[eid] = evPoly; // insert so polys are below all pushpins m_MapEventPolygons[mid].Children.Insert(0, evPoly); break; case LocationType.Sphere: case LocationType.Cylinder: EventMapPolygon evCircle = new EventMapPolygon(ev, isChampion); double radius = ArenaNetMap.TranslateX(ev.Location.Center[0] + ev.Location.Radius, map.MapRect, map.ContinentRect) - center.X; for (int i = 0; i < 360; i += 10) { evCircle.Locations.Add( ArenaNetMap.Unproject( new Point( center.X + radius * Math.Cos(i * (Math.PI / 180)), center.Y + radius * Math.Sin(i * (Math.PI / 180))), ArenaNetMap.MaxZoomLevel)); } m_EventMapPolygons[eid] = evCircle; // insert so polys are below all pushpins m_MapEventPolygons[ev.MapId].Children.Insert(0, evCircle); break; default: break; } EventPushpin evPin = new EventPushpin(ev); evPin.Location = ArenaNetMap.Unproject(center, ArenaNetMap.MaxZoomLevel); m_EventPushpins[eid] = evPin; m_MapEvents[ev.MapId].Children.Add(evPin); }