public static void CheckForExtendGates(Airport airport)
{
const int minYearsBetweenExpansions = 5;
if (airport.Terminals.GetOrdereredGates() == 0
&& GameObject.GetInstance().GameTime.AddYears(-minYearsBetweenExpansions) > airport.LastExpansionDate)
{
Terminal minTerminal = airport.Terminals.AirportTerminals.OrderBy(t => t.Gates.NumberOfGates).First();
bool newTerminal = minTerminal.Gates.NumberOfGates > 50;
//extend existing
if (!newTerminal)
{
int numberOfGates = Math.Max(5, minTerminal.Gates.NumberOfGates);
int daysToBuild = numberOfGates*10 + (newTerminal ? 60 : 0);
long price = numberOfGates*airport.GetTerminalGatePrice()
+ (newTerminal ? airport.GetTerminalPrice() : 0);
price = price/3*4;
if (airport.Income > price)
{
for (int i = 0; i < numberOfGates; i++)
{
var gate = new Gate(GameObject.GetInstance().GameTime.AddDays(daysToBuild)) {Airline = minTerminal.Airline};
minTerminal.Gates.AddGate(gate);
}
airport.Income -= price;
airport.LastExpansionDate = GameObject.GetInstance().GameTime;
}
}
//build new terminal
else
{
int numberOfGates = airport.Terminals.GetTerminals()[0].Gates.NumberOfDeliveredGates;
int daysToBuild = numberOfGates*10 + (newTerminal ? 60 : 0);
long price = numberOfGates*airport.GetTerminalGatePrice()
+ (newTerminal ? airport.GetTerminalPrice() : 0);
price = price/3*4;
if (airport.Income > price)
{
var terminal = new Terminal(
airport,
null,
"Terminal",
numberOfGates,
GameObject.GetInstance().GameTime.AddDays(daysToBuild),
Terminal.TerminalType.Passenger);
airport.AddTerminal(terminal);
airport.Income -= price;
airport.LastExpansionDate = GameObject.GetInstance().GameTime;
}
}
}
}