Sleeping Wombat GUI
0.100
swGUI
|
Biblioteka zapewnia dynamiczną kontrolę typów obiektów oraz mechanizmy rejestrowania metainformacji. More...
Classes | |
class | EngineObject |
Klasa bazowa dla obiektów, które mają być dostępne w edytorze poprzez rttr. Należy po niej odziedziczyć i dodać odpowiednie deklaracje. More... | |
Biblioteka zapewnia dynamiczną kontrolę typów obiektów oraz mechanizmy rejestrowania metainformacji.
Silnik wykorzystuje bibliotekę RTTR autorstwa Axela Menzela udostępnianą na licencji MIT z małymi przeróbkami. Dokumentacja i przykłady znajdują się na stronie: http://www.rttr.org/
Przy tworzeniu własnych klas należy dodawać do nich metainformacje, aby edytor mógł je poprawnie wyświetlić. Wszystkie klasy powinny mieć na samym szczycie hierarchi dziedziczenia obiekt EngineObject. Jeżeli dziedziczy się po jakiejś silnikowej klasie aktora, to EngineObject w tej hierarchi na pewno się znajduje.
Pamiętać o tym należy tylko wtedy, gdy tworzy się jakąś strukturę lub klasę, która będzie polem w klasie aktora. Aby edytor mógł wyświetlać propertisy takiej zagnieżdżonej klasy trzeba jawnie odziedziczyć po EngineObject.
Należy mieć na uwadze, że klasa EngineObject deklaruje metody virtualne biblioteki RTTR, w związku z czym wszystkie klasy dziedziczące będą miały dodatkowe pole ze wskaźnikiem na vtable, co zwiększy rozmiar takiej struktury. Z tego powodu lepiej jest, gdy aktorzy nie mają płaską strukturę i takich zagnieżdżonych strutkur się nie używa, ale nikt nie zabrania.
Biblioteka RTTR wymaga deklarowania nowych typów dla które mają być przez nią obsługiwane. Typy proste, które nie mają być wyświetlane w edytorze, ale ma być dla nich używana statyczna kontrola typu, mogą zostać zadeklarowane w następujący sposób:
Jeżeli dla klasy ma być używana dynamiczna kontrola typów, trzeba zadeklarować hierarchię dziedziczenia w każdej z klas. Robi się to w następujący sposób:
Następnie w pliku .cpp można dodać metadane klasy. Nazwy własciwości nie powinny zawierać białych znaków, ponieważ to może powodować problemy przy serializacji do XMLa.
Typy złożone jak DirectX::XMFLOAT3 powinny być deklarowane z polityką rttr::policy::prop::BindAsPtr() (Tak jak w przykładzie powyżej). W przeciwnym razie edytor nie będzie mógł ich odczytywać i zapisywać. Podobnie sprawa ma się ze strutkurami wewnątrz klasy np:
W takim przypadku trzeba dodać informację o propertisach również dla klasy Nested: