Permafrost
"In an arctic lab, shoot and bash your way through your mutated coworkers and use your wits to find your best friend!"
My Contribution
For this project, I made the decision to rewrite my existing UI system I created during project six. My reasoning was that while I had learned much from my previous attempt in project four, I had still made multiple design decisions that made my newest UI system unwieldy to work with. So, for this project, I sat down with fellow programmer Kevin Fredin and planned out how our next UI system would work, using my experience from my previous projects.
Our main goal was making the system easy to understand on a conceptual level, while still allowing complex menu behavior. The system is built upon "rects", which are simply data that constitutes an image on the screen (i.e texture bind, position, size, etc.). These "rects" are contained in UIObjects, which have a position. All "rects" within a UIObject derive their position from their owner. UIObjects are in turn contained in UICanvases, which have a position and size.
​
UIObjects can also have a "Service" attached. A "Service" is essentially some functionality that utilize the "rects" on the UIObject (i.e a button, a slider etc.). "Services" could also get values from the game itself through "ValuePointers", which are contained in the "UIManager".
​
In the end, the system turned out to be easy to work with and quite powerful. For example, when I was deciding what engine I should use for my specialization, I was confident that our UI system was capable of accomplishing what I needed.

Diagram courtesy of Kevin Fredin