static internal string GetAirlineData(Airline airline = null) { AirportStatUtils.AirportStatsLogger(Log.FromPool($"airlinename: {airline?.name ?? "null"}").WithCodepoint()); string day = i18n.Get("TBFlash.AirportStats.utils.day"); StatLoader.UpdateAirlineData(); string str = airline == null?AirportStatUtils.PageHead(AirportStatUtils.PageTitles.AirportStats, true) : AirportStatUtils.PageHead(airline, -1); str += "<table>\n<tr>\n<th></th>"; str += airline == null ? "<th>" + i18n.Get("TBFlash.AirportStats.utils.lifetime") + "</th>" : string.Empty; for (int i = GameTimer.Day; i >= StatLoader.FirstDay; i--) { str += airline == null ? $"<th><a href=\"Daily Stats?Day={i}\">{day} {i}</a></th>" : $"<th><a href=\"/{airline.name}?Day={i}\">{day} {i}</a></th>"; } str += "</tr>\n"; str += (airline == null ? StatLoader.airportData.ForTable(new PrintOptions { FirstDay = StatLoader.FirstDay, LastDay = GameTimer.Day, IncludeLifetime = true }) : StatLoader.airlineData.ForTable(new PrintOptions { FirstDay = StatLoader.FirstDay, LastDay = GameTimer.Day, AirlineName = airline.name, IncludeLifetime = false })); str += "</table>" + AirportStatUtils.PageFooter(); return(str); }
static internal void Init() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); FirstDay = GameTimer.Day > 30 ? GameTimer.Day - 29 : 1; LastDay = FirstDay + 1; LastFlightLoad = FirstDay + 1; }
private void LoadDictionary(int day) { if (!minValues.ContainsKey(day)) { float minValue = 100; float maxValue = 0; int minKey = 0; int maxKey = 0; float value; int startTime = GameTimer.MidnightForDay(day); AirportStatUtils.AirportStatsLogger(Log.FromPool($"Day: {day}; start{startTime}; end{startTime + 1440}").WithCodepoint()); for (int i = startTime; i < (startTime + 1440); i++) { value = fuelController.GetMarketPriceAtTime(i); if (value < minValue) { minValue = value; minKey = i; } if (value > maxValue) { maxValue = value; maxKey = i; } } minValues[day] = new KeyValuePair <int, float>(minKey, minValue); maxValues[day] = new KeyValuePair <int, float>(maxKey, maxValue); } }
internal void LoadAircraft(AircraftConfig ac) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); aircraftName.AddStat(new StringStat(ac.DisplayName)); nFlights.AddStat(new IntStat(Game.current.flightScheduler.Today.Count(x => ac.DisplayName.Equals(x.flightSchema.aircraftConfig.DisplayName)))); isMod.AddStat(new BoolStat(ac.isDefault)); paxCapacity.AddStat(new IntStat(ac.Capacity)); nFlightAttendants.AddStat(new IntStat(ac.nFlightAttendants)); nPilots.AddStat(new IntStat(ac.nPilots)); crewChangeModifier.AddStat(new PercentageStat(ac.CrewChangeChanceModifier)); fuelCapacity.AddStat(new IntStat(ac.FuelCapacity / 1000)); minRunwaySize.AddStat(new IntStat(ac.MinRunwaySize)); minGateSize.AddStat(new StringStat(ac.MinGateSize.ToString())); string airlineString = string.Empty; foreach (Airline airline in Game.current.airlines) { if (airline.AircraftInFleet.Contains(ac.isDefault ? ac.DisplayName : ac.ReferenceID)) { airlineString += airline.name + "<br/>"; } } airlinesUsing.AddStat(new StringStat(airlineString)); shortName.AddStat(new StringStat(ac.DisplayShortName)); }
private string ForTableHeader(PrintOptions printOptions = null) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); string str = string.Empty; str += "<thead><tr>\n"; if (string.IsNullOrWhiteSpace(printOptions.AirlineName)) { str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats0")}</th>\n"; } str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats1")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats22")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats2")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats3")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats4")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats5")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats6")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats7")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats8")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats9")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats10")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats11")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats12")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats13")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats14")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats15")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats16")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats17")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats18")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats19")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats20")}</th>\n"; str += $"<th>{i18n.Get("TBFlash.AirportStats.AirlineDailyStats.stats21")}</th>\n"; str += "</tr></thead>\n"; return(str); }
internal string GetChartData(string dataSet, string airline) { string jsonCode; if (LoadArray(dataSet, airline)) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); SetOptions(); jsonCode = $"{{\n\t{ChartOptions()},\n\t{SeriesConfig()},\n\t"; jsonCode += "\"chartData\":[{"; for (int j = additionalColumns; j < (GameTimer.Day < 30 ? GameTimer.Day : 30) + additionalColumns; j++) { jsonCode += j > additionalColumns ? "," : string.Empty; jsonCode += $"\"{dataArray[0, j]}\":{{"; bool hasEntry = false; for (int i = 1; i <= NumSeries; i++) { if (dataArray[i, 5] == "visible") { jsonCode += hasEntry ? "," : string.Empty; jsonCode += $"\"{dataArray[i, 1]}\":{dataArray[i, j]}"; hasEntry = true; } } jsonCode += "}"; } jsonCode += "}]}"; AirportStatUtils.AirportStatsLogger(Log.FromPool(jsonCode).WithCodepoint()); } else { jsonCode = i18n.Get("TBFlash.AirportStats.json.jsonConfigError"); } return(jsonCode); }
static internal void UpdateAirlineData() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); LoadAirlineData(LastDay == 1 ? 1 : LastDay - 1, GameTimer.Day); LoadAirportLifetimeStats(); LastDay = GameTimer.Day; }
private string ForTableFlightRecords(PrintOptions printOptions = null) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); string str = string.Empty; IOrderedEnumerable <FlightRecord> flightRecords = string.IsNullOrWhiteSpace(printOptions.AirlineName) ? flights[printOptions.Day].OrderBy(x => x.arrivalTime).ThenBy(x => x.airline) : flights[printOptions.Day].Where(x => x.airline == printOptions.AirlineName).OrderBy(x => x.arrivalTime).ThenBy(x => x.airline); if (!flightRecords.Any()) { return(str); } str += "<tbody>"; bool oddRow = false; foreach (FlightRecord fr in flightRecords) { str += $"<tr{(oddRow ? " class=\"oddRow\"" : string.Empty)}>\n"; if (string.IsNullOrWhiteSpace(printOptions.AirlineName)) { str += $"<td><a href=\"/{fr.airline}?Day={printOptions.Day}\">{fr.airline}</a></td>\n"; } str += $"<td class=\"None\"><a class=\"ajax-dialog\" href=\"/aircraftstats?aircraft={fr.aircraft}\" rel=\"#dialog\">{fr.aircraft}</a></td>\n"; str += $"<td class=\"None\">{fr.originalGate}</td>\n"; str += $"<td class=\"None\">{DateTime.MinValue.AddSeconds(fr.arrivalTime * 60):t}</td>\n"; str += $"<td class=\"{(fr.actual_arrivalTime <= 0 ? AirportStatUtils.InfoLevels.None : fr.actual_arrivalTime > fr.arrivalTime ? AirportStatUtils.InfoLevels.Info : AirportStatUtils.InfoLevels.None)}\">{(fr.actual_arrivalTime > 0 ? DateTime.MinValue.AddSeconds(fr.actual_arrivalTime * 60).ToString("t") : string.Empty)}</td>\n"; str += $"<td class=\"None\">{DateTime.MinValue.AddSeconds(fr.departureTime * 60):t}</td>\n"; str += $"<td class=\"{(fr.actual_departureTime <= 0 ? AirportStatUtils.InfoLevels.None : fr.actual_departureTime - fr.departureTime > 15 ? AirportStatUtils.InfoLevels.Warning : fr.actual_departureTime - fr.departureTime > 0 ? AirportStatUtils.InfoLevels.Info : AirportStatUtils.InfoLevels.None)}\">{(fr.actual_departureTime > 0 ? DateTime.MinValue.AddSeconds(fr.actual_departureTime * 60).ToString("t") : string.Empty)}</td>\n"; str += $"<td class=\"None\">{fr.nArriving:#}</td>\n"; str += $"<td class=\"None\">{(fr.actual_arrivalTime > 0 ? new TimeSpan(0, 0, (int)fr.time_deplaning * 60).ToString("g") : string.Empty)}</td>\n"; str += $"<td class=\"None\">{fr.nDeparting:#}</td>\n"; str += $"<td class=\"None\">{fr.nCheckedIn:#}</td>\n"; str += $"<td class=\"{(fr.actual_departureTime <=0 ? AirportStatUtils.InfoLevels.None : fr.nBoarded < fr.nDeparting ? AirportStatUtils.InfoLevels.Warning : AirportStatUtils.InfoLevels.None)}\">{fr.nBoarded:#}</td>\n"; str += $"<td class=\"None\">{(fr.nBoarded > 0 ? new TimeSpan(0, 0, (int)fr.time_boarding * 60).ToString("g") : string.Empty)}</td>\n"; str += $"<td class=\"None\">{fr.nArrivalBags:#}</td>\n"; str += $"<td class=\"None\">{fr.nBagsUnloaded:#}</td>\n"; str += $"<td class=\"None\">{(fr.nBagsUnloaded > 0 ? DateTime.MinValue.AddSeconds(fr.time_bag_unload * 60).ToString("t") : string.Empty)}</td>\n"; str += $"<td class=\"None\">{fr.nDepartingBags:#}</td>\n"; str += $"<td class=\"{(fr.actual_departureTime <= 0 ? AirportStatUtils.InfoLevels.None : fr.nBagsLoaded < fr.nDepartingBags ? AirportStatUtils.InfoLevels.Info : AirportStatUtils.InfoLevels.None)}\">{fr.nBagsLoaded:#}</td>\n"; str += $"<td class=\"None\">{(fr.nBagsLoaded > 0 ? new TimeSpan(0, 0, (int)fr.time_bag_load * 60).ToString("g") : string.Empty)}</td>\n"; str += $"<td class=\"None\">{fr.nFuelRequested / 1000:#,#}</td>\n"; str += $"<td class=\"{(fr.actual_departureTime <=0 ? AirportStatUtils.InfoLevels.None : fr.nFuelRefueled < fr.nFuelRequested ? AirportStatUtils.InfoLevels.Info : AirportStatUtils.InfoLevels.None)}\">{fr.nFuelRefueled / 1000:#,#}</td>\n"; string st = string.Empty; foreach (Flight.Status stat in Enum.GetValues(typeof(Flight.Status))) { if (AirportStatUtils.HasStatus(fr.status, stat)) { st += i18n.Get("TBFlash.AirportStats.flightstatus." + Enum.GetName(typeof(Flight.Status), stat)) + "<br/>"; } } str += $"<td class=\"None\">{st}</td>\n"; str += $"<td class=\"{(fr.reason.ToString().Length > 5 ? AirportStatUtils.InfoLevels.Warning : AirportStatUtils.InfoLevels.None)}\">{i18n.Get("UI.strings.flightstatusreason.") + fr.reason.ToString()}</td>\n"; str += "</tr>\n"; oddRow = !oddRow; } str += "</tbody>"; return(str); }
public void Stop() { Listener?.Close(); Listener?.Stop(); Listener = null; isStarted = false; AirportStatUtils.AirportStatsLogger(Log.FromPool("Listener Stopped").WithCodepoint()); }
internal void ResetAirlineStats() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); //if (airlineStats.airlineName.stats.Count > 0) //{ airlineStats = new AirlineStatGroup(); //} }
private bool LoadFuelStats() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); Title = i18n.Get("TBFlash.AirportStats.json.fuelStats"); Type = Types.multiAxisLine; NumSeries = 5; YAxisLabel = i18n.Get("TBFlash.AirportStats.json.litersOfFuel"); YAxisLabel2 = i18n.Get("TBFlash.AirportStats.json.planesServed"); dataArray = new string[NumSeries + 1, (GameTimer.Day <= 30 ? GameTimer.Day : 30) + additionalColumns]; int j = additionalColumns - 1; for (int i = GameTimer.Day; i >= (GameTimer.Day > 30 ? GameTimer.Day - 29 : 1); i--) { j++; if (!Game.current.GameReports.TryGetValue(i, out GamedayReportingData GRD)) { break; } IEnumerable <FlightRecord> FlightRecords = Game.current.flightRecords.GetForDay(i - 1); dataArray[0, j] = i.ToString(); dataArray[1, j] = (FlightRecords.Sum(x => x.nFuelRequested) / 1000).ToString("F0"); dataArray[2, j] = (FlightRecords.Sum(x => x.nFuelRefueled) / 1000).ToString("F0"); dataArray[3, j] = FlightRecords.Count(x => x.nFuelRefueled > 0).ToString("F0"); dataArray[4, j] = GRD.FuelFailures.ToString("F0"); dataArray[5, j] = CalculateAverageFuelCost(i).ToString("F2"); } dataArray[1, 0] = i18n.Get("TBFlash.AirportStats.json.fuelRequested"); dataArray[2, 0] = i18n.Get("TBFlash.AirportStats.json.fuelProvided"); dataArray[3, 0] = i18n.Get("TBFlash.AirportStats.json.servedFuel"); dataArray[4, 0] = i18n.Get("TBFlash.AirportStats.json.fuelingFailures"); dataArray[5, 0] = i18n.Get("TBFlash.AirportStats.json.fuelPrice"); dataArray[1, 1] = "fuelReq"; dataArray[2, 1] = "fuelProv"; dataArray[3, 1] = "served"; dataArray[4, 1] = "failed"; dataArray[5, 1] = "price"; dataArray[1, 2] = "ivory"; dataArray[2, 2] = "green"; dataArray[3, 2] = "cyan"; dataArray[4, 2] = "red"; dataArray[5, 2] = "purple"; dataArray[1, 3] = "2"; dataArray[2, 3] = "1"; dataArray[3, 3] = "4"; dataArray[4, 3] = "5"; dataArray[5, 3] = "3"; dataArray[1, 6] = nameof(YAxisTypes.yAxisLeft); dataArray[2, 6] = nameof(YAxisTypes.yAxisLeft); dataArray[3, 6] = nameof(YAxisTypes.yAxisRight); dataArray[4, 6] = nameof(YAxisTypes.yAxisRight); dataArray[5, 6] = nameof(YAxisTypes.yAxisRight2); for (int i = 1; i <= NumSeries; i++) { dataArray[i, 5] = "visible"; } return(true); }
internal override SeriesData GetSeriesData() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); string labels = $"\"{bagsUnloaded.SeriesData.Label}\",\"{bagsLoaded.SeriesData.Label}\",\"{lostBags.SeriesData.Label}\""; string keys = $"\"{bagsUnloaded.SeriesData.Key}\",\"{bagsLoaded.SeriesData.Key}\",\"{lostBags.SeriesData.Key}\""; string colors = $"\"{bagsUnloaded.SeriesData.Color}\",\"{bagsLoaded.SeriesData.Color}\",\"{lostBags.SeriesData.Color}\""; string orders = $"\"{bagsUnloaded.SeriesData.Order}\",\"{bagsLoaded.SeriesData.Order}\",\"{lostBags.SeriesData.Order}\""; return(new SeriesData(labels, keys, colors, orders)); }
internal override SeriesData GetSeriesData() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); string labels = $"\"{nArriving.SeriesData.Label}\",\"{nConnecting.SeriesData.Label}\",\"{nBoarded.SeriesData.Label}\",\"{nMissed.SeriesData.Label}\""; string keys = $"\"{nArriving.SeriesData.Key}\",\"{nConnecting.SeriesData.Key}\",\"{nBoarded.SeriesData.Key}\",\"{nMissed.SeriesData.Key}\""; string colors = $"\"{nArriving.SeriesData.Color}\",\"{nConnecting.SeriesData.Color}\",\"{nBoarded.SeriesData.Color}\",\"{nMissed.SeriesData.Color}\""; string orders = $"\"{nArriving.SeriesData.Order}\",\"{nConnecting.SeriesData.Order}\",\"{nBoarded.SeriesData.Order}\",\"{nMissed.SeriesData.Order}\""; return(new SeriesData(labels, keys, colors, orders)); }
static internal string GetFuelFutures() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); string str = AirportStatUtils.PageHead(AirportStatUtils.PageTitles.FuelFutures, true); str += "<table>"; str += StatLoader.airportData.fuelFutures.ForTable(); str += "</table>" + AirportStatUtils.PageFooter(); return(str); }
static internal string GetAircraftStats(AircraftConfig aircraftConfig) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); string str = string.Empty; StatLoader.UpdateAircraftStats(aircraftConfig); str += $"<div class=\"modal\"><h1>{aircraftConfig.DisplayName}</h1><table>\n"; str += StatLoader.aircraftData.ForTable(); str += "</table></div>"; return(str); }
internal override SeriesData GetSeriesData() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); string labels = $"\"{fuelRequested.SeriesData.Label}\",\"{fuelDelivered.SeriesData.Label}\",\"{planesRefueled.SeriesData.Label}\",\"{fuelingFailures.SeriesData.Label}\",\"{avgFuelPrice.SeriesData.Label}\""; string keys = $"\"{fuelRequested.SeriesData.Key}\",\"{fuelDelivered.SeriesData.Key}\",\"{planesRefueled.SeriesData.Key}\",\"{fuelingFailures.SeriesData.Key}\",\"{avgFuelPrice.SeriesData.Key}\""; string colors = $"\"{fuelRequested.SeriesData.Color}\",\"{fuelDelivered.SeriesData.Color}\",\"{planesRefueled.SeriesData.Color}\",\"{fuelingFailures.SeriesData.Color}\",\"{avgFuelPrice.SeriesData.Color}\""; string orders = $"\"{fuelRequested.SeriesData.Order}\",\"{fuelDelivered.SeriesData.Order}\",\"{planesRefueled.SeriesData.Order}\",\"{fuelingFailures.SeriesData.Order}\",\"{avgFuelPrice.SeriesData.Order}\""; string yAxis = $"\"{fuelRequested.SeriesData.YAxis}\",\"{fuelDelivered.SeriesData.YAxis}\",\"{planesRefueled.SeriesData.YAxis}\",\"{fuelingFailures.SeriesData.YAxis}\",\"{avgFuelPrice.SeriesData.YAxis}\""; return(new SeriesData(labels, keys, colors, orders, yAxis)); }
static private string GetSeriesData(StatGroup statGroup) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); SeriesData seriesData = statGroup.GetSeriesData(); string label = "\"seriesConfig\":[{\"seriesLabels\":[" + seriesData.Label + "]"; string key = ",\"seriesKeys\":[" + seriesData.Key + "]"; string color = ",\"seriesColors\":[" + seriesData.Color + "]"; string order = ",\"seriesOrders\":[" + seriesData.Order + "]"; string stack = seriesData.Stack != null ? ",\"seriesStacks\":[" + seriesData.Stack + "]" : string.Empty; string yAxis = seriesData.YAxis != null ? ",\"seriesYAxis\":[" + seriesData.YAxis + "]" : string.Empty; return(label + key + color + order + stack + yAxis + "}]"); }
static internal string GetAirlineStats(bool activeOnly = false) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); StatLoader.UpdateAirlineStats(); string str = activeOnly ? AirportStatUtils.PageHead(AirportStatUtils.PageTitles.ActiveAirlines, true) : AirportStatUtils.PageHead(AirportStatUtils.PageTitles.AllAirlines, true); str += "<table>"; str += StatLoader.airportData.airlineStats.ForTable(new PrintOptions { ActiveOnly = activeOnly }); str += "</table>" + AirportStatUtils.PageFooter(); return(str); }
static internal string GetFlightData(int day, Airline airline = null) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); StatLoader.UpdateFlights(); string str = AirportStatUtils.PageHead(airline, day); //str += "<table class=\"scrollable\">"; str += "<table>"; str += StatLoader.flightData.ForTable(new PrintOptions { Day = day, AirlineName = (airline?.name) }); str += "</table>" + AirportStatUtils.PageFooter(); return(str); }
/// <summary> /// Calculates average cost of fuel using cost each hour from midnight to 11pm. /// </summary> /// <param name="day">The day #; 0 if alltime</param> /// <returns>average cost</returns> private double CalculateAverageFuelCost(int day) { FuelController fuelController = Game.current.fuelController; int endOfDay = (1440 * (day == 0 ? GameTimer.Day : day)) - 480; int startOfDay = day == 0 ? 0 : endOfDay - (day == 1 ? 960 : 1440); float totalCost = 0; for (int i = startOfDay; i < endOfDay; i += 60) { totalCost += fuelController.GetMarketPriceAtTime(i); AirportStatUtils.AirportStatsLogger(Log.FromPool($"min: {i}| cost = {fuelController.GetMarketPriceAtTime(i)} | total = {totalCost}")); } return(totalCost / ((endOfDay - startOfDay) / 60)); }
static internal string GetChartData(string dataset, string airlineName) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); StatLoader.UpdateAirlineData(); StatGroup statGroup = GetStatGroup(dataset, airlineName); PrintOptions printOptions = new PrintOptions() { FirstDay = StatLoader.FirstDay, LastDay = StatLoader.LastDay }; string str = $"{{\n\t{statGroup.GetChartData().GetChartOptions()},\n\t{GetSeriesData(statGroup)},\n\t\"chartData\":[{{{statGroup.ForChart(printOptions)}}}]}}"; AirportStatUtils.AirportStatsLogger(Log.FromPool(str).WithCodepoint()); return(str); }
static private StatGroup GetStatGroup(string dataset, string airlineName) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); if (string.IsNullOrEmpty(dataset)) { return(null); } switch (dataset.ToUpperInvariant()) { case "FLIGHTSTATS": if (!string.IsNullOrWhiteSpace(airlineName)) { return(StatLoader.airlineData.GetAirlineDailyData(airlineName).flightStats); } return(StatLoader.airportData.flightStats); case "FUELFUTURES": return(StatLoader.airportData.fuelFutures); case "FUELSTATS": if (!string.IsNullOrWhiteSpace(airlineName)) { return(StatLoader.airlineData.GetAirlineDailyData(airlineName).fuelStats); } return(StatLoader.airportData.fuelStats); case "LUGGAGESTATS": if (!string.IsNullOrWhiteSpace(airlineName)) { return(StatLoader.airlineData.GetAirlineDailyData(airlineName).luggageStats); } return(StatLoader.airportData.luggageStats); case "PAXSTATS": if (!string.IsNullOrWhiteSpace(airlineName)) { return(StatLoader.airlineData.GetAirlineDailyData(airlineName).passengerStats); } return(StatLoader.airportData.passengerStats); case "REVEXP": return(StatLoader.airportData.revAndExpStats); case "PROFITS": return(StatLoader.airportData.profitStats); default: return(null); } }
internal string ForTable(PrintOptions printOptions = null) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); IEnumerable <string> list = printOptions.ActiveOnly ? FindActiveAirlines(includeInSatisfaction.stats) : includeInSatisfaction.stats.Keys; IOrderedEnumerable <string> airlineList = list.OrderBy(x => x); string str = string.Empty; str += "<thead>"; str += airlineName.ForTable(airlineList, false, true); str += "</thead><tbody>"; str += includeInSatisfaction.ForTable(airlineList, true); str += interest.ForTable(airlineList); str += communication.ForTable(airlineList, true); str += fuelSatisfaction.ForTable(airlineList); str += paxSatisfaction.ForTable(airlineList, true); str += fees.ForTable(airlineList); str += reliability.ForTable(airlineList, true); str += trust.ForTable(airlineList); str += facilityQuality.ForTable(airlineList, true); str += nAcceptedOffers.ForTable(airlineList); str += baseRefuelPercentage.ForTable(airlineList, true); str += firstClassPercentage.ForTable(airlineList); str += newFlightBonus.ForTable(airlineList, true); str += peakFlightCount.ForTable(airlineList); str += nReps.ForTable(airlineList, true); str += hasDeal.ForTable(airlineList); str += runwayFees.ForTable(airlineList, true); str += terminalFees.ForTable(airlineList); str += dailyFees.ForTable(airlineList, true); str += fuelSatisfactionNegotiated.ForTable(airlineList); str += reliabilityNegotiated.ForTable(airlineList, true); str += offices.ForTable(airlineList); str += conferenceRoom.ForTable(airlineList, true); str += stores.ForTable(airlineList); str += storeShare.ForTable(airlineList, true); str += cafes.ForTable(airlineList); str += cafeShare.ForTable(airlineList, true); str += firstClassLounges.ForTable(airlineList); str += flightCrewLounges.ForTable(airlineList, true); str += smallGates.ForTable(airlineList); str += largeGates.ForTable(airlineList, true); str += XLGates.ForTable(airlineList); str += paxPercent.ForTable(airlineList, true); str += penalty.ForTable(airlineList); str += "</tbody>"; return(str); }
internal override SeriesData GetSeriesData() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); //string labels = $"\"{GrossProfit.SeriesData.Label}\",\"{OperatingProfit.SeriesData.Label}\",\"{NetProfit.SeriesData.Label}\",\"{GrossMargin.SeriesData.Label}\",\"{OperatingMargin.SeriesData.Label}\",\"{NetMargin.SeriesData.Label}\""; //string keys = $"\"{GrossProfit.SeriesData.Key}\",\"{OperatingProfit.SeriesData.Key}\",\"{NetProfit.SeriesData.Key}\",\"{GrossMargin.SeriesData.Key}\",\"{OperatingMargin.SeriesData.Key}\",\"{NetMargin.SeriesData.Key}\""; //string colors = $"\"{GrossProfit.SeriesData.Color}\",\"{OperatingProfit.SeriesData.Color}\",\"{NetProfit.SeriesData.Color}\",\"{GrossMargin.SeriesData.Color}\",\"{OperatingMargin.SeriesData.Color}\",\"{NetMargin.SeriesData.Color}\""; //string orders = $"\"{GrossProfit.SeriesData.Order}\",\"{OperatingProfit.SeriesData.Order}\",\"{NetProfit.SeriesData.Order}\",\"{GrossMargin.SeriesData.Order}\",\"{OperatingMargin.SeriesData.Order}\",\"{NetMargin.SeriesData.Order}\""; //string yAxis = $"\"{GrossProfit.SeriesData.YAxis}\",\"{OperatingProfit.SeriesData.YAxis}\",\"{NetProfit.SeriesData.YAxis}\",\"{GrossMargin.SeriesData.YAxis}\",\"{OperatingMargin.SeriesData.YAxis}\",\"{NetMargin.SeriesData.YAxis}\""; string labels = $"\"{NetProfit.SeriesData.Label}\",\"{NetMargin.SeriesData.Label}\""; string keys = $"\"{NetProfit.SeriesData.Key}\",\"{NetMargin.SeriesData.Key}\""; string colors = $"\"{NetProfit.SeriesData.Color}\",\"{NetMargin.SeriesData.Color}\""; string orders = $"\"{NetProfit.SeriesData.Order}\",\"{NetMargin.SeriesData.Order}\""; string yAxis = $"\"{NetProfit.SeriesData.YAxis}\",\"{NetMargin.SeriesData.YAxis}\""; return(new SeriesData(labels, keys, colors, orders, yAxis)); }
private bool LoadFlightStats() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); Title = i18n.Get("TBFlash.AirportStats.json.flightStats"); Type = Types.line; NumSeries = 4; YAxisLabel = i18n.Get("TBFlash.AirportStats.json.numberFlights"); dataArray = new string[NumSeries + 1, (GameTimer.Day <= 30 ? GameTimer.Day : 30) + additionalColumns]; int j = additionalColumns - 1; for (int i = GameTimer.Day; i >= (GameTimer.Day > 30 ? GameTimer.Day - 29 : 1); i--) { j++; if (!Game.current.GameReports.TryGetValue(i, out GamedayReportingData GRD)) { break; } IEnumerable <FlightRecord> FlightRecords = Game.current.flightRecords.GetForDay(i - 1); dataArray[0, j] = i.ToString(); dataArray[1, j] = GRD.FlightsCount.ToString("F0"); dataArray[2, j] = (FlightRecords.Count(x => AirportStatUtils.HasStatus(x.status, global::Flight.Status.Departed)) - FlightRecords.Count(x => AirportStatUtils.HasStatus(x.status, global::Flight.Status.DelayedDeparture))).ToString("F0"); dataArray[3, j] = FlightRecords.Count(x => AirportStatUtils.HasStatus(x.status, global::Flight.Status.DelayedDeparture)).ToString("F0"); dataArray[4, j] = GRD.FlightsCanceled.ToString("F0"); } dataArray[1, 0] = i18n.Get("TBFlash.AirportStats.json.scheduledDepartures"); dataArray[2, 0] = i18n.Get("TBFlash.AirportStats.json.ontimeDepartures"); dataArray[3, 0] = i18n.Get("TBFlash.AirportStats.json.delayedDepartures"); dataArray[4, 0] = i18n.Get("TBFlash.AirportStats.json.canceled"); dataArray[1, 1] = "schedDepart"; dataArray[2, 1] = "ontimeDepart"; dataArray[3, 1] = "delayDepart"; dataArray[4, 1] = "canx"; dataArray[1, 2] = "white"; dataArray[2, 2] = "green"; dataArray[3, 2] = "cyan"; dataArray[4, 2] = "red"; dataArray[1, 3] = "4"; dataArray[2, 3] = "1"; dataArray[3, 3] = "2"; dataArray[4, 3] = "3"; for (int i = 1; i <= NumSeries; i++) { dataArray[i, 5] = "visible"; } return(true); }
private string[,] LoadArray(Airline airline) { int numdays = GameTimer.Day <= 30 ? GameTimer.Day : 30; AirportStatUtils.AirportStatsLogger(Log.FromPool($"GameTimer:{GameTimer.Day}, numdays:{numdays}").WithCodepoint()); string[,] arr = new string[arrayRows, numdays + 1]; for (int i = 0; i < arrayRows; i++) { arr[i, 0] = i18n.Get($"TBFlash.AirportStats.AirlineCompanyStats.stats{i}"); } AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); int j = 0; for (int i = GameTimer.Day; i >= (GameTimer.Day > 30 ? GameTimer.Day - 29 : 1); i--) { j++; IEnumerable <FlightRecord> flightRecords = Game.current.flightRecords.GetForDay(i - 1).Where(x => x.airline == airline.name); arr[0, j] = flightRecords.Any() ? flightRecords.Count().ToString("#,###"):"None"; arr[1, j] = flightRecords.Count(x => AirportStatUtils.HasStatus(x.status, global::Flight.Status.DelayedArrival)).ToString("#,###"); arr[2, j] = flightRecords.Count(x => AirportStatUtils.HasStatus(x.status, global::Flight.Status.RequiresCrew)).ToString("#,###"); arr[3, j] = flightRecords.Count(x => AirportStatUtils.HasStatus(x.status, global::Flight.Status.Departed) && !AirportStatUtils.HasStatus(x.status, global::Flight.Status.DelayedDeparture)).ToString("#,###"); arr[4, j] = flightRecords.Count(x => AirportStatUtils.HasStatus(x.status, global::Flight.Status.DelayedDeparture)).ToString("#,###"); arr[5, j] = flightRecords.Count(x => AirportStatUtils.HasStatus(x.status, global::Flight.Status.Canceled)).ToString("#,###"); arr[6, j] = flightRecords.Count(x => x.reason == global::Flight.StatusReason.AirportInvalid).ToString("#,###"); arr[7, j] = flightRecords.Count(x => x.reason == global::Flight.StatusReason.Weather).ToString("#,###"); arr[8, j] = flightRecords.Count(x => x.reason == global::Flight.StatusReason.Runway).ToString("#,###"); arr[9, j] = flightRecords.Count(x => x.reason == global::Flight.StatusReason.Gate).ToString("#,###"); arr[10, j] = flightRecords.Count(x => x.reason == global::Flight.StatusReason.Expired).ToString("#,###"); arr[11, j] = flightRecords.Count(x => x.reason == global::Flight.StatusReason.Reneged).ToString("#,###"); arr[12, j] = flightRecords.Sum(x => x.nArriving).ToString("#,###"); arr[13, j] = flightRecords.Sum(x => x.nDeparting).ToString("#,###"); arr[14, j] = flightRecords.Sum(x => x.nCheckedIn).ToString("#,###"); arr[15, j] = flightRecords.Sum(x => x.nBoarded).ToString("#,###"); arr[16, j] = flightRecords.Sum(x => AirportStatUtils.HasStatus(x.status, global::Flight.Status.Departed) ? x.nDeparting - x.nBoarded : 0).ToString("#,###"); arr[17, j] = AirportStatUtils.FormatTime(flightRecords.Sum(x => x.time_deplaning) * 60f); arr[18, j] = AirportStatUtils.FormatTime(flightRecords.Sum(x => x.nBoarded > 0 ? x.time_boarding : 0) * 60f); arr[19, j] = (flightRecords.Sum(x => x.nFuelRequested) / 1000).ToString("#,###"); arr[20, j] = (flightRecords.Sum(x => x.nFuelRefueled) / 1000).ToString("#,###"); arr[21, j] = flightRecords.Sum(x => x.nBagsUnloaded).ToString("#,###"); arr[22, j] = flightRecords.Sum(x => x.nBagsLoaded).ToString("#,###"); arr[23, j] = flightRecords.Sum(x => AirportStatUtils.HasStatus(x.status, global::Flight.Status.Departed) ? x.nDepartingBags - x.nBagsLoaded : 0).ToString("#,###"); arr[24, j] = AirportStatUtils.FormatTime(flightRecords.Sum(x => x.nBagsLoaded > 0 ? x.time_bag_load : 0) * 60f); } return(arr); }
private bool LoadPaxStats() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); Title = i18n.Get("TBFlash.AirportStats.json.paxStats"); Type = Types.line; NumSeries = 4; YAxisLabel = i18n.Get("TBFlash.AirportStats.json.numPax"); dataArray = new string[NumSeries + 1, (GameTimer.Day <= 30 ? GameTimer.Day : 30) + additionalColumns]; int j = additionalColumns - 1; for (int i = GameTimer.Day; i >= (GameTimer.Day > 30 ? GameTimer.Day - 29 : 1); i--) { j++; if (!Game.current.GameReports.TryGetValue(i, out GamedayReportingData GRD)) { break; } dataArray[0, j] = i.ToString(); dataArray[1, j] = GRD.NumArrivalPax.ToString("F0"); dataArray[2, j] = GRD.NumConnectPax.ToString("F0"); dataArray[3, j] = GRD.BoardedFlight.ToString("F0"); dataArray[4, j] = GRD.MissedFlight.ToString("F0"); } dataArray[1, 0] = i18n.Get("TBFlash.AirportStats.json.arriving"); dataArray[2, 0] = i18n.Get("TBFlash.AirportStats.json.connecting"); dataArray[3, 0] = i18n.Get("TBFlash.AirportStats.json.boarded"); dataArray[4, 0] = i18n.Get("TBFlash.AirportStats.json.missedFlight"); dataArray[1, 1] = "arrive"; dataArray[2, 1] = "connect"; dataArray[3, 1] = "board"; dataArray[4, 1] = "missed"; dataArray[1, 2] = "ivory"; dataArray[2, 2] = "cyan"; dataArray[3, 2] = "green"; dataArray[4, 2] = "red"; dataArray[1, 3] = "4"; dataArray[2, 3] = "3"; dataArray[3, 3] = "1"; dataArray[4, 3] = "2"; for (int i = 1; i <= NumSeries; i++) { dataArray[i, 5] = "visible"; } return(true); }
internal string ForTable() { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); string str = string.Empty; str += aircraftName.ForTable(); str += nFlights.ForTable(); str += isMod.ForTable(); str += paxCapacity.ForTable(); str += nFlightAttendants.ForTable(); str += nPilots.ForTable(); str += crewChangeModifier.ForTable(); str += fuelCapacity.ForTable(); str += minRunwaySize.ForTable(); str += minGateSize.ForTable(); str += airlinesUsing.ForTable(); str += shortName.ForTable(); return(str); }
public void Start() { if (isStarted) { return; } if (Listener == null) { Listener = new HttpListener(); } Listener.Prefixes.Add(URLBase); Listener.Start(); AirportStatUtils.AirportStatsLogger(Log.FromPool("Listener Started").WithCodepoint()); isStarted = true; StatLoader.Init(); IAsyncResult result = Listener.BeginGetContext(new AsyncCallback(WebRequestCallback), Listener); Application.OpenURL(URLBase); }
internal string GetAircraftStats(AircraftConfig aircraftConfig) { AirportStatUtils.AirportStatsLogger(Log.FromPool("").WithCodepoint()); string[,] arr = LoadArray(aircraftConfig); string htmlCode = $"<div class=\"modal\"><h1>{arr[0, 1]}</h1><table>"; for (int i = 1; i < arrayRows; i++) { htmlCode += "<tr>"; for (int j = 0; j < 2; j++) { htmlCode += $"<td>{arr[i, j]}</td>"; } htmlCode += "</tr>"; } htmlCode += "</table></div>"; return(htmlCode); }