This is a project I have been co-developing with  Linus Axelsson (Neon Smoke) since sometime last year, while his project group changed to a different way of creating particle systems within Unity, my group has continued to use this editor and will do so for our last project as well. During the early stages of development we tried a couple of different solutions for how to create the interface, we eventually decided to give QT and its Designer program a chance as both of us had previous experience with PyQT. We also chose to use DirectX 11 for that very same reason, previous experience with DirectX and the fact that all engines at The Game Assembly are using DX11. 

While Linus did all of the rendering I was in charge of implementing the interface and binding the various fields and sliders together, while making sure that the data could be passed on to the graphics part for rendering. I also created our first iteration of the binary file that the editor outputs when you save a particlesystem, Linus has since then made various changes to those structs due to him adding more functionality to the rendering. 


Short demo of the Particle Editor


All of the fields and sliders are implemented with the Signal and Slots functions that QT provides, which gave us callbacks whenever a value changed. This also made it easier for Linus to be able to reload the entire system in order to let the user see how the different variables change how the particle effect looks.

Interface of the Particle editor, UI file was made with QT Designer and implemented with the QT C++ API

Interface of the Particle editor, UI file was made with QT Designer and implemented with the QT C++ API


Final thoughts and lessons learned

For me it was a couple of years since I last touched C++ so this has been a great project to refresh my memory on how pointers work. I also think it's great to learn a new API as I've only used the Python side of QT this was very interesting. Naturally though, they are very similar in structure and as such it wasn't a daunting task to create and design an interface. It was also simple to connect all of the fields and sliders while storing their values for export to our ".ps" binary file. 

Research and development of this project was conducted at The Game Assembly as part of an Advanced Technical Specialization course.

Last updated: 31st May - 2018