Dev Blog 106: A New Aircraft, The New UI Sprint Progress, Steam Workshop Integration and Rendering Performance

April 17, 2018

Bonjour airport CEO and welcome to yet another development blog! As mentioned in the previous devlog we’re now fully back to business again after the conference and a short inspiration trip and are making substantial headway on a number of different fronts. We have a lot of topics to cover and since time is code, we’re just gonna jump straight into it…

A New Aircraft

On April 11th we released Airport CEO Alpha 26.1 to the experimental branch, featuring some new but minor visual candy and various bug fixes. On the less minor hand, we also added the largest aircraft yet, a Boeing 757-200!

As you can see, it just barely fits on the medium stand and it’s obvious that we’re starting to outgrow its capacity. The full patch notes for Alpha 26.1 can be seen here and while we’re back and deploying updates for the experimental branch again, it’s at a much lower pace due to development resources being taken up by this week’s other major efforts. Surveying the Jira backlog, we can see that most bugs that are reported as of now in many ways relate to the lacking UI which is why we are currently prioritizing its development over general bug solving.

The New UI Sprint Progress

Progression on the new user interface continues. We’ve made great headway this past week and a half and have completed the most major milestones towards having a shippable version of the new UI for the experimental branch. Below is a current snap shot of the Scrum board for the UI sprint, which show that all issues are currently being worked on and that two major issues are in review.

What we’ve essentially done is completed the large layout overhauls, i.e. performed a first and initial design iteration of the complete layout of the user interface. This took, for a number of reasons which will be explained below, a lot of time but was the natural start point for this project as most other issues in general add something new to the UI rather than fix something old. But before we get into the new UI, let’s have a quick look at where we came from…

A Post-Mortem of the Old UI

As you know, the old UI has a lot to wish for, it’s built on ancient code, it’s clunky to use, lacks important features and features features that really doesn’t serve a purpose. When surveying the feedback we’ve gotten from airport CEOs through various channels as well as performing out own “autopsy” we managed to uncover several skeletons.

Clunky and lacking information

According to most user, the UI is in general clunky to use and lacks information on important places. One of the most major issues is simply the fact that the menu structure is broken and illogical, with menu buttons structured both horizontally and vertically with a three tab depth on a small half-screen space makes it very difficult to navigate and find one’s way around. Red exclamation icons spawned in the world on top of certain objects without any text panel detailing the issue at hand makes problem solving very difficult. Lastly, a panel featuring hundreds and hundreds of ongoing job tasks in chronological order is not very useful for anyone.

Technical Nightmare

Airport CEO has been in development for about two and a half years and with the UI being one of the earliest “features” implemented it’s code base has a very long history of development, refactoring, additions and removals. Over the years as we’ve learnt more and more about software and game development, it’s seen a few different architectural styles and many different design philosophies. All of this means that the current code base is filled with technical debt, inefficient code, naming convention inaccuracies and weird inheritance that do roughly the same as most interfaces.

Performance Drainer

There are a few things you should do, and a few things you should not do, when from a component perspective build a user interface in Unity. Somehow, the old UI has managed to tick most of the “don’t”-s in that category as it has a really poor Canvas structure, a lot of Layout Groups where there really is no need for it, poor Graphic Raycaster usage, a lot of animator components attached to large UI panels and poor UI pooling principles. All of these design flaws cause the entire UI to be redrawn each frame, even though nothing has changed and dirtied the UI, which in turn impacts the overall FPS both when not displaying and specific panel at all or when, very noticeably, displaying the flight planner.

The New UI

Intuitive and “data driven”

The new UI layout is designed with data presentation in mind. It’s larger, easier to navigate with a maximum depth of two tabs, in general less distance for the mouse pointer to travel between clicks and has a lighter, airy, color scheme. Data is consolidated in a better way with the purpose of maximizing the CEOs “field of view”, avoiding having several different panels displayed in different areas of the screen. There is a large increase in the use of hover panels for buttons, icons and labels with the purpose of better communicating what a certain UI element does at a cheaper screen real estate. New information panels will be crafted to fill information gaps and empower the CEO with greater control and an improved notification system will seek to better highlight what is really going on at your airport. Finally, new graphical assets and sounds will be produced and implemented, ridding the UI of the stock Unity look and improving the general user experience.

