public static void UpdateBuildings() { List <Building> allBuildings = TerrainManager.instance.buildings; data.buildings = new List <SavedBuilding> (); buildingsByPos.Clear(); foreach (Building building in allBuildings) { SavedBuilding savedBuilding = null; if (building is ProductionBuilding) { savedBuilding = new SavedProductionBuilding(building); } else if (building is TeleporterBuilding) { savedBuilding = new SavedTeleporterBuilding(building); } data.buildings.Add(savedBuilding); buildingsByPos.Add(TerrainManager.PosToV2(building.transform.position), savedBuilding); } //builds happen between turns GameManager.instance.SaveGame(); }
/// <summary> /// Saves a Listing for a particular User /// </summary> /// <param name="listingId">listing identifier</param> /// <param name="username">user identifier</param> /// <returns> /// A status with the saved building /// </returns> public Status <SavedBuilding> CreateSavedBuilding(long listingId, string username) { if (listingId == 0) { return(Status.ValidationError <SavedBuilding>(null, "listingId", "listingId is required")); } if (string.IsNullOrWhiteSpace(username)) { return(Status.ValidationError <SavedBuilding>(null, "username", "username is required")); } using (var context = new RentlerContext()) { var user = (from u in context.Users.Include("SavedBuildings") where u.IsDeleted == false && (u.Username == username || u.Email == username) select u).SingleOrDefault(); if (user == null) { return(Status.NotFound <SavedBuilding>()); } // see if user already saved this building so we don't try to // save it again if (user.SavedBuildings.Any(s => s.BuildingId == listingId)) { return(Status.Error <SavedBuilding>("User already saved this building", null)); } SavedBuilding newSave = new SavedBuilding() { BuildingId = listingId, UserId = user.UserId, CreateDateUtc = DateTime.UtcNow, CreatedBy = "ListingAdapter" }; user.SavedBuildings.Add(newSave); try { context.SaveChanges(); InvalidateCache(newSave.BuildingId); newSave.User = null; return(Status.OK <SavedBuilding>(newSave)); } catch (Exception ex) { return(Status.Error <SavedBuilding>( ex.Message, null )); } } }
// Method for serializing a Building instance. public static SavedBuilding CreateSavedBuilding(Building pmusBuildingToSave) { SavedBuilding musSavedBuilding = new SavedBuilding { x = pmusBuildingToSave.ObjectPosition.x, y = pmusBuildingToSave.ObjectPosition.y, z = pmusBuildingToSave.ObjectPosition.z, BuildingType = pmusBuildingToSave.BuildingType, UpgradeLevel = pmusBuildingToSave.UpgradeLevel, Miners = pmusBuildingToSave.BuildingType == Building.BUILDING_TYPE.MATERIAL ? ((MineBuilding)pmusBuildingToSave).Miners : 0 }; return(musSavedBuilding); }
/// <summary> /// Removes a Saved Listing for a particular User /// </summary> /// <param name="listingId">listing identifier</param> /// <param name="username">user identifier</param> /// <returns> /// A status with the saved building /// </returns> public Status <bool> DeleteSavedBuilding(long listingId, string username) { var identity = CustomAuthentication.GetIdentity(); if (!identity.IsAuthenticated) { return(Status.UnAuthorized <bool>()); } if (listingId == 0) { return(Status.ValidationError <bool>(false, "listingId", "listingId is required")); } if (string.IsNullOrWhiteSpace(username)) { return(Status.ValidationError <bool>(false, "username", "username is required")); } using (var context = new RentlerContext()) { try { SavedBuilding save = (from s in context.SavedBuildings where s.BuildingId == listingId && s.UserId == identity.UserId select s).SingleOrDefault(); if (save == null) { return(Status.NotFound <bool>()); } context.SavedBuildings.Remove(save); context.SaveChanges(); InvalidateCache(save.BuildingId); return(Status.OK <bool>(true)); } catch (Exception ex) { return(Status.Error <bool>(ex.Message, false)); } } }
public static Building Instantiate(SavedBuilding e) => new Building { Cell = e.Cell, BuildProgress = e.BuildProgress, type = Definitions.types.First(t => t.name == e.Type) };