Cogs.Core
ScriptingManager.cpp
1#include "ScriptingManager.h"
2#include "Resources/ResourceStore.h"
3
4#include "Foundation/Logging/Logger.h"
5#include "Foundation/Platform/IO.h"
6
7namespace
8{
9 Cogs::Logging::Log logger = Cogs::Logging::getLogger("ScriptingManager");
10}
11
12Cogs::Core::ScriptingManager::ScriptingManager(Context * /*context*/)
13{
14
15}
16
17void Cogs::Core::ScriptingManager::initialize()
18{
19
20}
21
22void Cogs::Core::ScriptingManager::cleanup()
23{
24 for (auto & engine : engines) {
25 engine->cleanup();
26 }
27
28 engines.clear();
29}
30
31void Cogs::Core::ScriptingManager::addScriptingEngine(std::unique_ptr<ScriptingEngine> engine)
32{
33 engine->initialize();
34 engines.push_back(std::move(engine));
35}
36
37Cogs::Core::ScriptContextHandle Cogs::Core::ScriptingManager::createContext(Cogs::ComponentModel::Entity * entity, const StringView & source, ScriptFlags flags)
38{
39 if ((flags & ScriptFlags::JavaScript) == 0 && (flags & ScriptFlags::Lua) == 0) {
40 if ((flags & ScriptFlags::JavaScript) == 0 && IO::extension(source.data()) == ".js") {
41 flags |= ScriptFlags::JavaScript;
42 } else if ((flags & ScriptFlags::Lua) == 0 && IO::extension(source.data()) == ".lua") {
43 flags |= ScriptFlags::Lua;
44 }
45 }
46
47 for (auto & engine : engines) {
48 if (engine->canLoad(flags)) {
49 return engine->createContext(entity, source, flags);
50 }
51 }
52
53 LOG_ERROR(logger, "No suitable scripting engine found.");
54 return nullptr;
55}
Container for components, providing composition of dynamic entities.
Definition: Entity.h:18
Log implementation class.
Definition: LogManager.h:139
constexpr Log getLogger(const char(&name)[LEN]) noexcept
Definition: LogManager.h:180