Owning up to Technical Debt

With the large layout restructuring “behind us” (well, in review…), a lot of technical debt was cleared up in its wake. It was a necessary must, a sort of unwinding of a code yarn ball, and while the code is still far from perfect it is a lot better than in the old UI state. With a more decoupled UI system that depends on separate behavior components rather than large inheritance chains, implementing new panels and features in the future should over time become more easy.


Ridding the UI of all its various performance costly and unnecessary components will allow it to run smoother than ever before and hopefully reduce some of the overall game engine stress. The UI will be meticulously profiled, ensuring that a certain panel is not dirtied unless something has been updated within its area. By replacing stock animators with an in-house developed animation component, we can now run complex and smooth animation sequences at much lower performance cost.

The New UI Focus Group

We want to get this right, right from the start and have already implemented a small focus group of core airport CEOs that will serve as a source of feedback as we finalize the design and layout. While it is still too difficult to estimate a date when we can deploy the new UI to the experimental branch, the focus group should hopefully be able to review a first rendition as of latter this week.

Steam Workshop

As a part of the UI sprint we are finally putting the long awaited Steam Workshop integration in place. Although we have some work left, the basics are more or less in place and with the introduction of Steam Workshop there will be some inevitable changes to how modding is done and managed within Airport CEO (and yes, we will need to update some of the guides). To help facilitate this upcoming change, we have created a quick diagram to explain how the new modding system will work.

In short, there will be a local folder for what we call “native” mods and one folder for Steam Workshop items. The native mod folder is where all modders will need to place their newly created mods for them to be recognized by the game and which then in turn eventually can be published to Steam Workshop (only if you want to of course). The reason to why we want to have a separate folder is to not compromise the core game files, ease of debugging and to ease of enabling or disabling individual mods. This is how games like Cities: Skylines partly does it and quite similar to Steams own Workshop file structure. However, if you are just the average Joe and know that you will not create an mods and is only interested in testing other mods, you will probably never use this folder as Steam will make sure that all subscribed mods are automatically installed for you.

Rendering Performance

Really, performance talks again? Yes, it’s really hard to stop profiling once you got going… we did some additional profiling last week and discovered an interesting behavior that we need to address. When looking at the data, we could clearly see that our own code is at this point, and as a result of the performance sprint, really fast and even though we can always improve more, we instead now turned our attention to the object rendering impact, something that we know to cause noticeable frame drop on larger worlds (especially when zoomed out). This is fairly expected as the engine needs to draw a lot more objects when zoomed out, but on some worlds the FPS dropped from 100 to 20 simply by zooming all they way out. Now, while this test was still in Unity Editor mode meaning that we can expect at least the double FPS in a build version of the game, it is still something that needs to be looked at. We are already heavily batching sprites together and normally have less than 300 draw calls (instructions from the CPU to GPU in basic terms) in an average world, which is really good. Digging further and doing some testing showed that the only thing that really improved the FPS was disabling a lot of game objects containing some form of renderer. This means that what we need to work on better solutions to merge similar objects together into one render and pay special attention to tiled objects such as terminal foundation, taxiway and sidewalk. While there is a meshing solution in place for some of these tiles, it’s simply not efficient enough and the reason to why we bring this up already is because we feel it is quite important and something we need to spend some time on this soon. We strongly believe it can do a big difference for the average CEOs FPS, especially on larger airports and especially when a bit more zoomed out. We’ll most likely be directing some development resources to this issue after the completion of the new UI sprint including the Steam Workshop integration.

So that’s it for this week. In other news, we’ve had some infrastructure issues last week that now should be sorted and… oh, we’ll be shipping the prizes for the winners of the airline design contests later this week! When the prizes start making their way to the winners we’ll make sure to let you know what they got.

Fly safe!

Related blog posts

Dev Blog 151: Businesses and contracts

May 28, 2020

Good evening, airport CEO, or something else depending on where you are! Welcome to the one hundred and fifty first development blog in the series and another update on what we...

Read more

Dev Blog 150: Stabilizing Alpha 35, Alpha 36 and beyond!

May 8, 2020

Well hello there, airport CEO, and welcome to the one hundred and fiftieth development blog! It’s been a little over another two weeks since we last spoke and we are very, very...

Read more


Enter your email to get the latest updates and news.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.