//searches chunks and loads location data into the locationData list //only searches for locations added using the SetMapData function public IEnumerator LocationsForChunks(string chunkName, int chunkID, Queue <WorldMapLocation> locationData, List <MapMarker> activeMapMarkers) { //Debug.Log ("WorldMap: LocationsForChunks"); List <MobileReference> locationList = null; if (!mRevealableToShow.TryGetValue(chunkName, out locationList)) { //Debug.Log ("WorldMap: We have no locations for this chunk from SetMapData, returning immediately"); yield break; } Vector3 chunkPosition; //add markers for (int i = 0; i < activeMapMarkers.Count; i++) { if (activeMapMarkers [i].ChunkID == chunkID) { chunkPosition = activeMapMarkers [i].ChunkPosition; WorldMapLocation wml = new WorldMapLocation( null, 1, "Marker", string.Empty, string.Empty, true, false, "MapIconMapMarker", Color.white, MapIconStyle.Medium, MapLabelStyle.None, Vector3.zero, chunkPosition, false, false, LocationTypesToDisplay); locationData.Enqueue(wml); } } MobileReference currentLocation = null; for (int i = 0; i < locationList.Count; i++) { if (!LoadData) { //Debug.Log ("WorldMap: Load data is false, returning"); yield break; } currentLocation = locationList [i]; StackItem stackItem = null; if (WIGroups.LoadStackItem(currentLocation, out stackItem)) { chunkPosition = stackItem.ChunkPosition; //Debug.Log ("WorldMap: found stack item " + stackItem.DisplayName); //next we need to get the location state from the stack item LocationState ls = null; RevealableState rs = null; VisitableState vs = null; bool isNewLocation = false; bool isMarked = false; if (NewLocations.Count > 0) { for (int j = NewLocations.LastIndex(); j >= 0; j--) { if (NewLocations [j] == currentLocation) { NewLocations.RemoveAt(j); isNewLocation = true; break; } } } //Debug.Log ("current location " + currentLocation.FullPath + " is marked? " + isMarked.ToString ( )); isMarked = MarkedLocations.Contains(currentLocation); if (stackItem.GetStateData <RevealableState> (out rs)) { stackItem.GetStateData <LocationState> (out ls); stackItem.GetStateData <VisitableState> (out vs); //now convert it into a world map location WorldMapLocation wml = null; if (rs.CustomMapSettings || ls == null) { //non-custom settings come from the location //so we can only use custom settings if ls is not null //Debug.Log ("Custom settings for revealable with " + rs.IconName + " icon name"); wml = new WorldMapLocation( currentLocation, stackItem.Props.Local.ActiveRadius, ls != null ? ls.Name.CommonName : string.Empty, ls != null ? ls.Name.ProperName : string.Empty, ls != null ? ls.Name.NickName : string.Empty, vs != null ? vs.HasBeenVisited : true, rs.MarkedForTriangulation, rs.IconName, rs.IconColor, rs.IconStyle, rs.LabelStyle, rs.IconOffset, chunkPosition, isNewLocation, isMarked, LocationTypesToDisplay); locationData.Enqueue(wml); } else { string iconName = "Outpost"; MapIconStyle iconStyle = MapIconStyle.None; MapLabelStyle labelStyle = MapLabelStyle.None; Color32 iconColor = Color.gray; Vector3 iconOffset = Vector3.zero; GetIconProperties(stackItem, ls, rs, vs, ref iconName, ref iconStyle, ref labelStyle, ref iconColor, ref iconOffset); wml = new WorldMapLocation( currentLocation, stackItem.Props.Local.ActiveRadius, ls != null ? ls.Name.CommonName : string.Empty, ls != null ? ls.Name.ProperName : string.Empty, ls != null ? ls.Name.NickName : string.Empty, vs != null ? vs.HasBeenVisited : true, rs.MarkedForTriangulation, iconName, iconColor, iconStyle, labelStyle, iconOffset, chunkPosition, isNewLocation, isMarked, LocationTypesToDisplay); locationData.Enqueue(wml); } } else { //Debug.Log ("Didn't get revealable state data in " + currentLocation.FileName); } } else { //Debug.Log ("Didin't get stack item for location " + currentLocation.FullPath); } //clear the stack item, we don't need it any more if (stackItem != null) { stackItem.Clear(); } yield return(null); } locationList.Clear(); yield break; }
public static string GetIconProperties( StackItem stackitem, LocationState ls, RevealableState rs, VisitableState vs, ref string iconName, ref MapIconStyle iconStyle, ref MapLabelStyle labelStyle, ref Color32 iconColor, ref Vector3 iconOffset) { iconName = "MapIconOutpost"; iconStyle = MapIconStyle.Small; labelStyle = MapLabelStyle.None; iconColor = Color.grey; bool checkShingleState = false; bool checkStructureState = false; switch (ls.Type) { case "City": if (stackitem.Props.Local.ActiveRadius > Globals.CityMinimumRadius) { iconName = "MapIconCity"; iconStyle = MapIconStyle.Large; labelStyle = MapLabelStyle.MouseOver; } else if (stackitem.Props.Local.ActiveRadius > Globals.TownMinimumRadius) { iconStyle = MapIconStyle.Medium; iconName = "MapIconTown"; labelStyle = MapLabelStyle.MouseOver; } else { iconName = "MapIconOutpost"; iconStyle = MapIconStyle.Small; labelStyle = MapLabelStyle.MouseOver; } break; case "CapitalCity": iconName = "MapIconCapitalCity"; iconStyle = MapIconStyle.AlwaysVisible; labelStyle = MapLabelStyle.AlwaysVisible; break; case "Woods": iconName = "MapIconWoods"; iconStyle = MapIconStyle.Large; labelStyle = MapLabelStyle.MouseOver; break; case "Den": iconName = "MapIconAnimalDen"; iconStyle = MapIconStyle.Medium; labelStyle = MapLabelStyle.MouseOver; break; case "CrossRoads": iconName = "MapIconCrossRoads"; iconStyle = MapIconStyle.AlwaysVisible; labelStyle = MapLabelStyle.MouseOver; break; case "WayStone": iconName = "MapIconWayStone"; iconStyle = MapIconStyle.Small; labelStyle = MapLabelStyle.MouseOver; break; case "Shingle": case "Residence": iconName = "MapIconStructure"; iconStyle = MapIconStyle.Small; labelStyle = MapLabelStyle.MouseOver; checkShingleState = true; checkStructureState = true; break; case "Shop": iconName = "MapIconShop"; iconStyle = MapIconStyle.Small; labelStyle = MapLabelStyle.MouseOver; checkShingleState = true; checkStructureState = true; break; case "Tavern": case "Bar": iconName = "MapIconTavern"; iconStyle = MapIconStyle.Small; labelStyle = MapLabelStyle.MouseOver; checkShingleState = true; checkStructureState = true; break; case "Inn": iconName = "MapIconInn"; iconStyle = MapIconStyle.Small; labelStyle = MapLabelStyle.MouseOver; checkShingleState = true; checkStructureState = true; break; case "Landmark": iconName = "MapIconLandmark"; iconStyle = MapIconStyle.AlwaysVisible; labelStyle = MapLabelStyle.MouseOver; break; case "HouseOfHealing": iconName = "MapIconHouseOfHealing"; iconStyle = MapIconStyle.Large; labelStyle = MapLabelStyle.MouseOver; break; case "Gateway": iconName = "MapIconGateway"; iconStyle = MapIconStyle.Large; labelStyle = MapLabelStyle.MouseOver; break; case "Cemetary": iconName = "MapIconCemetary"; iconStyle = MapIconStyle.Medium; labelStyle = MapLabelStyle.MouseOver; break; case "Dungeon": iconName = "MapIconCave"; iconStyle = MapIconStyle.Medium; labelStyle = MapLabelStyle.MouseOver; break; case "Campsite": iconName = "MapIconCampsite"; iconStyle = MapIconStyle.Medium; labelStyle = MapLabelStyle.MouseOver; break; case "District": case "CrossStreet": default: iconStyle = MapIconStyle.None; labelStyle = MapLabelStyle.Descriptive; break; } if (checkStructureState) { StructureState ss = null; if (stackitem.GetStateData <StructureState> (out ss)) { iconOffset.x = -ss.PrimaryBuilderOffset.Position.x; iconOffset.y = -ss.PrimaryBuilderOffset.Position.z; checkShingleState = true; } } if (checkShingleState) { ShingleState sh = null; if (stackitem.GetStateData <ShingleState> (out sh)) { switch (sh.PropertyStatus) { case PropertyStatusType.OwnedByPlayer: labelStyle = MapLabelStyle.AlwaysVisible; iconColor = Colors.Get.MessageSuccessColor; break; case PropertyStatusType.ForSale: iconColor = Colors.Get.MessageInfoColor; break; case PropertyStatusType.Destroyed: iconColor = Colors.Get.MessageDangerColor; break; case PropertyStatusType.Abandoned: iconColor = Colors.Get.MessageWarningColor; break; default: break; } } } if (rs.UnknownUntilVisited) { if (vs == null || vs.NumTimesVisited <= 0) { iconName = "MapIconUnknown"; } } return(iconName); }