Cogs.Core
CurtainViewExtension.cpp
1#include "CurtainViewComponent.h"
2
3#include "CurtainViewSystem.h"
4
5#include "Context.h"
6#include "EntityDefinition.h"
7#include "EntityStore.h"
8#include "ResourceManifest.h"
9#include "ExtensionRegistry.h"
10#include "Resources/ResourceStore.h"
11
12namespace Cogs::Core::CurtainView
13{
15 {
17 ExtensionRegistry::add(this, COGS_CORE_VERSION_STRING);
18 }
19
20 bool initializeStatic() override {
21 CurtainViewComponent::registerType();
22 return true;
23 }
24
25 bool initialize(Context *context) override {
26 const std::string resourceArchive = "Cogs.Core.Extensions.CurtainView.zip";
27
28#ifdef EMSCRIPTEN
29 bool resourceArchiveAdded = false;
30 auto manifest = getResourceManifest(context);
31 for (auto& item : manifest) {
32 if (item.find(resourceArchive) != std::string::npos) {
33 context->resourceStore->addResourceArchive(item);
34 resourceArchiveAdded = true;
35 break;
36 }
37 }
38 if (!resourceArchiveAdded) {
39 context->resourceStore->addResourceArchive(resourceArchive);
40 }
41#else
42 context->resourceStore->addSearchPath("../Extensions/CurtainView/Data/");
43 context->resourceStore->addResourceArchive(resourceArchive);
44#endif
45
46 ExtensionRegistry::registerExtensionSystem<CurtainViewSystem>(context, SystemPriority::PreDynamicComponents, 8);
47
48 EntityDefinition definition = {};
49 definition.name = "CurtainView";
50 definition.components = std::vector<std::string>{ "TransformComponent", "SceneComponent", "CurtainViewComponent", "MeshComponent", "MeshRenderComponent" };
51 context->store->addEntityDefinition(definition);
52 return true;
53 }
54
55 const char * getExtensionKey() const override { return "CurtainView"; }
56 } curtainViewExtensionInstance;
57}// namespace ...
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
void addEntityDefinition(const EntityDefinition &definition)
Add the given entity definition to the store.
Definition: EntityStore.cpp:59
static void add(Extension *extension, StringView version)
Adds the given extension to the registry, ensuring the initialization methods are called at appropria...
const char * getExtensionKey() const override
Get the extensions unique key, used to check for extension presence and retrieve extension specific d...
bool initialize(Context *context) override
Initialize extension for the given context.
bool initializeStatic() override
Initialize extension statically.
Defines how to construct entities of a certain type by a list of components to instantiate and defaul...
std::vector< std::string > components
Names of the component types to instantiate when creating an entity from this definition.
Defines an extension to Cogs.Core and provides methods to override in order to initialize extension c...
@ PreDynamicComponents
Run before the dynamic components.
Definition: Engine.h:46