diff --git a/src/classes/SceneData.ts b/src/classes/SceneData.ts index d78aecf..b04d7fe 100644 --- a/src/classes/SceneData.ts +++ b/src/classes/SceneData.ts @@ -15,3 +15,11 @@ export class SceneData { features: TFeatureConfig[] = []; dialogs: TDialogConfig[] = []; } + +export class SceneFeatures { + analytics: boolean = false; + customizations: boolean = false; + dialogs: boolean = false; + entityPlacement: boolean = false; + moderation: boolean = false; +} diff --git a/src/classes/StoredImage.ts b/src/classes/StoredImage.ts index 26be006..e02d0ab 100644 --- a/src/classes/StoredImage.ts +++ b/src/classes/StoredImage.ts @@ -3,6 +3,7 @@ import { recordEvent } from "../analytics"; import { sdkImageFlippedDimension, sdkImagesAreFlipped, sdkImagesFace, vlmImagesFace } from "../helpers/defaults"; import { getEntityByName } from "../helpers/entity"; import { IEmission, ITexture, ITransform } from "../interfaces/index"; +import { sceneFeatures } from "../sceneData"; import { imageInstances, imageMaterials } from "../storage"; import { EClickEventType, TClickEvent, TImageInstanceConfig, TImageMaterialConfig, TTransform } from "../types/index"; import { StoredEntityInstance } from "./StoredEntity"; @@ -272,7 +273,7 @@ export class StoredImageInstance extends StoredEntityInstance implements ITransf trackClickEvent: CallableFunction = (clickEvent: TClickEvent, id: string) => { const trackingId = clickEvent.trackingId || id; - if (clickEvent.hasTracking) { + if (clickEvent.hasTracking && sceneFeatures.analytics) { recordEvent(trackingId); } }; diff --git a/src/connect.ts b/src/connect.ts index 5687e15..65f942f 100644 --- a/src/connect.ts +++ b/src/connect.ts @@ -7,7 +7,7 @@ import { createImage, updateImage, updateImageInstance, createImageInstance, del import { createNft, createNftInstance, deleteNft, deleteNftInstance, updateNft, updateNftInstance } from "./nfts"; import { createVideoScreen, updateVideoScreen, updateVideoInstance, createVideoInstance, deleteVideoScreen, deleteVideoInstance } from "./videos"; import { updateCustomization, deleteCustomization } from "./custom"; -import { updateSceneData } from "./sceneData"; +import { updateSceneData, updateSceneFeatures } from "./sceneData"; import { updateModeration } from "./moderation"; import { initScene } from "./init"; import { checkPreviewMode, isPreview, runLocalServer, runStagingServer } from "./environment"; @@ -98,6 +98,7 @@ export const connectCMS = async () => { } updateSceneData(message.sceneData); + updateSceneFeatures(message.features); switch (message.action) { case "init": diff --git a/src/sceneData.ts b/src/sceneData.ts index c125221..98a53ad 100644 --- a/src/sceneData.ts +++ b/src/sceneData.ts @@ -1,9 +1,15 @@ -import { SceneData } from "./classes/SceneData"; -import { TSceneData } from "./types/SceneData"; +import { SceneData, SceneFeatures } from "./classes/SceneData"; +import { TSceneData, TSceneFeatures } from "./types/SceneData"; export let sceneData: TSceneData = new SceneData(); +export let sceneFeatures: TSceneFeatures = new SceneFeatures(); export const updateSceneData = (sceneDataConfig: TSceneData) => { - sceneData = sceneDataConfig; -} + sceneData = sceneDataConfig; +}; +export const updateSceneFeatures = (sceneFeaturesConfig: TSceneFeatures) => { + Object.keys(sceneFeaturesConfig).forEach((feature: string) => { + sceneFeatures[feature] = sceneFeaturesConfig[feature]; + }); +}; diff --git a/src/types/SceneData.ts b/src/types/SceneData.ts index 297ccac..8b8bd9f 100644 --- a/src/types/SceneData.ts +++ b/src/types/SceneData.ts @@ -15,3 +15,11 @@ export type TSceneData = { features: TFeatureConfig[]; dialogs: TDialogConfig[]; }; + +export type TSceneFeatures = { + analytics: boolean; + customizations: boolean; + dialogs: boolean; + entityPlacement: boolean; + moderation: boolean; +}; \ No newline at end of file diff --git a/src/types/WebSocketMessage.ts b/src/types/WebSocketMessage.ts index 2565b71..511bc24 100644 --- a/src/types/WebSocketMessage.ts +++ b/src/types/WebSocketMessage.ts @@ -2,13 +2,13 @@ import { TCustomizationConfig } from "./Customization"; import { TEntityInstanceConfig, TEntityMaterialConfig } from "./Entity"; import { TImageInstanceConfig, TImageMaterialConfig } from "./Image"; import { TNFTConfig, TNFTInstanceConfig } from "./NFT"; -import { TSceneData } from "./SceneData"; +import { TSceneData, TSceneFeatures } from "./SceneData"; import { TVideoInstanceConfig, TVideoMaterialConfig } from "./VideoScreen"; export type TWebSocketMessage = { action: string; sceneData: TSceneData; - features?: { [id: string]: boolean }; + features: TSceneFeatures; entityData?: TEntityMaterialConfig | TVideoMaterialConfig | TImageMaterialConfig | TNFTConfig; instanceData?: TEntityInstanceConfig | TVideoInstanceConfig | TImageInstanceConfig | TNFTInstanceConfig; customizationData?: TCustomizationConfig;