/// <summary> /// Gives the Forecast Service-friendly name for /// this parameter. /// </summary> /// <param name="self"> /// The parameter to convert. /// </param> /// <returns> /// The service-friendly <see cref="string"/>. /// </returns> /// <exception cref="ArgumentOutOfRangeException"> /// Thrown when the parameter does not have a corresponding /// friendly name. /// </exception> public static string ToValue(this DSUnit self) { switch (self) { case DSUnit.US: return("us"); case DSUnit.SI: return("si"); case DSUnit.CA: return("ca"); case DSUnit.UK: return("uk"); case DSUnit.UK2: return("uk2"); case DSUnit.Auto: return("auto"); default: throw new ArgumentOutOfRangeException(); } }
/// <summary> /// The most general method to retrieve the observed (in the past) or forecasted (in the future) hour-by-hour weather and daily weather /// conditions for a particular date. A Time Machine request is identical in structure to a Forecast Request, except: /// * The 'currently' data point will refer to the time provided, rather than the current time. /// * The 'minutely' data block will be omitted, unless you are requesting a time within an hour of the present. /// * The 'hourly data block will contain data points starting at midnight (local time) of the day requested, and continuing /// until midnight (local time) of the following day. /// * The 'daily' data block will contain a single data point referring to the requested date. /// * The 'alerts' data block will be omitted. /// </summary> /// <param name="latitude">The latitude to retrieve data for.</param> /// <param name="longitude">The longitude to retrieve data for.</param> /// <param name="date">Requested date</param> /// <param name="excludes">Any blocks that should be excluded from the request.</param> /// <param name="extends">The type of forecast to retrieve extended results for. Currently limited to hourly blocks.</param> /// <param name="unit">Default <see cref="DSUnit.Auto"/></param> /// <param name="language">Default <see cref="Language.English"/></param> /// <returns>A <see cref="Task"/> for a <see cref="Forecast"/> with the requested data, or null if the data was corrupted.</returns> /// <exception cref="System.Net.Http.HttpRequestException">Thrown when the service returned anything other than a 200 (Status OK) code.</exception> public Task <Forecast> GetWeatherByDate( double latitude, double longitude, DateTimeOffset date, IList <Extend> extends, IList <Exclude> excludes, DSUnit unit = DSUnit.Auto, Language language = Language.English) { ThrowExceptionIfApiKeyInvalid(); var unitValue = unit.ToValue(); var extendList = (extends != null) ? string.Join(",", extends.Select(x => x.ToValue())) : string.Empty; var excludeList = (excludes != null) ? string.Join(",", excludes.Select(x => x.ToValue())) : string.Empty; var languageValue = language.ToValue(); var unixTime = date.ToUnixTime(); var requestUrl = string.Format( CultureInfo.InvariantCulture, SpecificTimeConditionsUrl, _apiKey, latitude, longitude, unixTime, unitValue, extendList, excludeList, languageValue); return(GetForecastFromUrlAsync(requestUrl)); }
/// <summary> /// Returns the current weather conditions, included an hour-by-hour forecast for the next 48 hours and possible alerts /// </summary> /// <param name="latitude">The latitude to retrieve data for.</param> /// <param name="longitude">The longitude to retrieve data for.</param> /// <param name="unit">Default is <see cref="DSUnit.Auto"/></param> /// <param name="language">Default is <see cref="Language.English"/></param> /// <returns>A <see cref="Forecast"/> with the requested data, or null if the data was corrupted.</returns> /// <exception cref="System.Net.Http.HttpRequestException">Thrown when the service returned anything other than a 200 (Status OK) code.</exception> public Task <Forecast> GetCurrentWeather( double latitude, double longitude, DSUnit unit = DSUnit.Auto, Language language = Language.English) { return(GetWeather(latitude, longitude, new Extend[0], new Exclude[] { /*Exclude.Daily, */ Exclude.Minutely }, // I don't exclude the daily as Daily[0] has additional info on the current day unit, language)); }
/// <summary> /// Returns the current weather conditions, included an hour-by-hour forecast for the next 48 hours, the daily forecast for the next 7 days and possible alerts /// </summary> /// <param name="latitude">The latitude to retrieve data for.</param> /// <param name="longitude">The longitude to retrieve data for.</param> /// <param name="unit">Default is <see cref="DSUnit.Auto"/></param> /// <param name="language">Default is <see cref="Language.English"/></param> /// <returns>A <see cref="Forecast"/> with the requested data, or null if the data was corrupted.</returns> /// <exception cref="System.Net.Http.HttpRequestException">Thrown when the service returned anything other than a 200 (Status OK) code.</exception> public Task <Forecast> GetForecast( double latitude, double longitude, DSUnit unit = DSUnit.Auto, Language language = Language.English) { return(GetWeather(latitude, longitude, new Extend[0], new Exclude[] { Exclude.Minutely }, unit, language)); }
/// <summary> /// Retrieve the observed (in the past) or forecasted (in the future) hour-by-hour weather and daily weather /// conditions for a particular date. A Time Machine request is identical in structure to a Forecast Request, except: /// * The 'currently' data point will refer to the time provided, rather than the current time. /// * The 'minutely' data block will be omitted, unless you are requesting a time within an hour of the present. /// * The 'hourly data block will contain data points starting at midnight (local time) of the day requested, and continuing /// until midnight (local time) of the following day. /// * The 'daily' data block will contain a single data point referring to the requested date. /// * The 'alerts' data block will be omitted. /// </summary> /// <param name="latitude">The latitude to retrieve data for.</param> /// <param name="longitude">The longitude to retrieve data for.</param> /// <param name="date">Requested date</param> /// <param name="unit">Default <see cref="DSUnit.Auto"/></param> /// <param name="language">Default <see cref="Language.English"/></param> /// <returns>A <see cref="Task"/> for a <see cref="Forecast"/> with the requested data, or null if the data was corrupted.</returns> /// <exception cref="System.Net.Http.HttpRequestException">Thrown when the service returned anything other than a 200 (Status OK) code.</exception> public Task <Forecast> GetWeatherByDate( double latitude, double longitude, DateTimeOffset date, DSUnit unit = DSUnit.Auto, Language language = Language.English) { return (GetWeatherByDate( latitude, longitude, date, null, null, unit, language)); }
/// <summary> /// Retrieve the observed (in the past) or forecasted (in the future) hour-by-hour weather and daily weather /// conditions for a particular date. A Time Machine request is identical in structure to a Forecast Request, except: /// * The 'currently' data point will refer to the time provided, rather than the current time. /// * The 'minutely' data block will be omitted, unless you are requesting a time within an hour of the present. /// * The 'hourly data block will contain data points starting at midnight (local time) of the day requested, and continuing /// until midnight (local time) of the following day. /// * The 'daily' data block will contain a single data point referring to the requested date. /// * The 'alerts' data block will be omitted. /// </summary> /// <param name="latitude">The latitude to retrieve data for.</param> /// <param name="longitude">The longitude to retrieve data for.</param> /// <param name="date">Requested date</param> /// <param name="excludes">Any blocks that should be excluded from the request.</param> /// <param name="unit">Default <see cref="DSUnit.Auto"/></param> /// <param name="language">Default <see cref="Language.English"/></param> /// <returns>A <see cref="Task"/> for a <see cref="Forecast"/> with the requested data, or null if the data was corrupted.</returns> public Task <Forecast> GetWeatherByDate( double latitude, double longitude, DateTime date, IList <Exclude> excludes, DSUnit unit = DSUnit.Auto, Language language = Language.English) { return (GetWeatherByDate( latitude, longitude, date, null, excludes, unit, language)); }
public static DbBreakpoint GenBreakpoint(DSPlayer pl, int bp, string bpstring) { DbBreakpoint Bp = new DbBreakpoint(); Bp.Player = pl; Bp.Gas = pl.Refineries.Where(x => x.Gameloop > 0 && x.Gameloop <= bp).Count(); Bp.Income = (int)pl.Stats.Where(x => x.Gameloop <= bp).Sum(s => s.MineralsCollectionRate / 9.15); DbStats statlast = null; foreach (DbStats stat in pl.Stats) { if (stat.Gameloop > bp) { break; } statlast = stat; } if (statlast != null) { Bp.Army = statlast.Army; Bp.Kills = statlast.MineralsKilledArmy; Bp.Upgrades = statlast.MineralsUsedCurrentTechnology; } List <DbUnit> dbUnits = null; foreach (var ent in pl.Spawns) { if (ent.Gameloop > bp) { break; } dbUnits = ent.Units.ToList(); } Bp.Units = new List <DSUnit>(); Bp.DbUnits = new List <DbUnit>(); if (dbUnits != null) { foreach (DbUnit unit in dbUnits) { DSUnit dsUnit = Bp.Units.FirstOrDefault(s => s.Name == unit.Name); if (dsUnit == null) { DSUnit newdsUnit = new DSUnit(); newdsUnit.Name = unit.Name; newdsUnit.BP = bpstring; newdsUnit.Breakpoint = Bp; newdsUnit.Count = 1; newdsUnit.DSPlayer = pl; Bp.Units.Add(newdsUnit); } else { dsUnit.Count++; } unit.Breakpoint = Bp; Bp.DbUnits.Add(unit); } } Bp.DbUpgrades = new List <DbUpgrade>(); foreach (DbUpgrade upgrade in pl.Upgrades.Where(x => x.Breakpoint == null && x.Gameloop < bp)) { upgrade.Breakpoint = Bp; Bp.DbUpgrades.Add(upgrade); } string dsUnitsString = ""; string dbUnitsString = ""; string dbUpgradesString = ""; foreach (DSUnit unit in Bp.Units) { string name = unit.Name; UnitModelBase bunit = DSdata.Units.FirstOrDefault(s => s.Race == pl.RACE && s.Name == unit.Name); if (bunit != null) { name = bunit.ID.ToString(); } dsUnitsString += name + "," + unit.Count + "|"; } if (dsUnitsString.Any()) { dsUnitsString = dsUnitsString.Remove(dsUnitsString.Length - 1); } foreach (DbUnit unit in Bp.DbUnits) { string name = unit.Name; UnitModelBase bunit = DSdata.Units.FirstOrDefault(s => s.Race == pl.RACE && s.Name == unit.Name); if (bunit != null) { name = bunit.ID.ToString(); } dbUnitsString += name + "," + unit.BornX + "," + unit.BornY + "|"; } if (dbUnitsString.Any()) { dbUnitsString = dbUnitsString.Remove(dbUnitsString.Length - 1); } foreach (DbUpgrade upgrade in Bp.DbUpgrades) { dbUpgradesString += upgrade.Upgrade + "|"; } if (dbUpgradesString.Any()) { dbUpgradesString = dbUpgradesString.Remove(dbUpgradesString.Length - 1); } Bp.dsUnitsString = dsUnitsString; Bp.dbUnitsString = dbUnitsString; Bp.dbUpgradesString = dbUpgradesString; return(Bp); }
public static DbBreakpoint GenBreakpoint(DSPlayer pl, int bp, string bpstring) { DbBreakpoint Bp = new DbBreakpoint(); Bp.Player = pl; Bp.Gas = pl.Refineries.Where(x => x.Gameloop > 0 && x.Gameloop <= bp).Count(); Bp.Income = (int)pl.Stats.Where(x => x.Gameloop <= bp).Sum(s => s.MineralsCollectionRate / 9.15); DbStats statlast = pl.Stats.Where(x => x.Gameloop <= bp).LastOrDefault(); if (statlast != null) { Bp.Army = statlast.Army; Bp.Kills = statlast.MineralsKilledArmy; Bp.Upgrades = statlast.MineralsUsedCurrentTechnology; } List <DbUnit> dbUnits = null; var spawnlast = pl.Spawns.Where(x => x.Gameloop <= bp).LastOrDefault(); if (spawnlast != null) { dbUnits = spawnlast.Units.ToList(); } Bp.Units = new List <DSUnit>(); Bp.DbUnits = new List <DbUnit>(); if (dbUnits != null) { foreach (DbUnit unit in dbUnits) { DSUnit dsUnit = Bp.Units.FirstOrDefault(s => s.Name == unit.Name); if (dsUnit == null) { Bp.Units.Add(new DSUnit() { Name = unit.Name, BP = bpstring, Breakpoint = Bp, Count = 1, DSPlayer = pl }); } else { dsUnit.Count++; } unit.Breakpoint = Bp; Bp.DbUnits.Add(unit); } } Bp.DbUpgrades = new List <DbUpgrade>(); foreach (DbUpgrade upgrade in pl.Upgrades.Where(x => x.Breakpoint == null && x.Gameloop < bp)) { upgrade.Breakpoint = Bp; Bp.DbUpgrades.Add(upgrade); } string dsUnitsString = ""; string dbUnitsString = ""; string dbUpgradesString = ""; foreach (DSUnit unit in Bp.Units) { string name = unit.Name; int id = NameService.GetUnitId(null, unit.Name); if (id >= 0) { name = id.ToString(); } dsUnitsString += name + "," + unit.Count + "|"; } if (dsUnitsString.Any()) { dsUnitsString = dsUnitsString.Remove(dsUnitsString.Length - 1); } foreach (DbUnit unit in Bp.DbUnits) { string name = unit.Name; int id = NameService.GetUnitId(null, unit.Name); if (id >= 0) { name = id.ToString(); } dbUnitsString += name + "," + unit.BornX + "," + unit.BornY + "|"; } if (dbUnitsString.Any()) { dbUnitsString = dbUnitsString.Remove(dbUnitsString.Length - 1); } foreach (DbUpgrade upgrade in Bp.DbUpgrades) { dbUpgradesString += upgrade.Upgrade + "|"; } if (dbUpgradesString.Any()) { dbUpgradesString = dbUpgradesString.Remove(dbUpgradesString.Length - 1); } Bp.dsUnitsString = dsUnitsString; Bp.dbUnitsString = dbUnitsString; Bp.dbUpgradesString = dbUpgradesString; return(Bp); }