Cogs.Core
BadgeSetExtension.cpp
1#include "Context.h"
2#include "ExtensionRegistry.h"
3#include "Resources/ResourceStore.h"
4#include "ResourceManifest.h"
5#include "Serialization/EntityReader.h"
6
7#include "BadgeSetSystem.h"
8#include "BadgeSetComponent.h"
9
10#include "Foundation/Logging/Logger.h"
11
12namespace {
13 Cogs::Logging::Log gLogger = Cogs::Logging::getLogger("BadgeSetExtension");
14
15 constexpr const char* cBadgeSetEntityDefinition = R"(
16 { "name": "BadgeSet",
17 "components" : [
18 "TransformComponent",
19 "SceneComponent",
20 "BadgeSetComponent",
21 "MeshComponent",
22 "InstancedMeshRenderComponent"
23 ]
24 })";
25
26}
27
28namespace Cogs::Core {
29
31 {
32 static constexpr const char* cExtensionKey = "BadgeSet";
33
34 BadgeSetExtension() { ExtensionRegistry::add(this, COGS_CORE_VERSION_STRING); }
35
36 virtual bool initializeStatic() override {
38 return true;
39 }
40
41 virtual const char* getExtensionKey() const override { return cExtensionKey; }
42
43 virtual bool initialize(Context* context) override {
44
45 const std::string resourceArchive = "Cogs.Core.Extensions.BadgeSet.zip";
46
47
48#ifdef __EMSCRIPTEN__
49
50 bool resourceArchiveAdded = false;
51 auto manifest = getResourceManifest(context);
52 for (auto& item : manifest) {
53 if (item.find(resourceArchive) != std::string::npos) {
54 context->resourceStore->addResourceArchive(item);
55 resourceArchiveAdded = true;
56 break;
57 }
58 }
59 if (!resourceArchiveAdded) {
60 context->resourceStore->addResourceArchive(resourceArchive);
61 }
62
63#else
64 context->resourceStore->addResourceArchive(resourceArchive);
65
66#endif
67
68 readEntityDefinition(cBadgeSetEntityDefinition, context->store);
69
70 ExtensionRegistry::registerExtensionSystem<BadgeSetSystem>(context, SystemPriority::Geometry, 16);
71
72 return true;
73 }
74 }BadgeSetExtensionInstance;
75}
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Definition: Context.h:83
class EntityStore * store
Entity store.
Definition: Context.h:231
std::unique_ptr< class ResourceStore > resourceStore
ResourceStore service instance.
Definition: Context.h:210
static void add(Extension *extension, StringView version)
Adds the given extension to the registry, ensuring the initialization methods are called at appropria...
Log implementation class.
Definition: LogManager.h:140
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....
constexpr Log getLogger(const char(&name)[LEN]) noexcept
Definition: LogManager.h:181
static void registerType()
Register the type in the type system.
virtual bool initialize(Context *context) override
Initialize extension for the given context.
virtual const char * getExtensionKey() const override
Get the extensions unique key, used to check for extension presence and retrieve extension specific d...
virtual bool initializeStatic() override
Initialize extension statically.
Defines an extension to Cogs.Core and provides methods to override in order to initialize extension c...
@ Geometry
Run at the time geometry data is updated.
Definition: Engine.h:70