9 #include "appeventhandler.h"
12 #include <rtti/typeinfo.h>
14 #include <nap/timer.h>
15 #include <nap/logger.h>
32 template<
typename APP,
typename HANDLER>
92 std::unique_ptr<APP> mApp =
nullptr;
93 std::unique_ptr<HANDLER> mHandler =
nullptr;
103 template<
typename APP,
typename HANDLER>
110 template<
typename APP,
typename HANDLER>
117 template<
typename APP,
typename HANDLER>
121 assert(RTTI_OF(APP).is_derived_from(RTTI_OF(
BaseApp)));
127 mApp = std::make_unique<APP>(core);
128 mHandler = std::make_unique<HANDLER>(*mApp);
132 template<
typename APP,
typename HANDLER>
139 if (!mCore.initializeEngine(error))
141 error.fail(
"Unable to initialize engine");
148 if (handle ==
nullptr)
151 #ifdef NAP_ENABLE_PYTHON
152 if (!mCore.initializePython(error))
156 std::string data_dir = mCore.getProjectInfo()->getDataDirectory();
158 nap::Logger::info(
"Current working directory: % s", data_dir.c_str());
161 if (!error.check(!mCore.getProjectInfo()->mDefaultData.empty(),
"Missing project data, %s 'Data' field is empty",
162 mCore.getProjectInfo()->getProjectDir().c_str()))
167 nap::Logger::info(
"Loading data: %s", data_file.c_str());
168 if (!error.check(mCore.getResourceManager()->loadFile(data_file, error),
"Failed to load data: %s", data_file.c_str()))
172 mCore.getResourceManager()->watchDirectory(data_dir);
175 if(!error.check(app.
init(error),
"Unable to initialize application"))
179 app_event_handler.
start();
182 std::function<void(
double)> update_call = std::bind(&APP::update, mApp.get(), std::placeholders::_1);
201 mCore.update(update_call);
209 delay_time = frame_time - timer.
getMillis();
210 if(delay_time.count() > 0)
211 std::this_thread::sleep_for(delay_time);
225 template<
typename APP,
typename HANDLER>
232 template<
typename APP,
typename HANDLER>