The UVK::Level class
The UVK::Level
class comprises 2 distinct code
regions
- The 3 regular gameplay class events
- The level file handling.
Events
The level contains a pointer to a Game Mode
class, which
contains all other gameplay class types except the level itself, the
GameInstance
and the Scriptable Objects
. More
about the Game Mode
class and the Level
's
relationship with it will be explained in the Game Mode
chapter.
Level files
Opening and closing files
The level class also handles saving and loading level files.
To open a new level, call the
template<typename T>
static void open(String location)
function. As a template parameter put the type of the level you want
to open, as your function parameter put the location to your level
starting from the Content/
folder (don't list an
extension)
To save a level call the
static void save(String location);
function with the location starting from the Content/
folder (don't list an extension)
Other functions
The level class offers so called get
functions to make
navigating the class hierarchy easier and less verbose.
static PlayerController* getPlayerController(Level* lvl);
static Pawn* getPawn(Level* lvl);
static GameState* getGameState(Level* lvl);
static PlayerState* getPlayerState(Level* lvl);
To change the ambient colour and intensity, call the
static FVector4& getAmbientLighting()
function. The return value is a 4 argument vector with the
x
, y
and z
values corresponding
to r
, g
and b
. The fourth
value(w) is the intensity of the lighting.
To change the background colour, call the
static FVector4& getSceneColour();
function. The return value is a reference to a 4 value vector with
x
, y
, z
and w
corresponding to r
, g
, b
and
a
To change the name(not to be confused with the filename) of the level, call the
static std::string& getLevelName();
function. It returns a reference to a standard string containing the name.
Casting
You can use the cast function to convert a generic Level
pointer into its original type, like this
auto* originalLevel = Level::cast<YourOriginalLevelType>(aPointerToAGenericLevel);
Additional information for engine developers
The function for opening levels is kind of complicated, so here comes an explanation:
When a user calls the
template<typename T>
static void open(String location)
{
.openFunction = [location]()
global{
.currentLevel->endPlay();
globaldelete global.currentLevel;
* lvl = new T();
T.currentLevel = lvl;
global::openInternal(location);
T.currentLevel->beginPlay();
global};
}
function, a global variable of type std::function
,
member of the UVK::UVKGlobal
class, is assigned to a
lambda. The following lambda only needs to capture the
location
variable, since that is the only thing the
function needs. After it is assigned, the function will be called next
frame.
When the lambda is executed 6 things will happen
- The end event for the current level will be called
- The heap memory for the current level will be freed
- A new level will be constructed and allocated to the heap from the type provided
- The current level will be set to the newly created level
- The internal function for opening a level file will be called, which will load all settings and actors from the provided level file into memory
- Finally, the
begin
function for the new level will be called
Now we need to move to a different file. GLPipeline.cpp
L105 calls a function from the UVK::UVKGlobal
class called
global.finalizeOpening();
. This function is called every
frame if the editor isn't in use. What it does is, it calls the function
pointer that was assigned in the original open function, and then resets
the function pointer to an empty lambda.
- Home
- Beginner concepts
- Advanced concepts
- Engine developer and contributor resources