The Actor List is a file header file located in
Generated/ActorList.hpp it is generated by the
Build Tool and is used to instantiate the set of Actors
created by the user
Why
The Actor List is needed to allow for gameplay
programmers to have a better user experience when making actors. The
main problem is that we don't want to use a scripting language for many
reasons, including but not limited to:
- Bloat
- Performance problems
- Time needs to be dedicated to learning the library's API
- Time needs to be dedicated to export functions and interfaces to the API
With that out of the way, we can now move to why the
ActorList exists. It's reason for existing is to
instantiate all unique Scriptable Objects created by the
gameplay programmers, add them to a set and then add the given instance
to the event pools for every matching Actor in the
scene.
Since we are using C++ the engine cannot automatically instantiate
every Scriptable Object derived class. Which leads to us
needing to find a way to go around this problem, and the most performant
way is to make the ActorList
How does it work
We know that the gameplay programmers won't create their
Scriptable Object from scratch, but will use the
UVKBuildTool CLI or GUI. With that knowledge
we do the following
- The BuildToolis executed, and we generate the regular.hppand.cppfiles.
- The ActorListis read and preprocessed
- An include statement is added to the bottom of the include chain
- A new line is placed below it
- The file is read until a new empty line is found
- If one is found, the code for creating an instance of the class is
added to the ACTOR_SET_DEPLOYmacro
- The file stream is closed and the BuildToolreturns
At this point, all that is left is for the user to do is recompile
the engine. Because the BuildTool updated that macro, the
code generated in ActorManager.cpp is updated to add the
newly generated Scriptable Object to the set, which results
in the events being called at the appropriate places.
Performance
This method has almost no performance costs due to the fact that it's equivalent to instantiating stack variables in the entry point and pushing their pointers to an array.
- Home
- Beginner concepts
- Advanced concepts
- Engine developer and contributor resources