This repository has been archived by the owner on Nov 12, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 8
[E] Main.cpp
Madman10K edited this page Aug 10, 2023
·
6 revisions
The main.cpp
file is located under Generated/main.cpp
it contains the entry point of the program and is auto-generated by the UVKBuildTool
. Here is an example:
// This is an autogenerated file, touching it is not recommended
#include <Engine.hpp>
#include "Source/StartupLevel.hpp"
#include "Source/GameGameInstance.hpp"
#include <GameFramework/Components/Components.hpp>
#include <WrapperSource/Wrapper.hpp>
int main(int argc, char** argv)
{
UVK_START(true);
Wrapper::wbegin();
UVK::AudioManager manager;
bool bUsesEditor = false;
#ifndef PRODUCTION
if (argv[1])
{
std::string cmd = argv[1];
if (cmd == "--editor")
{
bUsesEditor = true;
}
}
#endif
auto* st = new UVK::StartupLevel;
UVK::Utility::getGlobal().getEditor() = bUsesEditor;
UVK::Utility::getGlobal().currentLevel = st;
auto* mode = new UVK::GameGameInstance();
UVK::Utility::getGlobal().instance = mode;
UVK::UVKGlobal::openLevelInternal("tst", true);
UVK::Renderer(UVK::Utility::getGlobal().currentLevel, bUsesEditor);
Wrapper::wend();
}
While below, we have the mainmodded.cpp
file used by the moddable game:
// This is an autogenerated file, touching it is not recommended
#include <Engine.hpp>
#include "Source/StartupLevel.hpp"
#include "Source/GameGameInstance.hpp"
#include <GameFramework/Components/Components.hpp>
#include <WrapperSource/Wrapper.hpp>
#include <urll.h>
int main(int argc, char** argv)
{
UVK_START(true);
// load modded symbols
#ifdef _WIN32
void* handle = URLL::dlopen("Modlib.dll");
#else
// That ./ is required on unix systems
void* handle = URLL::dlopen("./libModlib.so");
#endif
bool bCanClose = false;
if (handle != nullptr)
{
bCanClose = true;
if (URLL::dlsym(handle, "modlibbegin", UVK::Utility::getGlobal().modbegin) == handle && URLL::dlsym(handle, "modlibend", UVK::Utility::getGlobal().modend) == handle && URLL::dlsym(handle, "modlibtick", UVK::Utility::getGlobal().modtick) == handle)
Logger::log("Loaded all mods!", UVK_LOG_TYPE_SUCCESS);
else
Logger::log("Failed to load some or all of the initial mod library functions, mod events will not be loaded! Error: ", UVK_LOG_TYPE_WARNING, URLL::dlerror());
}
else
Logger::log("Failed to load the mod library!", UVK_LOG_TYPE_WARNING);
Wrapper::wbegin();
UVK::AudioManager manager;
bool bUsesEditor = false;
#ifndef PRODUCTION
if (argv[1])
{
std::string cmd = argv[1];
if (cmd == "--editor")
bUsesEditor = true;
}
#endif
auto* st = new UVK::StartupLevel;
UVK::Utility::getGlobal().getEditor() = bUsesEditor;
UVK::Utility::getGlobal().currentLevel = st;
auto* mode = new UVK::GameGameInstance();
UVK::Utility::getGlobal().instance = mode;
UVK::UVKGlobal::openLevelInternal("tst", true);
UVK::Renderer(UVK::Utility::getGlobal().currentLevel, bUsesEditor);
Wrapper::wend();
if (bCanClose && URLL::dlclose(handle) != 0)
Logger::log("Error when closing the mod handle, message:", UVK_LOG_TYPE_ERROR, URLL::dlerror());
}
Generally, both main files do the same thing
- Initialize startup settings
- Decide on whether to launch the editor or not
- Depending on the application type, whether to load mods
- They allocate and cache the multiple gameplay classes
- They load the startup level
- They start the renderer and the engine
This project is supported by all the people who joined our discord server and became beta testers. If you want to join the discord you can click here
- Home
- Beginner concepts
- Advanced concepts
- Engine developer and contributor resources