vlibras-player-webjs
Version:
Biblioteca JavaScript moderna para integração do VLibras Player com React, Vue, Angular e vanilla JS
162 lines • 5.73 kB
JavaScript
;
/**
* Unity Bridge - Funções globais automáticas para o Unity WebGL
*
* Resolve o problema crítico identificado no FUNCOES-UTILITARIAS-VLIBRAS.md
* onde cada desenvolvedor precisa implementar manualmente as funções bridge.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.UnityBridge = void 0;
exports.setupUnityBridge = setupUnityBridge;
exports.isUnityBridgeReady = isUnityBridgeReady;
/**
* Classe responsável por configurar automaticamente o Unity Bridge
*/
class UnityBridge {
constructor(config = {}) {
this.callbacks = {};
this.config = {
autoSetup: true,
logCalls: false,
prefix: 'VLibras',
...config
};
}
/**
* Configura automaticamente as funções globais que o Unity espera
*/
static setupAutomatically(config) {
if (UnityBridge.isSetup) {
return UnityBridge.instance;
}
UnityBridge.instance = new UnityBridge(config);
if (typeof window !== 'undefined') {
UnityBridge.instance.registerGlobalFunctions();
UnityBridge.isSetup = true;
}
return UnityBridge.instance;
}
/**
* Registra callbacks para os eventos do Unity
*/
setCallbacks(callbacks) {
this.callbacks = { ...this.callbacks, ...callbacks };
}
/**
* Registra as funções globais no window
*/
registerGlobalFunctions() {
const globalObj = window;
const prefix = this.config.prefix;
// Função para log opcional
const log = (name, ...args) => {
if (this.config.logCalls) {
console.log(`[${prefix}Bridge] ${name}:`, ...args);
}
};
// onPlayingStateChange - Estado de reprodução
globalObj[`${prefix}_onPlayingStateChange`] = (isPlaying) => {
log('onPlayingStateChange', isPlaying);
this.callbacks.onPlayingStateChange?.(isPlaying);
};
// GetAvatar - Recebe o avatar do Unity
globalObj[`${prefix}_GetAvatar`] = (avatar) => {
log('GetAvatar', avatar);
this.callbacks.GetAvatar?.(avatar);
};
// onLoadPlayer - Player carregado
globalObj[`${prefix}_onLoadPlayer`] = () => {
log('onLoadPlayer');
this.callbacks.onLoadPlayer?.();
};
// onProgress - Progresso de carregamento
globalObj[`${prefix}_onProgress`] = (progress) => {
log('onProgress', progress);
this.callbacks.onProgress?.(progress);
};
// onCounterGloss - Contador de gloss
globalObj[`${prefix}_onCounterGloss`] = (counter, glossLength) => {
log('onCounterGloss', counter, glossLength);
this.callbacks.onCounterGloss?.(counter, glossLength);
};
// onFinishWelcome - Fim da animação de boas-vindas
globalObj[`${prefix}_onFinishWelcome`] = (finished) => {
log('onFinishWelcome', finished);
this.callbacks.onFinishWelcome?.(finished);
};
// onError - Erros do Unity
globalObj[`${prefix}_onError`] = (error) => {
log('onError', error);
this.callbacks.onError?.(error);
};
// Função de compatibilidade com nomes antigos
this.setupLegacyCompatibility(globalObj);
}
/**
* Compatibilidade com nomes de função legados
*/
setupLegacyCompatibility(globalObj) {
const prefix = this.config.prefix;
// Aliases para compatibilidade
globalObj.onPlayingStateChange = globalObj[`${prefix}_onPlayingStateChange`];
globalObj.GetAvatar = globalObj[`${prefix}_GetAvatar`];
globalObj.onLoadPlayer = globalObj[`${prefix}_onLoadPlayer`];
globalObj.onProgress = globalObj[`${prefix}_onProgress`];
globalObj.onCounterGloss = globalObj[`${prefix}_onCounterGloss`];
globalObj.onFinishWelcome = globalObj[`${prefix}_onFinishWelcome`];
globalObj.onError = globalObj[`${prefix}_onError`];
}
/**
* Remove as funções globais (cleanup)
*/
cleanup() {
if (typeof window === 'undefined')
return;
const globalObj = window;
const prefix = this.config.prefix;
// Remove funções prefixadas
delete globalObj[`${prefix}_onPlayingStateChange`];
delete globalObj[`${prefix}_GetAvatar`];
delete globalObj[`${prefix}_onLoadPlayer`];
delete globalObj[`${prefix}_onProgress`];
delete globalObj[`${prefix}_onCounterGloss`];
delete globalObj[`${prefix}_onFinishWelcome`];
delete globalObj[`${prefix}_onError`];
// Remove aliases
delete globalObj.onPlayingStateChange;
delete globalObj.GetAvatar;
delete globalObj.onLoadPlayer;
delete globalObj.onProgress;
delete globalObj.onCounterGloss;
delete globalObj.onFinishWelcome;
delete globalObj.onError;
UnityBridge.isSetup = false;
}
/**
* Verifica se o bridge está configurado
*/
static isConfigured() {
return UnityBridge.isSetup;
}
/**
* Obtém a instância atual do bridge
*/
static getInstance() {
return UnityBridge.instance || null;
}
}
exports.UnityBridge = UnityBridge;
UnityBridge.isSetup = false;
/**
* Função de conveniência para setup automático
*/
function setupUnityBridge(config) {
return UnityBridge.setupAutomatically(config);
}
/**
* Hook para verificar se o Unity Bridge está pronto
*/
function isUnityBridgeReady() {
return UnityBridge.isConfigured();
}
//# sourceMappingURL=UnityBridge.js.map