public static string getBuildingName(ushort buildingId, out ItemClass.Service serviceFound, out ItemClass.SubService subserviceFound, out string prefix) { NetManager nm = Singleton <NetManager> .instance; BuildingManager bm = Singleton <BuildingManager> .instance; Building b = bm.m_buildings.m_buffer[buildingId]; while (b.m_parentBuilding > 0) { doLog("getStationNameWithPrefix(): building id {0} - parent = {1}", buildingId, b.m_parentBuilding); buildingId = b.m_parentBuilding; b = bm.m_buildings.m_buffer[buildingId]; } InstanceID iid = default(InstanceID); iid.Building = buildingId; serviceFound = b.Info?.GetService() ?? default(ItemClass.Service); subserviceFound = b.Info?.GetSubService() ?? default(ItemClass.SubService); TLMCW.ConfigIndex index = GameServiceExtensions.toConfigIndex(serviceFound, subserviceFound); if (index == TLMCW.ConfigIndex.PUBLICTRANSPORT_SERVICE_CONFIG) { var tsd = TransportSystemDefinition.from(b.Info.GetAI()); index = tsd.toConfigIndex(); } prefix = index.getPrefixTextNaming()?.Trim(); return(bm.GetBuildingName(buildingId, iid)); }
public Color AutoColor(ushort i, bool ignoreRandomIfSet = true, bool ignoreAnyIfSet = false) { TransportLine t = tm.m_lines.m_buffer[(int)i]; try { var tsd = TransportSystemDefinition.getDefinitionForLine(i); if (tsd == default(TransportSystemDefinition) || (((t.m_flags & TransportLine.Flags.CustomColor) > 0) && ignoreAnyIfSet)) { return(Color.clear); } TLMCW.ConfigIndex transportType = tsd.toConfigIndex(); Color c = TLMUtils.CalculateAutoColor(t.m_lineNumber, transportType, ((t.m_flags & TransportLine.Flags.CustomColor) > 0) && ignoreRandomIfSet, true); if (c.a == 1) { TLMLineUtils.setLineColor(i, c); } //TLMUtils.doLog("Colocada a cor {0} na linha {1} ({3} {2})", c, i, t.m_lineNumber, t.Info.m_transportType); return(c); } catch (Exception e) { TLMUtils.doErrorLog("ERRO!!!!! " + e.Message); TLMCW.setCurrentConfigBool(TLMCW.ConfigIndex.AUTO_COLOR_ENABLED, false); return(Color.clear); } }
internal static Color CalculateAutoColor(ushort num, TLMCW.ConfigIndex transportType, bool avoidRandom = false, bool allowClear = false) { if (transportType == TLMCW.ConfigIndex.EVAC_BUS_CONFIG) { return(TLMCW.getColorForTransportType(transportType)); } bool prefixBased = TLMCW.getCurrentConfigBool(transportType | TLMCW.ConfigIndex.PALETTE_PREFIX_BASED); bool randomOnOverflow = TLMCW.getCurrentConfigBool(transportType | TLMCW.ConfigIndex.PALETTE_RANDOM_ON_OVERFLOW); string pal = TLMCW.getCurrentConfigString(transportType | TLMCW.ConfigIndex.PALETTE_SUBLINE); if (num >= 1000 && TLMCW.getCurrentConfigInt(transportType | TLMCW.ConfigIndex.PREFIX) != (int)ModoNomenclatura.Nenhum) { pal = TLMCW.getCurrentConfigString(transportType | TLMCW.ConfigIndex.PALETTE_MAIN); if (prefixBased) { num /= 1000; } else { num %= 1000; } } Color c; c = TLMAutoColorPalettes.getColor(num, pal, randomOnOverflow, avoidRandom); if (c == Color.clear && !allowClear) { c = TLMCW.getColorForTransportType(transportType); } return(c); }
internal static List <string> getDepotPrefixesOptions(TLMCW.ConfigIndex transportType) { transportType &= TLMConfigWarehouse.ConfigIndex.SYSTEM_PART; var m = (ModoNomenclatura)TLMCW.getCurrentConfigInt(transportType | TLMCW.ConfigIndex.PREFIX); List <string> saida = new List <string>(new string[] { Locale.Get("TLM_UNPREFIXED") }); switch (m) { case ModoNomenclatura.GregoMaiusculo: case ModoNomenclatura.GregoMaiusculoNumero: saida.AddRange(gregoMaiusculo); break; case ModoNomenclatura.GregoMinusculo: case ModoNomenclatura.GregoMinusculoNumero: saida.AddRange(gregoMinusculo); break; case ModoNomenclatura.CirilicoMaiusculo: case ModoNomenclatura.CirilicoMaiusculoNumero: saida.AddRange(cirilicoMaiusculo); break; case ModoNomenclatura.CirilicoMinusculo: case ModoNomenclatura.CirilicoMinusculoNumero: saida.AddRange(cirilicoMinusculo); break; case ModoNomenclatura.LatinoMaiusculo: case ModoNomenclatura.LatinoMaiusculoNumero: saida.AddRange(latinoMaiusculo); break; case ModoNomenclatura.LatinoMinusculo: case ModoNomenclatura.LatinoMinusculoNumero: saida.AddRange(latinoMinusculo); break; case ModoNomenclatura.Numero: for (int i = 1; i <= 64; i++) { saida.Add(i.ToString()); } break; case ModoNomenclatura.Romano: for (ushort i = 1; i <= 64; i++) { saida.Add(ToRomanNumeral(i)); } break; } if (TLMLineUtils.nomenclaturasComNumeros.Contains(m)) { saida.AddRange(numeros.Select(x => x.ToString())); } return(saida); }
private bool isNumeroUsado(int numLinha, ushort lineIdx) { TLMCW.ConfigIndex tipo = TLMCW.getDefinitionForLine(lineIdx).toConfigIndex(); for (ushort i = 0; i < Singleton <TransportManager> .instance.m_lines.m_buffer.Length; i++) { if (i != lineIdx && TLMCW.getDefinitionForLine(i).toConfigIndex() == tipo && Singleton <TransportManager> .instance.m_lines.m_buffer[i].m_lineNumber == numLinha && (Singleton <TransportManager> .instance.m_lines.m_buffer[i].m_flags & TransportLine.Flags.Created) != TransportLine.Flags.None) { return(true); } } return(false); }
internal static LineIconSpriteNames GetLineIcon(ushort num, TLMCW.ConfigIndex transportType, ref TransportSystemDefinition tsdRef) { if (num > 0 && TLMCW.GetCurrentConfigInt(transportType | TLMCW.ConfigIndex.PREFIX) != (int)ModoNomenclatura.Nenhum) { uint prefix = num / 1000u; ITLMTransportTypeExtension ext = tsdRef.GetTransportExtension(); LineIconSpriteNames format = ext.GetCustomFormat(prefix); if (format != default) { return(format); } } return(TLMCW.getBgIconForIndex(transportType)); }
internal static Color CalculateAutoColor(ushort num, TLMCW.ConfigIndex transportType, ref TransportSystemDefinition tsdRef, bool avoidRandom = false, bool allowClear = false) { if (transportType == TLMCW.ConfigIndex.EVAC_BUS_CONFIG) { return(TLMCW.getColorForTransportType(transportType)); } bool prefixBased = TLMCW.GetCurrentConfigBool(transportType | TLMCW.ConfigIndex.PALETTE_PREFIX_BASED); bool randomOnOverflow = TLMCW.GetCurrentConfigBool(transportType | TLMCW.ConfigIndex.PALETTE_RANDOM_ON_OVERFLOW); var pal = new List <string>(); if (num >= 0 && TLMCW.GetCurrentConfigInt(transportType | TLMCW.ConfigIndex.PREFIX) != (int)ModoNomenclatura.Nenhum) { uint prefix = num / 1000u; ITLMTransportTypeExtension ext = tsdRef.GetTransportExtension(); string tempPal = ext.GetCustomPalette(prefix) ?? string.Empty; if (tempPal != string.Empty) { pal.Add(tempPal); num %= 1000; } else { if (prefixBased) { num /= 1000; } else { num %= 1000; } } pal.Add(TLMCW.GetCurrentConfigString(transportType | TLMCW.ConfigIndex.PALETTE_MAIN)); } else { pal.Add(TLMCW.GetCurrentConfigString(transportType | TLMCW.ConfigIndex.PALETTE_MAIN)); } Color c; c = TLMAutoColorPalettes.getColor(num, pal.ToArray(), randomOnOverflow, avoidRandom); if (c == Color.clear && !allowClear) { c = TLMCW.getColorForTransportType(transportType); } return(c); }
private static void addToArrayWithName(string[] input, List <string> saida, TLMCW.ConfigIndex nameReferenceSystem) { if (nameReferenceSystem == TLMCW.ConfigIndex.NIL) { saida.AddRange(input); } else { for (uint i = 0; i < input.Length; i++) { string item = input[i]; string prefixName = TLMLineUtils.getTransportSystemPrefixName(nameReferenceSystem, i + 1); if (string.IsNullOrEmpty(prefixName)) { saida.Add(item); } else { saida.Add(item + " - " + prefixName); } } } }
public Color AutoColor(ushort i) { TransportLine t = tm.m_lines.m_buffer[(int)i]; try { TLMCW.ConfigIndex transportType = TLMCW.getDefinitionForLine(i).toConfigIndex(); bool prefixBased = TLMCW.getCurrentConfigBool(transportType | TLMCW.ConfigIndex.PALETTE_PREFIX_BASED); bool randomOnOverflow = TLMCW.getCurrentConfigBool(transportType | TLMCW.ConfigIndex.PALETTE_RANDOM_ON_OVERFLOW); string pal = TLMCW.getCurrentConfigString(transportType | TLMCW.ConfigIndex.PALETTE_SUBLINE); ushort num = t.m_lineNumber; if (num >= 1000 && TLMCW.getCurrentConfigInt(transportType | TLMCW.ConfigIndex.PREFIX) != (int)ModoNomenclatura.Nenhum) { pal = TLMCW.getCurrentConfigString(transportType | TLMCW.ConfigIndex.PALETTE_MAIN); if (prefixBased) { num /= 1000; } else { num %= 1000; } } Color c = TLMAutoColorPalettes.getColor(num, pal, randomOnOverflow); TLMUtils.setLineColor(i, c); return(c); } catch (Exception e) { TLMUtils.doErrorLog("ERRO!!!!! " + e.Message); TLMCW.setCurrentConfigBool(TLMCW.ConfigIndex.AUTO_COLOR_ENABLED, false); return(Color.clear); } }
public Color AutoColor(ushort i) { TransportLine t = tm.m_lines.m_buffer[(int)i]; try { var tsd = TLMCW.getDefinitionForLine(i); if (tsd == default(TransportSystemDefinition)) { return(Color.clear); } TLMCW.ConfigIndex transportType = tsd.toConfigIndex(); Color c = TLMUtils.CalculateAutoColor(t.m_lineNumber, transportType); TLMLineUtils.setLineColor(i, c); //TLMUtils.doLog("Colocada a cor {0} na linha {1} ({3} {2})", c, i, t.m_lineNumber, t.Info.m_transportType); return(c); } catch (Exception e) { TLMUtils.doErrorLog("ERRO!!!!! " + e.Message); TLMCW.setCurrentConfigBool(TLMCW.ConfigIndex.AUTO_COLOR_ENABLED, false); return(Color.clear); } }
internal static string[] getStringOptionsForPrefix(ModoNomenclatura m, bool showUnprefixed = false, TLMCW.ConfigIndex nameReferenceSystem = TLMCW.ConfigIndex.NIL, bool noneOption = true) { List <string> saida = new List <string>(new string[noneOption ? 1 : 0]); if (showUnprefixed) { string unprefixedName = Locale.Get("TLM_UNPREFIXED"); if (nameReferenceSystem != TLMCW.ConfigIndex.NIL) { string prefixName = TLMLineUtils.getTransportSystemPrefixName(nameReferenceSystem, 0); if (!string.IsNullOrEmpty(prefixName)) { unprefixedName += " - " + prefixName; } } saida.Add(unprefixedName); } if (m == ModoNomenclatura.Nenhum) { return(saida.ToArray()); } switch (m) { case ModoNomenclatura.GregoMaiusculo: case ModoNomenclatura.GregoMaiusculoNumero: addToArrayWithName(gregoMaiusculo, saida, nameReferenceSystem); break; case ModoNomenclatura.GregoMinusculo: case ModoNomenclatura.GregoMinusculoNumero: addToArrayWithName(gregoMinusculo, saida, nameReferenceSystem); break; case ModoNomenclatura.CirilicoMaiusculo: case ModoNomenclatura.CirilicoMaiusculoNumero: addToArrayWithName(cirilicoMaiusculo, saida, nameReferenceSystem); break; case ModoNomenclatura.CirilicoMinusculo: case ModoNomenclatura.CirilicoMinusculoNumero: addToArrayWithName(cirilicoMinusculo, saida, nameReferenceSystem); break; case ModoNomenclatura.LatinoMaiusculo: case ModoNomenclatura.LatinoMaiusculoNumero: addToArrayWithName(latinoMaiusculo, saida, nameReferenceSystem); break; case ModoNomenclatura.LatinoMinusculo: case ModoNomenclatura.LatinoMinusculoNumero: addToArrayWithName(latinoMinusculo, saida, nameReferenceSystem); break; case ModoNomenclatura.Numero: string[] temp = new string[64]; for (int i = 1; i <= 64; i++) { temp[i - 1] = i.ToString(); } addToArrayWithName(temp, saida, nameReferenceSystem); break; case ModoNomenclatura.Romano: string[] tempR = new string[64]; for (ushort i = 1; i <= 64; i++) { tempR[i - 1] = ToRomanNumeral(i); } addToArrayWithName(tempR, saida, nameReferenceSystem); break; } if (TLMLineUtils.nomenclaturasComNumeros.Contains(m)) { addToArrayWithName(numeros, saida, nameReferenceSystem); } return(saida.ToArray()); }
internal static string[] getStringOptionsForPrefix(TLMCW.ConfigIndex transportSystem, bool showUnprefixed = false, bool noneOption = true) { return(getStringOptionsForPrefix(GetPrefixModoNomenclatura(transportSystem), showUnprefixed, transportSystem, noneOption)); }
internal static ModoNomenclatura GetPrefixModoNomenclatura(TLMCW.ConfigIndex transportType) { return((ModoNomenclatura)TLMCW.getCurrentConfigInt(transportType | TLMCW.ConfigIndex.PREFIX)); }
internal static List <string> getPrefixesOptions(TLMCW.ConfigIndex transportType, Boolean addDefaults = true) { transportType &= TLMConfigWarehouse.ConfigIndex.SYSTEM_PART; ModoNomenclatura m = GetPrefixModoNomenclatura(transportType); List <string> saida = new List <string>(); if (addDefaults) { saida.AddRange(new string[] { Locale.Get("TLM_ALL"), Locale.Get("TLM_UNPREFIXED") }); } else { saida.Add("/"); } switch (m) { case ModoNomenclatura.GregoMaiusculo: case ModoNomenclatura.GregoMaiusculoNumero: saida.AddRange(gregoMaiusculo.Select(x => x.ToString())); break; case ModoNomenclatura.GregoMinusculo: case ModoNomenclatura.GregoMinusculoNumero: saida.AddRange(gregoMinusculo.Select(x => x.ToString())); break; case ModoNomenclatura.CirilicoMaiusculo: case ModoNomenclatura.CirilicoMaiusculoNumero: saida.AddRange(cirilicoMaiusculo.Select(x => x.ToString())); break; case ModoNomenclatura.CirilicoMinusculo: case ModoNomenclatura.CirilicoMinusculoNumero: saida.AddRange(cirilicoMinusculo.Select(x => x.ToString())); break; case ModoNomenclatura.LatinoMaiusculo: case ModoNomenclatura.LatinoMaiusculoNumero: saida.AddRange(latinoMaiusculo.Select(x => x.ToString())); break; case ModoNomenclatura.LatinoMinusculo: case ModoNomenclatura.LatinoMinusculoNumero: saida.AddRange(latinoMinusculo.Select(x => x.ToString())); break; case ModoNomenclatura.Numero: for (int i = 1; i <= 64; i++) { saida.Add(i.ToString()); } break; case ModoNomenclatura.Romano: for (ushort i = 1; i <= 64; i++) { saida.Add(ToRomanNumeral(i)); } break; } if (TLMLineUtils.nomenclaturasComNumeros.Contains(m)) { saida.AddRange(numeros.Select(x => x.ToString())); } return(saida); }
public void openLineInfo(ushort lineID) { if (lineID <= 0) { return; } WorldInfoPanel.HideAllWorldInfoPanels(); linePrefixDropDown.eventSelectedIndexChanged -= saveLineNumber; lineNumberLabel.eventLostFocus -= saveLineNumber; m_lineIdSelecionado = default(InstanceID); m_lineIdSelecionado.TransportLine = lineID; TransportLine t = m_controller.tm.m_lines.m_buffer[(int)lineID]; ushort lineNumber = t.m_lineNumber; TLMCW.ConfigIndex transportType = TLMCW.getDefinitionForLine(lineID).toConfigIndex(); ModoNomenclatura mnPrefixo = (ModoNomenclatura)TLMCW.getCurrentConfigInt(TLMConfigWarehouse.ConfigIndex.PREFIX | transportType); if (mnPrefixo != ModoNomenclatura.Nenhum) { lineNumberLabel.text = (lineNumber % 1000).ToString(); lineNumberLabel.relativePosition = new Vector3(110f, 3f); lineNumberLabel.width = 55; linePrefixDropDown.enabled = false; var temp = TLMUtils.getStringOptionsForPrefix(mnPrefixo); for (uint i = 0; i < temp.Length; i++) { string prefixName = TLMUtils.getTransportSystemPrefixName(transportType, i); if (prefixName != null && prefixName != string.Empty) { temp[(int)i] += " (" + prefixName + ")"; } } linePrefixDropDown.items = temp; linePrefixDropDown.selectedIndex = lineNumber / 1000; linePrefixDropDown.enabled = true; lineNumberLabel.maxLength = 3; } else { lineNumberLabel.text = (lineNumber).ToString(); lineNumberLabel.relativePosition = new Vector3(80f, 3f); lineNumberLabel.width = 75; lineNumberLabel.maxLength = 4; linePrefixDropDown.enabled = false; } lineNumberLabel.color = m_controller.tm.GetLineColor(lineID); lineNameField.text = m_controller.tm.GetLineName(lineID); lineTransportIconTypeLabel.relativePosition = new Vector3(10f, 12f); lineTransportIconTypeLabel.height = 20; lineTransportIconTypeLabel.atlas = linePrefixDropDown.atlas; lineTransportIconTypeLabel.backgroundSprite = PublicTransportWorldInfoPanel.GetVehicleTypeIcon(t.Info.m_transportType); lineColorPicker.selectedColor = m_controller.tm.GetLineColor(lineID); bool day, night, zeroed; TLMLineUtils.getLineActive(ref t, out day, out night, out zeroed); if (day && night) { lineTime.selectedIndex = 0; } else if (day) { lineTime.selectedIndex = 1; } else if (night) { lineTime.selectedIndex = 2; } else { lineTime.selectedIndex = 3; } m_linearMap.redrawLine(); Show(); m_controller.defaultListingLinesPanel.Hide(); m_autoNameLabel.text = m_linearMap.autoName; vehicleQuantitySet.text = TLMVehiclesLineManager.instance[this.lineIdSelecionado.TransportLine].ToString(); vehicleQuantitySet.area = new Vector4(150, 150, 50, 20); vehicleQuantitySet.color = Color.gray; linePrefixDropDown.eventSelectedIndexChanged += saveLineNumber; lineNumberLabel.eventLostFocus += saveLineNumber; }
public void SimulationStep(ushort lineID) { if (!m_initialized) { m_initialized = true; for (int i = 0; i < Singleton <TransportManager> .instance.m_lines.m_buffer.Length; i++) { m_flagsLastState[i] = Singleton <TransportManager> .instance.m_lines.m_buffer[i].m_flags; } } var flagsChanged = (m_flagsLastState[lineID] ^ Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags); m_flagsLastState[lineID] = Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags; if ((flagsChanged & TransportLine.Flags.Complete) != TransportLine.Flags.None) { if (TLMConfigWarehouse.getCurrentConfigBool(TLMConfigWarehouse.ConfigIndex.AUTO_COLOR_ENABLED)) { TLMController.instance.AutoColor(lineID); } if (TLMConfigWarehouse.getCurrentConfigBool(TLMConfigWarehouse.ConfigIndex.AUTO_NAME_ENABLED)) { TLMUtils.setLineName(lineID, TLMUtils.calculateAutoName(lineID)); } } if (TransportLinesManagerMod.instance != null && TransportLinesManagerMod.debugMode) { TLMUtils.doLog("LTLMTransportLine SimulationStep!"); } TransportInfo info = Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].Info; TLMCW.ConfigIndex lineType = TLMCW.getDefinitionForLine(lineID).toConfigIndex(); float defaultCostPerPassengerCapacity = TLMCW.getCostPerPassengerCapacityLine(lineType); if (Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].Complete) { int vehicleCount = 0; int installedCapacity = 0; if (Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_vehicles != 0) { VehicleManager instance = Singleton <VehicleManager> .instance; ushort nextId = Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_vehicles; int loopCount = 0; while (nextId != 0) { ushort nextLineVehicle = instance.m_vehicles.m_buffer[(int)nextId].m_nextLineVehicle; vehicleCount++; installedCapacity += TLMLineUtils.getVehicleCapacity(nextId); nextId = nextLineVehicle; if (++loopCount > 16384) { CODebugBase <LogChannel> .Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace); break; } } } uint prefix = 0; if (TLMConfigWarehouse.getCurrentConfigInt(TLMConfigWarehouse.getConfigIndexForTransportInfo(info) | TLMConfigWarehouse.ConfigIndex.PREFIX) != (int)ModoNomenclatura.Nenhum) { prefix = Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_lineNumber / 1000u; } float budgetMultiplierPrefix = TLMUtils.getExtensionFromConfigIndex(TLMCW.getConfigIndexForTransportInfo(info)).getBudgetMultiplierForHour(prefix, (int)Singleton <SimulationManager> .instance.m_currentDayTimeHour) / 100f; var flagToCheck = (TransportLine.Flags.DisabledNight | TransportLine.Flags.DisabledDay); if (budgetMultiplierPrefix == 0 && (Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags & flagToCheck) == TransportLine.Flags.None) { int flagsToAdd = (int)(TransportLine.Flags.DisabledDay | TransportLine.Flags.DisabledNight) | (int)(TLMTransportLineFlags.ZERO_BUDGET_SETTED); if ((Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags & (TransportLine.Flags)TLMTransportLineFlags.ZERO_BUDGET_SETTED) == TransportLine.Flags.None) { if ((Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags & TransportLine.Flags.DisabledDay) == TransportLine.Flags.None) { flagsToAdd |= (int)TLMTransportLineFlags.ZERO_BUDGET_DAY; } if ((Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags & TransportLine.Flags.DisabledNight) == TransportLine.Flags.None) { flagsToAdd |= (int)TLMTransportLineFlags.ZERO_BUDGET_NIGHT; } } Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags |= (TransportLine.Flags)flagsToAdd; } else if ((budgetMultiplierPrefix > 0 && (Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags & (TransportLine.Flags)(TLMTransportLineFlags.ZERO_BUDGET_SETTED)) != TransportLine.Flags.None)) { bool actDay = (Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags & (TransportLine.Flags)TLMTransportLineFlags.ZERO_BUDGET_DAY) != TransportLine.Flags.None; bool actNight = (Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags & (TransportLine.Flags)TLMTransportLineFlags.ZERO_BUDGET_NIGHT) != TransportLine.Flags.None; Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags &= (TransportLine.Flags) ~(TLMTransportLineFlags.ZERO_BUDGET_DAY | TLMTransportLineFlags.ZERO_BUDGET_NIGHT | TLMTransportLineFlags.ZERO_BUDGET_SETTED); TLMLineUtils.setLineActive(ref Singleton <TransportManager> .instance.m_lines.m_buffer[lineID], actDay, actNight); } bool active; if (Singleton <SimulationManager> .instance.m_isNightTime) { active = ((Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags & TransportLine.Flags.DisabledNight) == TransportLine.Flags.None); } else { active = ((Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_flags & TransportLine.Flags.DisabledDay) == TransportLine.Flags.None); } uint steps = 0u; float distance = 0f; bool broken = false; if (Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_stops != 0) { NetManager instance2 = Singleton <NetManager> .instance; ushort stops = Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_stops; ushort nextStop = stops; int count = 0; while (nextStop != 0) { ushort num8 = 0; if (active) { NetNode[] expr_10A_cp_0 = instance2.m_nodes.m_buffer; ushort expr_10A_cp_1 = nextStop; expr_10A_cp_0[(int)expr_10A_cp_1].m_flags = (expr_10A_cp_0[(int)expr_10A_cp_1].m_flags & ~NetNode.Flags.Disabled); } else { NetNode[] expr_130_cp_0 = instance2.m_nodes.m_buffer; ushort expr_130_cp_1 = nextStop; expr_130_cp_0[(int)expr_130_cp_1].m_flags = (expr_130_cp_0[(int)expr_130_cp_1].m_flags | NetNode.Flags.Disabled); } for (int i = 0; i < 8; i++) { ushort segment = instance2.m_nodes.m_buffer[(int)nextStop].GetSegment(i); if (segment != 0 && instance2.m_segments.m_buffer[(int)segment].m_startNode == nextStop) { distance += instance2.m_segments.m_buffer[(int)segment].m_averageLength; num8 = instance2.m_segments.m_buffer[(int)segment].m_endNode; if ((instance2.m_segments.m_buffer[(int)segment].m_flags & NetSegment.Flags.PathLength) == NetSegment.Flags.None) { broken = true; } break; } } steps += 1u; nextStop = num8; if (nextStop == stops) { break; } if (++count >= 32768) { CODebugBase <LogChannel> .Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace); break; } } } float lineCost = vehicleCount * info.m_maintenanceCostPerVehicle / 100;// * defaultCostPerPassengerCapacity; if (lineCost != 0) { Singleton <EconomyManager> .instance.FetchResource(EconomyManager.Resource.Maintenance, m_linesCost.m_buffer[lineID], info.m_class); } int budget = Singleton <EconomyManager> .instance.GetBudget(info.m_class); int necessaryVehicles; if (!active) { necessaryVehicles = 0; } else { necessaryVehicles = TLMVehiclesLineManager.instance[lineID]; if (necessaryVehicles == 0) { if (broken) { necessaryVehicles = vehicleCount; } else { necessaryVehicles = Mathf.CeilToInt(budget * budgetMultiplierPrefix * distance / (info.m_defaultVehicleDistance * 100f)); } } } if (steps != 0u && vehicleCount < necessaryVehicles) { TransferManager.TransferReason vehicleReason = info.m_vehicleReason; int index = Singleton <SimulationManager> .instance.m_randomizer.Int32(steps); ushort stop = Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].GetStop(index); if (vehicleReason != TransferManager.TransferReason.None && stop != 0) { TransferManager.TransferOffer offer = default(TransferManager.TransferOffer); offer.Priority = necessaryVehicles - vehicleCount + 1; offer.TransportLine = lineID; offer.Position = Singleton <NetManager> .instance.m_nodes.m_buffer[stop].m_position; offer.Amount = 1; offer.Active = false; Singleton <TransferManager> .instance.AddIncomingOffer(vehicleReason, offer); } } else if (vehicleCount > necessaryVehicles) { int index2 = Singleton <SimulationManager> .instance.m_randomizer.Int32((uint)vehicleCount); ushort vehicle = Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].GetVehicle(index2); if (vehicle != 0) { VehicleManager instance3 = Singleton <VehicleManager> .instance; VehicleInfo info2 = instance3.m_vehicles.m_buffer[(int)vehicle].Info; info2.m_vehicleAI.SetTransportLine(vehicle, ref instance3.m_vehicles.m_buffer[(int)vehicle], 0); } } } if ((Singleton <SimulationManager> .instance.m_currentFrameIndex & 4095u) >= 3840u) { Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_passengers.Update(); Singleton <TransportManager> .instance.m_passengers[(int)info.m_transportType].Add(ref Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_passengers); Singleton <TransportManager> .instance.m_lines.m_buffer[lineID].m_passengers.Reset(); } }