kadou-game-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/kadou-game-sdk.cjs +1761 -0
- package/dist/kadou-game-sdk.cjs.map +1 -0
- package/dist/kadou-game-sdk.esm.js +1752 -0
- package/dist/kadou-game-sdk.esm.js.map +1 -0
- package/dist/kadou-game-sdk.umd.js +1767 -0
- package/dist/kadou-game-sdk.umd.js.map +1 -0
- package/dist/kadou-game-sdk.umd.min.js +2 -0
- package/dist/kadou-game-sdk.umd.min.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kadou-game-sdk.umd.js","sources":["../src/version.js","../src/constants/message-types.js","../src/core/utils.js","../src/core/event-emitter.js","../src/core/post-message-channel.js","../src/core/message-bus.js","../src/ui/base-page.js","../src/ui/utils/style.js","../src/ui/utils/dom.js","../src/ui/start-page.js","../src/ui/end-page.js","../src/ui/overlay-manager.js","../src/theme/theme-registry.js","../src/theme/theme-loader.js","../src/manager/game-manager.js","../src/index.js"],"sourcesContent":["var SDK_VERSION = '1.0.0';\r\n\r\nexport { SDK_VERSION };\r\nexport default SDK_VERSION;","/**\r\n * 卡兜游戏 SDK 通讯消息类型定义\r\n * 用于 父页面(Vue壳) <-> 子iframe(游戏) 之间的 postMessage 通讯\r\n */\r\nvar MESSAGE_TYPES = {\r\n\r\n // 基础系统\r\n SDK_READY: 'SDK_READY',\r\n HEARTBEAT_PING: 'HEARTBEAT_PING',\r\n HEARTBEAT_PONG: 'HEARTBEAT_PONG',\r\n ERROR_THROWN: 'ERROR_THROWN',\r\n\r\n // 父 -> 子:游戏控制\r\n GAME_LOAD: 'GAME_LOAD',//加载游戏\r\n GAME_START: 'GAME_START',//游戏开始\r\n GAME_PAUSE: 'GAME_PAUSE',//游戏暂停\r\n GAME_RESUME: 'GAME_RESUME',//游戏恢复\r\n GAME_RESTART: 'GAME_RESTART',//重玩游戏\r\n GAME_DESTROY: 'GAME_DESTROY',//销毁游戏\r\n\r\n // 子 -> 父:游戏状态\r\n GAME_READY: 'GAME_READY',//游戏准备完成\r\n GAME_LOADED: 'GAME_LOADED',//游戏加载完成\r\n GAME_LOADING:'GAME_LOADING',//游戏加载进度\r\n GAME_FINISH: 'GAME_FINISH',//游戏结束\r\n GAME_RANK: 'GAME_RANK',//游戏排行榜\r\n\r\n // 配置 / 主题\r\n THEME_UPDATE: 'THEME_UPDATE',//更新主题\r\n CONFIG_UPDATE: 'CONFIG_UPDATE',//配置更新\r\n\r\n // 题目 / 答题\r\n QUESTION_SUBMIT: 'QUESTION_SUBMIT', //单题提交\r\n QUESTION_PREV: 'QUESTION_PREV',//上一题\r\n QUESTION_NEXT: 'QUESTION_NEXT',//下一题\r\n ANSWER_START: 'ANSWER_START',//开始答题\r\n ANSWER_COMPLETED: 'ANSWER_COMPLETED',//答题完成\r\n\r\n // 音频\r\n AUDIO_VOLUME_CHANGE: 'AUDIO_VOLUME_CHANGE',//调节音量包括 音效背景音\r\n\r\n //UI页面\r\n PAGE_START_SHOW: 'PAGE_START_SHOW',//显示开始画面\r\n PAGE_END_SHOW: 'PAGE_END_SHOW',//显示结束画面\r\n\r\n EXTENSION_EVENT: 'EXTENSION_EVENT',//扩展消息类型\r\n\r\n /**\r\n * 异常消息\r\n */\r\n ERROR: 'ERROR'\r\n};\r\n\r\nexport { MESSAGE_TYPES };\r\nexport default MESSAGE_TYPES;","export function isFunction(fn) {\r\n return typeof fn === 'function';\r\n}\r\n\r\nexport function isObject(val) {\r\n return Object.prototype.toString.call(val) === '[object Object]';\r\n}\r\n\r\nexport function noop() {}\r\n\r\nexport function createRequestId(prefix) {\r\n prefix = prefix || 'msg';\r\n return prefix + '_' + new Date().getTime() + '_' + Math.random().toString(16).slice(2, 10);\r\n}","import { isFunction } from './utils.js';\r\n\r\nfunction EventEmitter() {\r\n this.events = {};\r\n}\r\n\r\nEventEmitter.prototype.on = function (eventName, handler) {\r\n if (!eventName || !isFunction(handler)) return this;\r\n\r\n if (!this.events[eventName]) {\r\n this.events[eventName] = [];\r\n }\r\n\r\n this.events[eventName].push(handler);\r\n return this;\r\n};\r\n\r\nEventEmitter.prototype.once = function (eventName, handler) {\r\n var self = this;\r\n\r\n if (!eventName || !isFunction(handler)) return this;\r\n\r\n function wrapper() {\r\n self.off(eventName, wrapper);\r\n handler.apply(null, arguments);\r\n }\r\n\r\n wrapper.__original__ = handler;\r\n this.on(eventName, wrapper);\r\n\r\n return this;\r\n};\r\n\r\nEventEmitter.prototype.off = function (eventName, handler) {\r\n var handlers;\r\n var result;\r\n var i;\r\n var fn;\r\n\r\n if (!eventName) {\r\n this.events = {};\r\n return this;\r\n }\r\n\r\n handlers = this.events[eventName];\r\n if (!handlers || !handlers.length) return this;\r\n\r\n if (!handler) {\r\n delete this.events[eventName];\r\n return this;\r\n }\r\n\r\n result = [];\r\n for (i = 0; i < handlers.length; i++) {\r\n fn = handlers[i];\r\n if (fn !== handler && fn.__original__ !== handler) {\r\n result.push(fn);\r\n }\r\n }\r\n\r\n if (result.length) {\r\n this.events[eventName] = result;\r\n } else {\r\n delete this.events[eventName];\r\n }\r\n\r\n return this;\r\n};\r\n\r\nEventEmitter.prototype.emit = function (eventName) {\r\n var handlers = this.events[eventName];\r\n var args;\r\n var i;\r\n\r\n if (!handlers || !handlers.length) return this;\r\n\r\n args = Array.prototype.slice.call(arguments, 1);\r\n handlers = handlers.slice();\r\n\r\n for (i = 0; i < handlers.length; i++) {\r\n try {\r\n handlers[i].apply(null, args);\r\n } catch (error) {\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error('[EventEmitter] \"' + eventName + '\" handler error:', error);\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\nexport default EventEmitter;","import { createRequestId, isObject } from './utils.js';\r\nimport SDK_VERSION from '../version.js';\r\n\r\nvar DEFAULT_SOURCE = 'KADOU_GAME_SDK';\r\n\r\nfunction PostMessageChannel(options) {\r\n options = options || {};\r\n\r\n this.selfWindow = options.selfWindow || window;\r\n this.targetWindow = options.targetWindow || null;\r\n this.targetOrigin = options.targetOrigin || '*';\r\n this.source = options.source || DEFAULT_SOURCE;\r\n this.debug = !!options.debug;\r\n}\r\n\r\nPostMessageChannel.prototype.setTargetWindow = function (targetWindow) {\r\n this.targetWindow = targetWindow;\r\n return this;\r\n};\r\n\r\nPostMessageChannel.prototype.setTargetOrigin = function (targetOrigin) {\r\n this.targetOrigin = targetOrigin || '*';\r\n return this;\r\n};\r\n\r\nPostMessageChannel.prototype.createMessage = function (type, payload, meta) {\r\n payload = payload || {};\r\n meta = meta || {};\r\n\r\n return {\r\n source: this.source,\r\n version: SDK_VERSION,\r\n type: type,\r\n requestId: createRequestId(),\r\n timestamp: new Date().getTime(),\r\n payload: isObject(payload) ? payload : { value: payload },\r\n meta: isObject(meta) ? meta : {}\r\n };\r\n};\r\n\r\nPostMessageChannel.prototype.send = function (type, payload, meta) {\r\n var message;\r\n\r\n if (!this.targetWindow || !this.targetWindow.postMessage) {\r\n if (this.debug && typeof console !== 'undefined' && console.warn) {\r\n console.warn('[PostMessageChannel] targetWindow 不存在,消息发送失败:', type);\r\n }\r\n return null;\r\n }\r\n\r\n message = this.createMessage(type, payload, meta);\r\n this.targetWindow.postMessage(message, this.targetOrigin);\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[PostMessageChannel] send =>', message);\r\n }\r\n\r\n return message;\r\n};\r\n\r\nPostMessageChannel.prototype.isValidMessage = function (data) {\r\n return !!(\r\n data &&\r\n typeof data === 'object' &&\r\n data.source === this.source &&\r\n typeof data.type === 'string'\r\n );\r\n};\r\n\r\nexport default PostMessageChannel;","import EventEmitter from './event-emitter.js';\r\nimport PostMessageChannel from './post-message-channel.js';\r\n\r\nfunction MessageBus(options) {\r\n options = options || {};\r\n\r\n EventEmitter.call(this);\r\n\r\n this.channel = new PostMessageChannel(options);\r\n this.selfWindow = options.selfWindow || window;\r\n this.allowedOrigins = options.allowedOrigins || ['*'];\r\n this.debug = !!options.debug;\r\n\r\n this._boundOnMessage = this._onMessage.bind(this);\r\n this._listening = false;\r\n}\r\n\r\nMessageBus.prototype = Object.create(EventEmitter.prototype);\r\nMessageBus.prototype.constructor = MessageBus;\r\n\r\nMessageBus.prototype.start = function () {\r\n if (this._listening) return this;\r\n\r\n this.selfWindow.addEventListener('message', this._boundOnMessage, false);\r\n this._listening = true;\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[MessageBus] started');\r\n }\r\n\r\n return this;\r\n};\r\n\r\nMessageBus.prototype.stop = function () {\r\n if (!this._listening) return this;\r\n\r\n this.selfWindow.removeEventListener('message', this._boundOnMessage, false);\r\n this._listening = false;\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[MessageBus] stopped');\r\n }\r\n\r\n return this;\r\n};\r\n\r\nMessageBus.prototype.destroy = function () {\r\n this.stop();\r\n this.off();\r\n return this;\r\n};\r\n\r\nMessageBus.prototype.setTargetWindow = function (targetWindow) {\r\n this.channel.setTargetWindow(targetWindow);\r\n return this;\r\n};\r\n\r\nMessageBus.prototype.setTargetOrigin = function (targetOrigin) {\r\n this.channel.setTargetOrigin(targetOrigin);\r\n return this;\r\n};\r\n\r\nMessageBus.prototype.send = function (type, payload, meta) {\r\n return this.channel.send(type, payload, meta);\r\n};\r\n\r\nMessageBus.prototype._matchOrigin = function (origin) {\r\n var i;\r\n\r\n if (!this.allowedOrigins || !this.allowedOrigins.length) return true;\r\n if (this.allowedOrigins[0] === '*' || this.allowedOrigins.indexOf('*') > -1) return true;\r\n\r\n for (i = 0; i < this.allowedOrigins.length; i++) {\r\n if (this.allowedOrigins[i] === origin) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nMessageBus.prototype._onMessage = function (event) {\r\n var data = event.data;\r\n var origin = event.origin;\r\n var source = event.source;\r\n var context;\r\n\r\n if (!this._matchOrigin(origin)) {\r\n if (this.debug && typeof console !== 'undefined' && console.warn) {\r\n console.warn('[MessageBus] origin 不匹配,已忽略:', origin);\r\n }\r\n return;\r\n }\r\n\r\n if (!this.channel.isValidMessage(data)) return;\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[MessageBus] receive <=', data);\r\n }\r\n\r\n context = {\r\n rawEvent: event,\r\n origin: origin,\r\n sourceWindow: source\r\n };\r\n\r\n this.emit('*', data, context);\r\n this.emit(data.type, data.payload, data, context);\r\n};\r\n\r\nexport default MessageBus;","function BasePage() {\r\n this.el = null;\r\n this.events = [];\r\n}\r\n\r\n/**\r\n * 绑定事件,并记录下来,destroy 时统一卸载\r\n */\r\nBasePage.prototype.bindEvent = function (el, type, handler, options) {\r\n if (!el || !type || !handler) return;\r\n\r\n el.addEventListener(type, handler, options || false);\r\n\r\n this.events.push({\r\n el: el,\r\n type: type,\r\n handler: handler,\r\n options: options || false\r\n });\r\n};\r\n\r\n/**\r\n * 解绑全部事件\r\n */\r\nBasePage.prototype.unbindEvents = function () {\r\n var i;\r\n var item;\r\n\r\n for (i = 0; i < this.events.length; i++) {\r\n item = this.events[i];\r\n\r\n if (item && item.el) {\r\n item.el.removeEventListener(item.type, item.handler, item.options);\r\n }\r\n }\r\n\r\n this.events = [];\r\n};\r\n\r\n/**\r\n * 销毁页面\r\n */\r\nBasePage.prototype.destroy = function () {\r\n this.unbindEvents();\r\n\r\n if (this.el && this.el.parentNode) {\r\n this.el.parentNode.removeChild(this.el);\r\n }\r\n\r\n this.el = null;\r\n};\r\n\r\n/**\r\n * 是否已渲染\r\n */\r\nBasePage.prototype.isRendered = function () {\r\n return !!this.el;\r\n};\r\n\r\nexport default BasePage;","export function isPlainObject(obj) {\r\n return Object.prototype.toString.call(obj) === '[object Object]';\r\n}\r\n\r\nexport function mergeStyles(base, extra) {\r\n var result = {};\r\n var key;\r\n\r\n base = isPlainObject(base) ? base : {};\r\n extra = isPlainObject(extra) ? extra : {};\r\n\r\n for (key in base) {\r\n if (Object.prototype.hasOwnProperty.call(base, key)) {\r\n result[key] = base[key];\r\n }\r\n }\r\n\r\n for (key in extra) {\r\n if (Object.prototype.hasOwnProperty.call(extra, key)) {\r\n result[key] = extra[key];\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function normalizeStyleValue(key, value) {\r\n if (value == null) return '';\r\n\r\n if (key === 'backgroundImage' && value) {\r\n if (\r\n typeof value === 'string' &&\r\n value.indexOf('url(') !== 0 &&\r\n value !== 'none'\r\n ) {\r\n return 'url(\"' + value + '\")';\r\n }\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nexport function applyStyles(el, styles) {\r\n var key;\r\n if (!el || !styles) return;\r\n\r\n for (key in styles) {\r\n if (Object.prototype.hasOwnProperty.call(styles, key)) {\r\n el.style[key] = normalizeStyleValue(key, styles[key]);\r\n }\r\n }\r\n}","import { applyStyles } from './style.js';\r\n\r\nexport function createElement(tag, className, styles, text) {\r\n var el = document.createElement(tag);\r\n\r\n if (className) {\r\n el.className = className;\r\n }\r\n\r\n if (styles) {\r\n applyStyles(el, styles);\r\n }\r\n\r\n if (text != null) {\r\n el.textContent = String(text);\r\n }\r\n\r\n return el;\r\n}","import BasePage from './base-page.js';\r\nimport { mergeStyles } from './utils/style.js';\r\nimport { createElement } from './utils/dom.js';\r\n\r\nfunction StartPage() {\r\n BasePage.call(this);\r\n}\r\n\r\nStartPage.prototype = Object.create(BasePage.prototype);\r\nStartPage.prototype.constructor = StartPage;\r\n\r\n/**\r\n * 获取最终样式\r\n * 不再自己根据 themeKey 查主题\r\n * 直接使用 game-manager 传进来的最终页面配置\r\n */\r\nStartPage.prototype.getStyles = function (data) {\r\n data = data || {};\r\n\r\n var wrapperCss = mergeStyles(\r\n {\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n boxSizing: 'border-box',\r\n padding: '40px',\r\n color: '#ffffff',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center center',\r\n backgroundSize: 'cover',\r\n textAlign: 'center',\r\n zIndex: '99999'\r\n },\r\n data.wrapper\r\n );\r\n\r\n var overlayCss = mergeStyles(\r\n {\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n background: 'rgba(0, 0, 0, 0.28)'\r\n },\r\n data.overlay\r\n );\r\n\r\n var contentCss = mergeStyles(\r\n {\r\n position: 'relative',\r\n zIndex: '1',\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center'\r\n },\r\n data.content\r\n );\r\n\r\n var titleCss = mergeStyles(\r\n {\r\n fontSize: '85px',\r\n fontWeight: 'bold',\r\n textShadow: '2px 2px 4px #0b1c32',\r\n letterSpacing: '5px',\r\n lineHeight: '1.3',\r\n maxWidth: '90%',\r\n wordBreak: 'break-word'\r\n },\r\n data.title\r\n );\r\n\r\n var descCss = mergeStyles(\r\n {\r\n marginTop: '30px',\r\n width: '100%',\r\n whiteSpace: 'pre-wrap',\r\n lineHeight: '1.6',\r\n wordBreak: 'break-word',\r\n fontSize: '40px'\r\n },\r\n data.desc\r\n );\r\n\r\n var btnGroupCss = mergeStyles(\r\n {\r\n width: '100%',\r\n maxWidth: '800px',\r\n marginTop: '80px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n },\r\n data.buttonGroup\r\n );\r\n\r\n var btnCss = mergeStyles(\r\n {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minWidth: '240px',\r\n minHeight: '88px',\r\n padding: '20px 50px',\r\n boxSizing: 'border-box',\r\n cursor: 'pointer',\r\n fontSize: '40px',\r\n fontWeight: 'bold',\r\n backgroundColor: '#04b6bb',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center center',\r\n backgroundSize: 'cover',\r\n borderRadius: '50px',\r\n border: 'none',\r\n color: '#fff',\r\n transition: 'all 0.2s linear'\r\n },\r\n data.button\r\n );\r\n\r\n return {\r\n wrapperCss: wrapperCss,\r\n overlayCss: overlayCss,\r\n contentCss: contentCss,\r\n titleCss: titleCss,\r\n descCss: descCss,\r\n btnGroupCss: btnGroupCss,\r\n btnCss: btnCss\r\n };\r\n};\r\n\r\nStartPage.prototype.render = function (container, data, onStart) {\r\n data = data || {};\r\n\r\n if (!container) {\r\n throw new Error('[StartPage] render 失败:container 不存在');\r\n }\r\n\r\n this.destroy();\r\n\r\n var styles = this.getStyles(data);\r\n\r\n var titleText = data.titleText || '欢迎进入游戏';\r\n var descText = typeof data.descText === 'string' ? data.descText : '';\r\n var buttonText = data.buttonText || '开始游戏';\r\n\r\n var rootDom = createElement('div', 'kadou-start-page', styles.wrapperCss);\r\n var overlayDom = createElement('div', 'kadou-start-overlay', styles.overlayCss);\r\n var contentDom = createElement('div', 'kadou-start-content', styles.contentCss);\r\n var titleDom = createElement('div', 'kadou-start-title', styles.titleCss, titleText);\r\n\r\n rootDom.appendChild(overlayDom);\r\n contentDom.appendChild(titleDom);\r\n\r\n if (descText) {\r\n var descDom = createElement('div', 'kadou-start-desc', styles.descCss, descText);\r\n contentDom.appendChild(descDom);\r\n }\r\n\r\n var btnGroupDom = createElement('div', 'kadou-start-btn-group', styles.btnGroupCss);\r\n var btnDom = createElement('div', 'kadou-start-btn', styles.btnCss, buttonText);\r\n this.bindEvent(btnDom, 'click', function () {\r\n if (typeof onStart === 'function') {\r\n onStart();\r\n }\r\n });\r\n\r\n btnGroupDom.appendChild(btnDom);\r\n contentDom.appendChild(btnGroupDom);\r\n rootDom.appendChild(contentDom);\r\n\r\n container.appendChild(rootDom);\r\n this.el = rootDom;\r\n\r\n return rootDom;\r\n};\r\n\r\nexport default StartPage;","import BasePage from './base-page.js';\r\nimport { mergeStyles } from './utils/style.js';\r\nimport { createElement } from './utils/dom.js';\r\n\r\nfunction EndPage() {\r\n BasePage.call(this);\r\n}\r\n\r\nEndPage.prototype = Object.create(BasePage.prototype);\r\nEndPage.prototype.constructor = EndPage;\r\n\r\n/**\r\n * 获取最终样式\r\n * 直接使用 game-manager 传进来的最终页面配置\r\n */\r\nEndPage.prototype.getStyles = function (data) {\r\n data = data || {};\r\n\r\n var wrapperCss = mergeStyles(\r\n {\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n boxSizing: 'border-box',\r\n padding: '40px',\r\n color: '#ffffff',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center center',\r\n backgroundSize: 'cover',\r\n textAlign: 'center',\r\n zIndex: '99999'\r\n },\r\n data.wrapper\r\n );\r\n\r\n var overlayCss = mergeStyles(\r\n {\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n background: 'rgba(0, 0, 0, 0.35)'\r\n },\r\n data.overlay\r\n );\r\n\r\n var contentCss = mergeStyles(\r\n {\r\n position: 'relative',\r\n zIndex: '1',\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center'\r\n },\r\n data.content\r\n );\r\n\r\n var titleCss = mergeStyles(\r\n {\r\n fontSize: '72px',\r\n fontWeight: 'bold',\r\n lineHeight: '1.3',\r\n maxWidth: '90%',\r\n wordBreak: 'break-word',\r\n textShadow: '2px 2px 4px #0b1c32'\r\n },\r\n data.title\r\n );\r\n var timeCss = mergeStyles(\r\n {\r\n marginTop: '28px',\r\n fontSize:'40px',\r\n wordBreak: 'break-word'\r\n },\r\n data.time\r\n );\r\n var scoreCss = mergeStyles(\r\n {\r\n marginTop: '28px',\r\n fontSize:'40px',\r\n wordBreak: 'break-word'\r\n },\r\n data.score\r\n );\r\n\r\n var btnGroupCss = mergeStyles(\r\n {\r\n width: '100%',\r\n maxWidth: '900px',\r\n marginTop: '70px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n gap: '24px',\r\n flexWrap: 'wrap'\r\n },\r\n data.buttonGroup\r\n );\r\n\r\n var primaryBtnCss = mergeStyles(\r\n {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '20px 50px',\r\n boxSizing: 'border-box',\r\n cursor: 'pointer',\r\n fontSize: '40px',\r\n fontWeight: 'bold',\r\n background: '#04b6bb',\r\n borderRadius: '50px',\r\n border: 'none',\r\n color: '#fff',\r\n transition: 'all 0.2s linear'\r\n },\r\n data.primaryButton || data.button\r\n );\r\n\r\n var secondaryBtnCss = mergeStyles(\r\n {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '20px 50px',\r\n boxSizing: 'border-box',\r\n cursor: 'pointer',\r\n fontSize: '40px',\r\n fontWeight: 'bold',\r\n background: '#ff6600',\r\n borderRadius: '50px',\r\n color: '#fff',\r\n transition: 'all 0.2s linear'\r\n },\r\n data.secondaryButton\r\n );\r\n\r\n return {\r\n wrapperCss: wrapperCss,\r\n overlayCss: overlayCss,\r\n contentCss: contentCss,\r\n titleCss: titleCss,\r\n timeCss:timeCss,\r\n scoreCss: scoreCss,\r\n btnGroupCss: btnGroupCss,\r\n primaryBtnCss: primaryBtnCss,\r\n secondaryBtnCss: secondaryBtnCss\r\n };\r\n};\r\n\r\n/**\r\n * 渲染结束页\r\n * callbacks:\r\n * - onRestart\r\n * - onClose\r\n */\r\nEndPage.prototype.render = function (container, data, callbacks) {\r\n data = data || {};\r\n callbacks = callbacks || {};\r\n\r\n if (!container) {\r\n throw new Error('[EndPage] render 失败:container 不存在');\r\n }\r\n\r\n this.destroy();\r\n\r\n var styles = this.getStyles(data);\r\n\r\n var titleText = data.titleText || '游戏结束';\r\n var timeText = typeof data.timeText === 'string' ? data.timeText : '';\r\n var scoreText = typeof data.scoreText === 'string' ? data.scoreText : '';\r\n var primaryButtonText = data.primaryButtonText || data.buttonText || '再来一次';\r\n var secondaryButtonText = data.secondaryButtonText || '';\r\n\r\n var rootDom = createElement('div', 'kadou-end-page', styles.wrapperCss);\r\n var overlayDom = createElement('div', 'kadou-end-overlay', styles.overlayCss);\r\n var contentDom = createElement('div', 'kadou-end-content', styles.contentCss);\r\n var titleDom = createElement('div', 'kadou-end-title', styles.titleCss, titleText);\r\n\r\n rootDom.appendChild(overlayDom);\r\n contentDom.appendChild(titleDom);\r\n\r\n if (scoreText) {\r\n var scoreDom = createElement('div', 'kadou-end-score', styles.scoreCss, scoreText);\r\n contentDom.appendChild(scoreDom);\r\n }\r\n\r\n if (timeText) {\r\n var timeDom = createElement('div', 'kadou-end-time', styles.timeCss, timeText);\r\n contentDom.appendChild(timeDom);\r\n }\r\n\r\n var btnGroupDom = createElement('div', 'kadou-end-btn-group', styles.btnGroupCss);\r\n\r\n\r\n if (secondaryButtonText) {\r\n var secondaryBtnDom = createElement(\r\n 'div',\r\n 'kadou-end-secondary-btn',\r\n styles.secondaryBtnCss,\r\n secondaryButtonText\r\n );\r\n\r\n this.bindEvent(secondaryBtnDom, 'click', function () {\r\n if (typeof callbacks.onShowRank === 'function') {\r\n callbacks.onShowRank();\r\n }\r\n });\r\n\r\n btnGroupDom.appendChild(secondaryBtnDom);\r\n }\r\n if (primaryButtonText) {\r\n var primaryBtnDom = createElement(\r\n 'div',\r\n 'kadou-end-primary-btn',\r\n styles.primaryBtnCss,\r\n primaryButtonText\r\n );\r\n\r\n this.bindEvent(primaryBtnDom, 'click', function () {\r\n if (typeof callbacks.onRestart === 'function') {\r\n callbacks.onRestart();\r\n }\r\n });\r\n\r\n btnGroupDom.appendChild(primaryBtnDom);\r\n }\r\n\r\n if (btnGroupDom.childNodes.length > 0) {\r\n contentDom.appendChild(btnGroupDom);\r\n }\r\n\r\n rootDom.appendChild(contentDom);\r\n container.appendChild(rootDom);\r\n\r\n this.el = rootDom;\r\n\r\n return rootDom;\r\n};\r\n\r\nexport default EndPage;","import StartPage from './start-page.js';\r\nimport EndPage from './end-page.js';\r\n\r\nfunction OverlayManager(options) {\r\n options = options || {};\r\n\r\n this.container = options.container || document.body;\r\n this.startPage = null;\r\n this.endPage = null;\r\n}\r\n\r\n/**\r\n * 设置容器\r\n */\r\nOverlayManager.prototype.setContainer = function (container) {\r\n if (container) {\r\n this.container = container;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * 显示开始页\r\n * data 直接使用统一 pageData 结构\r\n */\r\nOverlayManager.prototype.showStartPage = function (data, callbacks) {\r\n var self = this;\r\n var finalCallbacks = callbacks || {};\r\n\r\n if (!this.container) {\r\n throw new Error('[OverlayManager] showStartPage 失败:container 不存在');\r\n }\r\n\r\n this.hideStartPage();\r\n\r\n this.startPage = new StartPage();\r\n this.startPage.render(\r\n this.container,\r\n data || {},\r\n function () {\r\n if (typeof finalCallbacks.onStart === 'function') {\r\n finalCallbacks.onStart();\r\n }\r\n\r\n // 如果没传回调,也不自动销毁,由外部决定何时关闭\r\n // 想点按钮立刻隐藏,可以把下面这行打开\r\n self.hideStartPage();\r\n }\r\n );\r\n\r\n return self;\r\n};\r\n\r\n/**\r\n * 隐藏开始页\r\n */\r\nOverlayManager.prototype.hideStartPage = function () {\r\n if (this.startPage) {\r\n this.startPage.destroy();\r\n this.startPage = null;\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 显示结束页\r\n */\r\nOverlayManager.prototype.showEndPage = function (data, callbacks) {\r\n var self = this;\r\n var finalCallbacks = callbacks || {};\r\n\r\n if (!this.container) {\r\n throw new Error('[OverlayManager] showEndPage 失败:container 不存在');\r\n }\r\n\r\n this.hideEndPage();\r\n\r\n this.endPage = new EndPage();\r\n this.endPage.render(\r\n this.container,\r\n data || {},\r\n {\r\n onRestart: function () {\r\n if (typeof finalCallbacks.onRestart === 'function') {\r\n finalCallbacks.onRestart();\r\n self.hideEndPage();\r\n }\r\n },\r\n onShowRank: function () {\r\n if (typeof finalCallbacks.onShowRank === 'function') {\r\n finalCallbacks.onShowRank();\r\n }\r\n }\r\n }\r\n );\r\n\r\n return self;\r\n};\r\n\r\n/**\r\n * 隐藏结束页\r\n */\r\nOverlayManager.prototype.hideEndPage = function () {\r\n if (this.endPage) {\r\n this.endPage.destroy();\r\n this.endPage = null;\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 全部隐藏\r\n */\r\nOverlayManager.prototype.hideAll = function () {\r\n this.hideStartPage();\r\n this.hideEndPage();\r\n return this;\r\n};\r\n\r\n/**\r\n * 销毁管理器\r\n */\r\nOverlayManager.prototype.destroy = function () {\r\n this.hideAll();\r\n this.container = null;\r\n};\r\n\r\nexport default OverlayManager;","var themes = {};\r\n\r\n/**\r\n * 注册主题\r\n * @param {string} key 主题 key\r\n * @param {object} config 主题配置\r\n */\r\nfunction registerTheme(key, config) {\r\n if (!key) {\r\n throw new Error('Theme key is required');\r\n }\r\n\r\n themes[key] = config || {};\r\n}\r\n\r\n/**\r\n * 是否已存在主题\r\n * @param {string} key\r\n * @returns {boolean}\r\n */\r\nfunction hasTheme(key) {\r\n return !!themes[key];\r\n}\r\n\r\n/**\r\n * 获取主题\r\n * @param {string} key\r\n * @returns {object|null}\r\n */\r\nfunction getTheme(key) {\r\n return themes[key] || themes.default || null;\r\n}\r\n\r\n/**\r\n * 清除某个主题\r\n * @param {string} key\r\n */\r\nfunction clearTheme(key) {\r\n if (key && themes[key]) {\r\n delete themes[key];\r\n }\r\n}\r\n\r\n/**\r\n * 清空全部主题\r\n */\r\nfunction clearAllThemes() {\r\n themes = {};\r\n}\r\n\r\n/**\r\n * 获取全部主题\r\n * 调试时可用\r\n */\r\nfunction getAllThemes() {\r\n return themes;\r\n}\r\n\r\nexport {\r\n registerTheme,\r\n hasTheme,\r\n getTheme,\r\n clearTheme,\r\n clearAllThemes,\r\n getAllThemes\r\n};","import { registerTheme, hasTheme, getTheme } from './theme-registry.js';\r\n\r\nfunction dirname(url) {\r\n if (!url) return '';\r\n return url.replace(/\\/[^\\/]*$/, '/');\r\n}\r\n\r\nfunction isAbsoluteUrl(url) {\r\n return /^(https?:)?\\/\\//.test(url) ||\r\n /^file:/.test(url) ||\r\n /^data:/.test(url) ||\r\n /^blob:/.test(url);\r\n}\r\n\r\nfunction joinUrl(base, path) {\r\n if (!path) return '';\r\n if (isAbsoluteUrl(path)) return path;\r\n return base + path.replace(/^\\.\\//, '');\r\n}\r\n\r\nfunction patchStyleAssetPaths(styleObj, baseUrl) {\r\n var key;\r\n var value;\r\n\r\n if (!styleObj) return styleObj;\r\n\r\n for (key in styleObj) {\r\n if (!Object.prototype.hasOwnProperty.call(styleObj, key)) continue;\r\n\r\n value = styleObj[key];\r\n\r\n if (typeof value !== 'string') continue;\r\n\r\n if (key === 'backgroundImage') {\r\n styleObj[key] = joinUrl(baseUrl, value);\r\n continue;\r\n }\r\n\r\n if (key === 'src') {\r\n styleObj[key] = joinUrl(baseUrl, value);\r\n continue;\r\n }\r\n\r\n if (key === 'background') {\r\n styleObj[key] = value.replace(/url\\((['\"]?)(.+?)\\1\\)/g, function (_, quote, assetPath) {\r\n return 'url(\"' + joinUrl(baseUrl, assetPath) + '\")';\r\n });\r\n }\r\n }\r\n\r\n return styleObj;\r\n}\r\n\r\nfunction patchHostAssetPaths(hostConfig, baseUrl) {\r\n var keys;\r\n var i;\r\n var key;\r\n var value;\r\n\r\n if (!hostConfig) return hostConfig;\r\n\r\n keys = ['bg', 'frame', 'actionBtn', 'logo', 'icon'];\r\n\r\n for (i = 0; i < keys.length; i++) {\r\n key = keys[i];\r\n value = hostConfig[key];\r\n\r\n if (typeof value === 'string' && value) {\r\n hostConfig[key] = joinUrl(baseUrl, value);\r\n }\r\n }\r\n\r\n return hostConfig;\r\n}\r\n\r\nfunction patchThemeAssetPaths(theme, baseUrl) {\r\n var startPage;\r\n var endPage;\r\n var pageKeys;\r\n var i;\r\n\r\n if (!theme) return theme;\r\n\r\n startPage = theme.startPage || {};\r\n endPage = theme.endPage || {};\r\n\r\n pageKeys = [\r\n 'wrapper',\r\n 'overlay',\r\n 'content',\r\n 'title',\r\n 'desc',\r\n 'buttonGroup',\r\n 'button',\r\n 'primaryButton',\r\n 'secondaryButton',\r\n 'score'\r\n ];\r\n\r\n for (i = 0; i < pageKeys.length; i++) {\r\n patchStyleAssetPaths(startPage[pageKeys[i]], baseUrl);\r\n patchStyleAssetPaths(endPage[pageKeys[i]], baseUrl);\r\n }\r\n\r\n patchHostAssetPaths(theme.host, baseUrl);\r\n\r\n return theme;\r\n}\r\n\r\nfunction loadScript(url, callback) {\r\n var script = document.createElement('script');\r\n var done = false;\r\n\r\n script.type = 'text/javascript';\r\n script.async = true;\r\n script.src = url;\r\n\r\n script.onload = function () {\r\n if (done) return;\r\n done = true;\r\n callback && callback(null, script);\r\n };\r\n\r\n script.onerror = function () {\r\n if (done) return;\r\n done = true;\r\n callback && callback(new Error('Failed to load script: ' + url));\r\n };\r\n\r\n document.head.appendChild(script);\r\n}\r\n\r\nfunction loadThemeByUrl(url, callback) {\r\n window.__KADOU_THEME_PACK__ = null;\r\n\r\n loadScript(url, function (err) {\r\n var pack;\r\n var baseUrl;\r\n var theme;\r\n\r\n if (err) {\r\n callback && callback(err);\r\n return;\r\n }\r\n\r\n pack = window.__KADOU_THEME_PACK__;\r\n\r\n if (!pack || !pack.key || !pack.theme) {\r\n callback && callback(new Error('Invalid theme pack: ' + url));\r\n return;\r\n }\r\n\r\n baseUrl = dirname(url);\r\n theme = patchThemeAssetPaths(pack.theme, baseUrl);\r\n\r\n registerTheme(pack.key, theme);\r\n\r\n callback && callback(null, {\r\n key: pack.key,\r\n url: url,\r\n from: 'remote',\r\n theme: theme\r\n });\r\n });\r\n}\r\n\r\nfunction buildThemeUrl(themeRoot, themeKey) {\r\n if (!themeRoot) {\r\n throw new Error('themeRoot is required');\r\n }\r\n\r\n if (!themeKey) {\r\n throw new Error('themeKey is required');\r\n }\r\n\r\n return themeRoot.replace(/\\/?$/, '/') + themeKey + '/theme.js';\r\n}\r\n\r\nfunction ensureTheme(themeKey, themeRoot, callback) {\r\n if (hasTheme(themeKey)) {\r\n callback && callback(null, {\r\n key: themeKey,\r\n from: 'cache',\r\n theme: getTheme(themeKey)\r\n });\r\n return;\r\n }\r\n\r\n var url;\r\n\r\n try {\r\n url = buildThemeUrl(themeRoot, themeKey);\r\n } catch (err) {\r\n callback && callback(err);\r\n return;\r\n }\r\n\r\n loadThemeByUrl(url, callback);\r\n}\r\n\r\nexport {\r\n buildThemeUrl,\r\n loadThemeByUrl,\r\n ensureTheme\r\n};","/**\r\n * GameManager\r\n * -----------------------------------------\r\n * 游戏管理器\r\n *\r\n * 作用:\r\n * 1 管理游戏生命周期\r\n * 2 统一发送 / 接收 postMessage\r\n * 3 提供事件机制给外部使用\r\n * 4 管理 SDK 与 Game 的状态\r\n * 5 host 负责主题加载,game 负责主题渲染\r\n *\r\n * 架构关系:\r\n *\r\n * Host 页面 (Vue 壳)\r\n * │\r\n * │ postMessage\r\n * ▼\r\n * GameManager <----> MessageBus\r\n * │\r\n * ▼\r\n * Game iframe\r\n *\r\n */\r\n\r\nimport EventEmitter from '../core/event-emitter.js';\r\nimport MessageBus from '../core/message-bus.js';\r\nimport MESSAGE_TYPES from '../constants/message-types.js';\r\nimport OverlayManager from '../ui/overlay-manager.js';\r\nimport { ensureTheme, buildThemeUrl, loadThemeByUrl } from '../theme/theme-loader.js';\r\n\r\n/**\r\n * 构造函数\r\n */\r\nfunction GameManager(options) {\r\n options = options || {};\r\n\r\n // 继承事件系统\r\n EventEmitter.call(this);\r\n\r\n this.options = options;\r\n\r\n /**\r\n * UI 挂载根节点\r\n */\r\n this.root = options.root || document.body;\r\n\r\n /**\r\n * 是否开启调试\r\n */\r\n this.debug = !!options.debug;\r\n\r\n /**\r\n * 角色\r\n * host = 宿主页面\r\n * game = 游戏页面\r\n */\r\n this.role = options.role || 'host';\r\n\r\n /**\r\n * SDK 状态\r\n */\r\n this.state = {\r\n sdkReady: false,\r\n gameReady: false,\r\n started: false,\r\n paused: false,\r\n destroyed: false\r\n };\r\n\r\n /**\r\n * 当前主题\r\n * 仅用于 game 内部渲染\r\n */\r\n this.currentThemeKey = '';\r\n this.currentTheme = null;\r\n\r\n /**\r\n * MessageBus\r\n * 负责 postMessage 封装\r\n */\r\n this.bus = new MessageBus({\r\n selfWindow: options.selfWindow || window,\r\n targetWindow: options.targetWindow || null,\r\n targetOrigin: options.targetOrigin || '*',\r\n allowedOrigins: options.allowedOrigins || ['*'],\r\n source: options.source || 'KADOU_GAME_SDK',\r\n debug: this.debug\r\n });\r\n\r\n /**\r\n * UI Overlay 管理器\r\n * 只有 game 角色才负责真正渲染开始页 / 结束页\r\n */\r\n this.overlay = this.role === 'game'\r\n ? new OverlayManager({\r\n container: this.root\r\n })\r\n : null;\r\n\r\n /**\r\n * 绑定 MessageBus 事件\r\n */\r\n this._bindBusEvents();\r\n}\r\n\r\nGameManager.prototype = Object.create(EventEmitter.prototype);\r\nGameManager.prototype.constructor = GameManager;\r\n\r\n/**\r\n * 绑定 MessageBus 所有事件\r\n */\r\nGameManager.prototype._bindBusEvents = function () {\r\n var self = this;\r\n\r\n /**\r\n * 所有消息\r\n */\r\n this.bus.on('*', function (message, context) {\r\n self.emit('message', message, context);\r\n });\r\n\r\n /**\r\n * SDK READY\r\n */\r\n this.bus.on(MESSAGE_TYPES.SDK_READY, function (payload, message, context) {\r\n self.state.sdkReady = true;\r\n self.emit('sdk:ready', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME READY\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_READY, function (payload, message, context) {\r\n self.state.gameReady = true;\r\n self.emit('game:ready', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME LOAD\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_LOAD, function (payload, message, context) {\r\n self.emit('game:load', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME LOADED\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_LOADED, function (payload, message, context) {\r\n self.emit('game:loaded', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME LOADING\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_LOADING, function (payload, message, context) {\r\n self.emit('game:loading', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME START\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_START, function (payload, message, context) {\r\n self.state.started = true;\r\n self.state.paused = false;\r\n\r\n if (self.role === 'game' && self.overlay) {\r\n self.hideStartPage();\r\n }\r\n\r\n self.emit('game:start', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME START\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_RESTART, function (payload, message, context) {\r\n self.state.started = true;\r\n self.state.paused = false;\r\n\r\n if (self.role === 'game' && self.overlay) {\r\n self.hideEndPage();\r\n }\r\n\r\n self.emit('game:restart', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME PAUSE\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_PAUSE, function (payload, message, context) {\r\n self.state.paused = true;\r\n self.emit('game:pause', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME RESUME\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_RESUME, function (payload, message, context) {\r\n self.state.paused = false;\r\n self.emit('game:resume', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME FINISH\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_FINISH, function (payload, message, context) {\r\n self.state.started = false;\r\n self.emit('game:finish', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME DESTROY\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_DESTROY, function (payload, message, context) {\r\n self.state.destroyed = true;\r\n self.emit('game:destroy', payload, message, context);\r\n });\r\n\r\n /**\r\n * 主题更新\r\n * 只缓存,不直接渲染\r\n */\r\n this.bus.on(MESSAGE_TYPES.THEME_UPDATE, function (payload, message, context) {\r\n self.currentThemeKey = payload && payload.themeKey ? payload.themeKey : '';\r\n self.currentTheme = payload && payload.theme ? payload.theme : payload || null;\r\n self.emit('theme:update', payload, message, context);\r\n });\r\n\r\n /**\r\n * 配置更新\r\n */\r\n this.bus.on(MESSAGE_TYPES.CONFIG_UPDATE, function (payload, message, context) {\r\n self.emit('config:update', payload, message, context);\r\n });\r\n\r\n /**\r\n * 学生提交答案\r\n */\r\n this.bus.on(MESSAGE_TYPES.QUESTION_SUBMIT, function (payload, message, context) {\r\n self.emit('question:submit', payload, message, context);\r\n });\r\n\r\n /**\r\n * 游戏结果上报\r\n */\r\n this.bus.on(MESSAGE_TYPES.REPORT_GENERATED, function (payload, message, context) {\r\n self.emit('result:report', payload, message, context);\r\n });\r\n\r\n /**\r\n * 显示开始页\r\n * host 发消息,game 内部真正 render\r\n */\r\n this.bus.on(MESSAGE_TYPES.PAGE_START_SHOW, function (payload, message, context) {\r\n self.emit('page:start:show', payload, message, context);\r\n\r\n if (self.role === 'game') {\r\n self.renderStartPage(payload);\r\n }\r\n });\r\n\r\n /**\r\n * 显示结束页\r\n */\r\n this.bus.on(MESSAGE_TYPES.PAGE_END_SHOW, function (payload, message, context) {\r\n self.emit('page:end:show', payload, message, context);\r\n\r\n if (self.role === 'game') {\r\n self.renderEndPage(payload);\r\n }\r\n });\r\n\r\n /**\r\n * 错误\r\n */\r\n this.bus.on(MESSAGE_TYPES.ERROR, function (payload, message, context) {\r\n self.emit('error', payload, message, context);\r\n });\r\n\r\n /**\r\n * HEARTBEAT_PING 心跳检测\r\n */\r\n this.bus.on(MESSAGE_TYPES.HEARTBEAT_PING, function (payload, message, context) {\r\n self.emit('heartbeat:ping', payload, message, context);\r\n\r\n self.send(MESSAGE_TYPES.HEARTBEAT_PONG, {\r\n replyTo: message.requestId,\r\n time: new Date().getTime()\r\n });\r\n });\r\n\r\n /**\r\n * HEARTBEAT_PONG\r\n */\r\n this.bus.on(MESSAGE_TYPES.HEARTBEAT_PONG, function (payload, message, context) {\r\n self.emit('heartbeat:pong', payload, message, context);\r\n });\r\n\r\n this.bus.on(MESSAGE_TYPES.GAME_RANK, function (payload, message, context) {\r\n self.emit('game:rank', payload, message, context);\r\n });\r\n\r\n /**\r\n * 开始答题\r\n */\r\n this.bus.on(MESSAGE_TYPES.ANSWER_START, function (payload, message, context) {\r\n self.emit('answer:start', payload, message, context);\r\n });\r\n\r\n /**\r\n * 上一题\r\n */\r\n this.bus.on(MESSAGE_TYPES.QUESTION_PREV, function (payload, message, context) {\r\n self.emit('question:prev', payload, message, context);\r\n });\r\n\r\n /**\r\n * 下一题\r\n */\r\n this.bus.on(MESSAGE_TYPES.QUESTION_NEXT, function (payload, message, context) {\r\n self.emit('question:next', payload, message, context);\r\n });\r\n\r\n /**\r\n * 调节声音\r\n */\r\n this.bus.on(MESSAGE_TYPES.AUDIO_VOLUME_CHANGE, function (payload, message, context) {\r\n self.emit('volume:change', payload, message, context);\r\n });\r\n\r\n /**\r\n * 答题完成\r\n */\r\n this.bus.on(MESSAGE_TYPES.ANSWER_COMPLETED, function (payload, message, context) {\r\n self.emit('answer:completed', payload, message, context);\r\n });\r\n\r\n \r\n\r\n /**\r\n * 扩展消息类型\r\n */\r\n this.bus.on(MESSAGE_TYPES.EXTENSION_EVENT, function (payload, message, context) {\r\n self.emit('extension:event', payload, message, context);\r\n });\r\n\r\n};\r\n\r\n/**\r\n * 初始化 SDK\r\n */\r\nGameManager.prototype.init = function () {\r\n this.bus.start();\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[GameManager] init, role =', this.role);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 销毁 SDK\r\n */\r\nGameManager.prototype.destroy = function () {\r\n this.state.destroyed = true;\r\n\r\n this.bus.destroy();\r\n\r\n if (this.overlay) {\r\n if (this.overlay.hideStartPage) {\r\n this.overlay.hideStartPage();\r\n }\r\n if (this.overlay.hideEndPage) {\r\n this.overlay.hideEndPage();\r\n }\r\n }\r\n\r\n this.off();\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[GameManager] destroyed');\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 设置目标窗口\r\n * 一般为 iframe.contentWindow\r\n */\r\nGameManager.prototype.setTargetWindow = function (win) {\r\n this.bus.setTargetWindow(win);\r\n return this;\r\n};\r\n\r\n/**\r\n * 设置目标 origin\r\n */\r\nGameManager.prototype.setTargetOrigin = function (origin) {\r\n this.bus.setTargetOrigin(origin);\r\n return this;\r\n};\r\n\r\n/**\r\n * 设置 root\r\n */\r\nGameManager.prototype.setRoot = function (el) {\r\n if (!el) return this;\r\n\r\n this.root = el;\r\n\r\n if (this.overlay) {\r\n this.overlay.container = el;\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 发送消息\r\n */\r\nGameManager.prototype.send = function (type, payload, meta) {\r\n return this.bus.send(type, payload, meta);\r\n};\r\n\r\n/**\r\n * SDK ready\r\n */\r\nGameManager.prototype.notifySdkReady = function (extra) {\r\n this.state.sdkReady = true;\r\n return this.send(MESSAGE_TYPES.SDK_READY, extra || {});\r\n};\r\n\r\n/**\r\n * 心跳 ping\r\n */\r\nGameManager.prototype.heartbeatPing = function (extra) {\r\n var payload = extra || {};\r\n payload.time = new Date().getTime();\r\n return this.send(MESSAGE_TYPES.HEARTBEAT_PING, payload);\r\n};\r\n\r\n/**\r\n * 游戏 ready\r\n */\r\nGameManager.prototype.gameReady = function (extra) {\r\n this.state.gameReady = true;\r\n return this.send(MESSAGE_TYPES.GAME_READY, extra || {});\r\n};\r\n\r\n/**\r\n * 加载游戏\r\n */\r\nGameManager.prototype.loadGame = function (config) {\r\n return this.send(MESSAGE_TYPES.GAME_LOAD, config || {});\r\n};\r\n\r\n/**\r\n * 游戏加载进度\r\n */\r\nGameManager.prototype.gameLoading = function (config) {\r\n return this.send(MESSAGE_TYPES.GAME_LOADING, config || {});\r\n};\r\n\r\n/**\r\n * 开始游戏\r\n * 保留一个最终版本,避免重复定义覆盖\r\n */\r\nGameManager.prototype.startGame = function (data) {\r\n var payload = data || {};\r\n\r\n this.state.started = true;\r\n this.state.paused = false;\r\n\r\n this.emit('game:start', payload, null, {\r\n local: true\r\n });\r\n\r\n return this.bus.send(MESSAGE_TYPES.GAME_START, payload);\r\n};\r\n\r\n\r\n/**\r\n * 游戏重新开始\r\n */\r\nGameManager.prototype.restartGame = function (data) {\r\n var payload = data || {};\r\n\r\n this.state.started = true;\r\n this.state.paused = false;\r\n\r\n this.emit('game:restart', payload, null, {\r\n local: true\r\n });\r\n\r\n return this.bus.send(MESSAGE_TYPES.GAME_RESTART, payload);\r\n};\r\n\r\n/**\r\n * 查看游戏排行榜\r\n */\r\nGameManager.prototype.showGameRank = function (data) {\r\n var payload = data || {};\r\n\r\n return this.bus.send(MESSAGE_TYPES.GAME_RANK, payload);\r\n};\r\n/**\r\n * 暂停游戏\r\n */\r\nGameManager.prototype.pauseGame = function (data) {\r\n this.state.paused = true;\r\n return this.send(MESSAGE_TYPES.GAME_PAUSE, data || {});\r\n};\r\n\r\n/**\r\n * 恢复游戏\r\n */\r\nGameManager.prototype.resumeGame = function (data) {\r\n this.state.paused = false;\r\n return this.send(MESSAGE_TYPES.GAME_RESUME, data || {});\r\n};\r\n\r\n/**\r\n * 游戏结束\r\n */\r\nGameManager.prototype.finishGame = function (result) {\r\n this.state.started = false;\r\n return this.send(MESSAGE_TYPES.GAME_FINISH, result || {});\r\n};\r\n\r\n/**\r\n * 销毁游戏\r\n */\r\nGameManager.prototype.destroyGame = function (data) {\r\n this.state.destroyed = true;\r\n return this.send(MESSAGE_TYPES.GAME_DESTROY, data || {});\r\n};\r\n\r\n/**\r\n * 更新主题\r\n * 保持兼容旧接口\r\n */\r\nGameManager.prototype.updateTheme = function (theme) {\r\n if (this.role === 'game') {\r\n this.currentTheme = theme || null;\r\n }\r\n return this.send(MESSAGE_TYPES.THEME_UPDATE, theme || {});\r\n};\r\n\r\n/**\r\n * 应用主题\r\n * 推荐 host 使用这个方法发给 game\r\n */\r\nGameManager.prototype.applyTheme = function (themeKey, themeConfig, extra) {\r\n var payload = extra || {};\r\n\r\n payload.themeKey = themeKey || '';\r\n payload.theme = themeConfig || {};\r\n\r\n if (this.role === 'game') {\r\n this.currentThemeKey = payload.themeKey;\r\n this.currentTheme = payload.theme;\r\n }\r\n\r\n return this.send(MESSAGE_TYPES.THEME_UPDATE, payload);\r\n};\r\n\r\n/**\r\n * 更新配置\r\n */\r\nGameManager.prototype.updateConfig = function (config) {\r\n return this.send(MESSAGE_TYPES.CONFIG_UPDATE, config || {});\r\n};\r\n\r\n/**\r\n * 显示开始页\r\n * host 调这个;真正渲染在 game 内部执行\r\n */\r\nGameManager.prototype.showStartPage = function (data) {\r\n return this.send(MESSAGE_TYPES.PAGE_START_SHOW, data || {});\r\n};\r\n\r\n/**\r\n * 显示结束页\r\n */\r\nGameManager.prototype.showEndPage = function (data) {\r\n return this.send(MESSAGE_TYPES.PAGE_END_SHOW, data || {});\r\n};\r\n\r\n/**\r\n * 提交题目\r\n */\r\nGameManager.prototype.submitQuestion = function (data) {\r\n return this.send(MESSAGE_TYPES.QUESTION_SUBMIT, data || {});\r\n};\r\n\r\n/**\r\n * 上报错误\r\n */\r\nGameManager.prototype.reportError = function (error) {\r\n var payload;\r\n\r\n if (error instanceof Error) {\r\n payload = {\r\n message: error.message,\r\n stack: error.stack\r\n };\r\n } else {\r\n payload = error || {};\r\n }\r\n\r\n return this.send(MESSAGE_TYPES.ERROR, payload);\r\n};\r\n\r\n/**\r\n * 获取当前状态\r\n */\r\nGameManager.prototype.getState = function () {\r\n return {\r\n sdkReady: this.state.sdkReady,\r\n gameReady: this.state.gameReady,\r\n started: this.state.started,\r\n paused: this.state.paused,\r\n destroyed: this.state.destroyed\r\n };\r\n};\r\n\r\n/**\r\n * 是否 ready\r\n */\r\nGameManager.prototype.isReady = function () {\r\n return !!(this.state.sdkReady && this.state.gameReady);\r\n};\r\n\r\n/**\r\n * 合并页面主题配置\r\n * pageKey: startPage / endPage\r\n */\r\nGameManager.prototype._mergePageTheme = function (pageKey, pageData) {\r\n var theme = this.currentTheme || {};\r\n var pageTheme = theme[pageKey] || {};\r\n var result = {};\r\n var key;\r\n\r\n for (key in pageTheme) {\r\n if (Object.prototype.hasOwnProperty.call(pageTheme, key)) {\r\n result[key] = pageTheme[key];\r\n }\r\n }\r\n\r\n for (key in pageData) {\r\n if (Object.prototype.hasOwnProperty.call(pageData, key)) {\r\n result[key] = pageData[key];\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * game 内部渲染开始页\r\n */\r\nGameManager.prototype.renderStartPage = function (data, callbacks) {\r\n var self = this;\r\n var payload = data || {};\r\n var finalData = this._mergePageTheme('startPage', payload);\r\n\r\n if (!this.overlay || !this.overlay.showStartPage) {\r\n return this;\r\n }\r\n\r\n this.overlay.showStartPage(finalData, callbacks || {\r\n onStart: function () {\r\n self.startGame({\r\n from: 'sdk-start-game'\r\n });\r\n }\r\n });\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 隐藏开始页\r\n */\r\nGameManager.prototype.hideStartPage = function () {\r\n if (this.overlay && this.overlay.hideStartPage) {\r\n this.overlay.hideStartPage();\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * game 内部渲染结束页\r\n */\r\nGameManager.prototype.renderEndPage = function (data, callbacks) {\r\n let self = this;\r\n var payload = data || {};\r\n var finalData = this._mergePageTheme('endPage', payload);\r\n\r\n if (!this.overlay || !this.overlay.showEndPage) {\r\n return this;\r\n }\r\n\r\n\r\n this.overlay.showEndPage(finalData, callbacks || {\r\n onRestart: function () {\r\n self.restartGame({\r\n from: 'sdk-restart-game'\r\n });\r\n },\r\n onShowRank: function () {\r\n self.showGameRank({\r\n from: 'sdk-game-rank'\r\n });\r\n },\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * 隐藏结束页\r\n */\r\nGameManager.prototype.hideEndPage = function () {\r\n if (this.overlay && this.overlay.hideEndPage) {\r\n this.overlay.hideEndPage();\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * 直接按 url 加载主题\r\n * 更适合 host 使用\r\n */\r\nGameManager.prototype.loadThemeByUrl = function (url, callback) {\r\n loadThemeByUrl(url, callback);\r\n return this;\r\n};\r\n\r\n/**\r\n * 确保主题已加载\r\n * 更适合 host 使用\r\n */\r\nGameManager.prototype.ensureTheme = function (themeKey, themeRoot, callback) {\r\n ensureTheme(themeKey, themeRoot, callback);\r\n return this;\r\n};\r\n\r\n/**\r\n * 生成主题地址\r\n */\r\nGameManager.prototype.buildThemeUrl = function (themeRoot, themeKey) {\r\n return buildThemeUrl(themeRoot, themeKey);\r\n};\r\n\r\n/**\r\n * 游戏完成\r\n */\r\nGameManager.prototype.gameLoaded = function (config) {\r\n return this.send(MESSAGE_TYPES.GAME_LOADED, config || {});\r\n};\r\n/**\r\n * 开始答题\r\n */\r\nGameManager.prototype.startAnswer = function (data) {\r\n return this.send(MESSAGE_TYPES.ANSWER_START, data || {});\r\n};\r\n\r\n/**\r\n * 上一题\r\n */\r\nGameManager.prototype.prevQuestion = function (data) {\r\n return this.send(MESSAGE_TYPES.QUESTION_PREV, data || {});\r\n};\r\n\r\n/**\r\n * 下一题\r\n */\r\nGameManager.prototype.nextQuestion = function (data) {\r\n return this.send(MESSAGE_TYPES.QUESTION_NEXT, data || {});\r\n};\r\n\r\n/**\r\n * 调节声音\r\n * 例如 { volume: 0.8, muted: false }\r\n */\r\nGameManager.prototype.changeVolume = function (data) {\r\n return this.send(MESSAGE_TYPES.AUDIO_VOLUME_CHANGE, data || {});\r\n};\r\n\r\n/**\r\n * 答题完成\r\n */\r\nGameManager.prototype.completedAnswer = function (data) {\r\n return this.send(MESSAGE_TYPES.ANSWER_COMPLETED, data || {});\r\n};\r\n\r\n/**\r\n * 扩展消息类型\r\n */\r\nGameManager.prototype.extensionEvent = function (extra) {\r\n return this.send(MESSAGE_TYPES.EXTENSION_EVENT, extra || {});\r\n};\r\nexport default GameManager;","import SDK_VERSION from './version.js';\r\nimport MESSAGE_TYPES from './constants/message-types.js';\r\nimport EventEmitter from './core/event-emitter.js';\r\nimport MessageBus from './core/message-bus.js';\r\nimport GameRuntime from './manager/game-manager.js';\r\n\r\nexport {\r\n SDK_VERSION,\r\n MESSAGE_TYPES,\r\n EventEmitter,\r\n MessageBus,\r\n GameRuntime\r\n};\r\n\r\nexport default {\r\n SDK_VERSION: SDK_VERSION,\r\n MESSAGE_TYPES: MESSAGE_TYPES,\r\n EventEmitter: EventEmitter,\r\n MessageBus: MessageBus,\r\n GameRuntime: GameRuntime\r\n};"],"names":["SDK_VERSION","MESSAGE_TYPES","SDK_READY","HEARTBEAT_PING","HEARTBEAT_PONG","ERROR_THROWN","GAME_LOAD","GAME_START","GAME_PAUSE","GAME_RESUME","GAME_RESTART","GAME_DESTROY","GAME_READY","GAME_LOADED","GAME_LOADING","GAME_FINISH","GAME_RANK","THEME_UPDATE","CONFIG_UPDATE","QUESTION_SUBMIT","QUESTION_PREV","QUESTION_NEXT","ANSWER_START","ANSWER_COMPLETED","AUDIO_VOLUME_CHANGE","PAGE_START_SHOW","PAGE_END_SHOW","EXTENSION_EVENT","ERROR","isFunction","fn","isObject","val","Object","prototype","toString","call","createRequestId","prefix","Date","getTime","Math","random","slice","EventEmitter","events","on","eventName","handler","push","once","self","wrapper","off","apply","arguments","__original__","handlers","result","i","length","emit","args","Array","error","console","DEFAULT_SOURCE","PostMessageChannel","options","selfWindow","window","targetWindow","targetOrigin","source","debug","setTargetWindow","setTargetOrigin","createMessage","type","payload","meta","version","requestId","timestamp","value","send","message","postMessage","warn","log","isValidMessage","data","MessageBus","channel","allowedOrigins","_boundOnMessage","_onMessage","bind","_listening","create","constructor","start","addEventListener","stop","removeEventListener","destroy","_matchOrigin","origin","indexOf","event","context","rawEvent","sourceWindow","BasePage","el","bindEvent","unbindEvents","item","parentNode","removeChild","isRendered","isPlainObject","obj","mergeStyles","base","extra","key","hasOwnProperty","normalizeStyleValue","String","applyStyles","styles","style","createElement","tag","className","text","document","textContent","StartPage","getStyles","wrapperCss","position","top","left","right","bottom","display","flexDirection","alignItems","justifyContent","boxSizing","padding","color","backgroundRepeat","backgroundPosition","backgroundSize","textAlign","zIndex","overlayCss","background","overlay","contentCss","width","content","titleCss","fontSize","fontWeight","textShadow","letterSpacing","lineHeight","maxWidth","wordBreak","title","descCss","marginTop","whiteSpace","desc","btnGroupCss","buttonGroup","btnCss","minWidth","minHeight","cursor","backgroundColor","borderRadius","border","transition","button","render","container","onStart","Error","titleText","descText","buttonText","rootDom","overlayDom","contentDom","titleDom","appendChild","descDom","btnGroupDom","btnDom","EndPage","timeCss","time","scoreCss","score","gap","flexWrap","primaryBtnCss","primaryButton","secondaryBtnCss","secondaryButton","callbacks","timeText","scoreText","primaryButtonText","secondaryButtonText","scoreDom","timeDom","secondaryBtnDom","onShowRank","primaryBtnDom","onRestart","childNodes","OverlayManager","body","startPage","endPage","setContainer","showStartPage","finalCallbacks","hideStartPage","showEndPage","hideEndPage","hideAll","themes","registerTheme","config","hasTheme","getTheme","default","dirname","url","replace","isAbsoluteUrl","test","joinUrl","path","patchStyleAssetPaths","styleObj","baseUrl","_","quote","assetPath","patchHostAssetPaths","hostConfig","keys","patchThemeAssetPaths","theme","pageKeys","host","loadScript","callback","script","done","async","src","onload","onerror","head","loadThemeByUrl","__KADOU_THEME_PACK__","err","pack","from","buildThemeUrl","themeRoot","themeKey","ensureTheme","GameManager","root","role","state","sdkReady","gameReady","started","paused","destroyed","currentThemeKey","currentTheme","bus","_bindBusEvents","REPORT_GENERATED","renderStartPage","renderEndPage","replyTo","init","win","setRoot","notifySdkReady","heartbeatPing","loadGame","gameLoading","startGame","local","restartGame","showGameRank","pauseGame","resumeGame","finishGame","destroyGame","updateTheme","applyTheme","themeConfig","updateConfig","submitQuestion","reportError","stack","getState","isReady","_mergePageTheme","pageKey","pageData","pageTheme","finalData","gameLoaded","startAnswer","prevQuestion","nextQuestion","changeVolume","completedAnswer","extensionEvent","GameRuntime"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).KadouGameSDK={})}(this,function(t){"use strict";var e="1.0.0",n={SDK_READY:"SDK_READY",HEARTBEAT_PING:"HEARTBEAT_PING",HEARTBEAT_PONG:"HEARTBEAT_PONG",ERROR_THROWN:"ERROR_THROWN",GAME_LOAD:"GAME_LOAD",GAME_START:"GAME_START",GAME_PAUSE:"GAME_PAUSE",GAME_RESUME:"GAME_RESUME",GAME_RESTART:"GAME_RESTART",GAME_DESTROY:"GAME_DESTROY",GAME_READY:"GAME_READY",GAME_LOADED:"GAME_LOADED",GAME_LOADING:"GAME_LOADING",GAME_FINISH:"GAME_FINISH",GAME_RANK:"GAME_RANK",THEME_UPDATE:"THEME_UPDATE",CONFIG_UPDATE:"CONFIG_UPDATE",QUESTION_SUBMIT:"QUESTION_SUBMIT",QUESTION_PREV:"QUESTION_PREV",QUESTION_NEXT:"QUESTION_NEXT",ANSWER_START:"ANSWER_START",ANSWER_COMPLETED:"ANSWER_COMPLETED",AUDIO_VOLUME_CHANGE:"AUDIO_VOLUME_CHANGE",PAGE_START_SHOW:"PAGE_START_SHOW",PAGE_END_SHOW:"PAGE_END_SHOW",EXTENSION_EVENT:"EXTENSION_EVENT",ERROR:"ERROR"};function o(t){return"function"==typeof t}function r(t){return"[object Object]"===Object.prototype.toString.call(t)}function i(){this.events={}}i.prototype.on=function(t,e){return t&&o(e)?(this.events[t]||(this.events[t]=[]),this.events[t].push(e),this):this},i.prototype.once=function(t,e){var n=this;if(!t||!o(e))return this;function r(){n.off(t,r),e.apply(null,arguments)}return r.__original__=e,this.on(t,r),this},i.prototype.off=function(t,e){var n,o,r,i;if(!t)return this.events={},this;if(!(n=this.events[t])||!n.length)return this;if(!e)return delete this.events[t],this;for(o=[],r=0;r<n.length;r++)(i=n[r])!==e&&i.__original__!==e&&o.push(i);return o.length?this.events[t]=o:delete this.events[t],this},i.prototype.emit=function(t){var e,n,o=this.events[t];if(!o||!o.length)return this;for(e=Array.prototype.slice.call(arguments,1),o=o.slice(),n=0;n<o.length;n++)try{o[n].apply(null,e)}catch(e){"undefined"!=typeof console&&console.error&&console.error('[EventEmitter] "'+t+'" handler error:',e)}return this};function s(t){t=t||{},this.selfWindow=t.selfWindow||window,this.targetWindow=t.targetWindow||null,this.targetOrigin=t.targetOrigin||"*",this.source=t.source||"KADOU_GAME_SDK",this.debug=!!t.debug}function a(t){t=t||{},i.call(this),this.channel=new s(t),this.selfWindow=t.selfWindow||window,this.allowedOrigins=t.allowedOrigins||["*"],this.debug=!!t.debug,this._boundOnMessage=this._onMessage.bind(this),this._listening=!1}function u(){this.el=null,this.events=[]}function d(t){return"[object Object]"===Object.prototype.toString.call(t)}function h(t,e){var n,o={};for(n in t=d(t)?t:{},e=d(e)?e:{},t)Object.prototype.hasOwnProperty.call(t,n)&&(o[n]=t[n]);for(n in e)Object.prototype.hasOwnProperty.call(e,n)&&(o[n]=e[n]);return o}function p(t,e){return null==e?"":"backgroundImage"===t&&e&&"string"==typeof e&&0!==e.indexOf("url(")&&"none"!==e?'url("'+e+'")':String(e)}function c(t,e,n,o){var r=document.createElement(t);return e&&(r.className=e),n&&function(t,e){var n;if(t&&e)for(n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t.style[n]=p(n,e[n]))}(r,n),null!=o&&(r.textContent=String(o)),r}function l(){u.call(this)}function f(){u.call(this)}function g(t){t=t||{},this.container=t.container||document.body,this.startPage=null,this.endPage=null}s.prototype.setTargetWindow=function(t){return this.targetWindow=t,this},s.prototype.setTargetOrigin=function(t){return this.targetOrigin=t||"*",this},s.prototype.createMessage=function(t,n,o){return n=n||{},o=o||{},{source:this.source,version:e,type:t,requestId:(i=i||"msg")+"_"+(new Date).getTime()+"_"+Math.random().toString(16).slice(2,10),timestamp:(new Date).getTime(),payload:r(n)?n:{value:n},meta:r(o)?o:{}};var i},s.prototype.send=function(t,e,n){var o;return this.targetWindow&&this.targetWindow.postMessage?(o=this.createMessage(t,e,n),this.targetWindow.postMessage(o,this.targetOrigin),this.debug&&"undefined"!=typeof console&&console.log&&console.log("[PostMessageChannel] send =>",o),o):(this.debug&&"undefined"!=typeof console&&console.warn&&console.warn("[PostMessageChannel] targetWindow 不存在,消息发送失败:",t),null)},s.prototype.isValidMessage=function(t){return!(!t||"object"!=typeof t||t.source!==this.source||"string"!=typeof t.type)},a.prototype=Object.create(i.prototype),a.prototype.constructor=a,a.prototype.start=function(){return this._listening||(this.selfWindow.addEventListener("message",this._boundOnMessage,!1),this._listening=!0,this.debug&&"undefined"!=typeof console&&console.log&&console.log("[MessageBus] started")),this},a.prototype.stop=function(){return this._listening?(this.selfWindow.removeEventListener("message",this._boundOnMessage,!1),this._listening=!1,this.debug&&"undefined"!=typeof console&&console.log&&console.log("[MessageBus] stopped"),this):this},a.prototype.destroy=function(){return this.stop(),this.off(),this},a.prototype.setTargetWindow=function(t){return this.channel.setTargetWindow(t),this},a.prototype.setTargetOrigin=function(t){return this.channel.setTargetOrigin(t),this},a.prototype.send=function(t,e,n){return this.channel.send(t,e,n)},a.prototype._matchOrigin=function(t){var e;if(!this.allowedOrigins||!this.allowedOrigins.length)return!0;if("*"===this.allowedOrigins[0]||this.allowedOrigins.indexOf("*")>-1)return!0;for(e=0;e<this.allowedOrigins.length;e++)if(this.allowedOrigins[e]===t)return!0;return!1},a.prototype._onMessage=function(t){var e,n=t.data,o=t.origin,r=t.source;this._matchOrigin(o)?this.channel.isValidMessage(n)&&(this.debug&&"undefined"!=typeof console&&console.log&&console.log("[MessageBus] receive <=",n),e={rawEvent:t,origin:o,sourceWindow:r},this.emit("*",n,e),this.emit(n.type,n.payload,n,e)):this.debug&&"undefined"!=typeof console&&console.warn&&console.warn("[MessageBus] origin 不匹配,已忽略:",o)},u.prototype.bindEvent=function(t,e,n,o){t&&e&&n&&(t.addEventListener(e,n,o||!1),this.events.push({el:t,type:e,handler:n,options:o||!1}))},u.prototype.unbindEvents=function(){var t,e;for(t=0;t<this.events.length;t++)(e=this.events[t])&&e.el&&e.el.removeEventListener(e.type,e.handler,e.options);this.events=[]},u.prototype.destroy=function(){this.unbindEvents(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el),this.el=null},u.prototype.isRendered=function(){return!!this.el},l.prototype=Object.create(u.prototype),l.prototype.constructor=l,l.prototype.getStyles=function(t){return{wrapperCss:h({position:"absolute",top:"0",left:"0",right:"0",bottom:"0",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",boxSizing:"border-box",padding:"40px",color:"#ffffff",backgroundRepeat:"no-repeat",backgroundPosition:"center center",backgroundSize:"cover",textAlign:"center",zIndex:"99999"},(t=t||{}).wrapper),overlayCss:h({position:"absolute",top:"0",left:"0",right:"0",bottom:"0",background:"rgba(0, 0, 0, 0.28)"},t.overlay),contentCss:h({position:"relative",zIndex:"1",width:"100%",display:"flex",flexDirection:"column",alignItems:"center"},t.content),titleCss:h({fontSize:"85px",fontWeight:"bold",textShadow:"2px 2px 4px #0b1c32",letterSpacing:"5px",lineHeight:"1.3",maxWidth:"90%",wordBreak:"break-word"},t.title),descCss:h({marginTop:"30px",width:"100%",whiteSpace:"pre-wrap",lineHeight:"1.6",wordBreak:"break-word",fontSize:"40px"},t.desc),btnGroupCss:h({width:"100%",maxWidth:"800px",marginTop:"80px",display:"flex",justifyContent:"center",alignItems:"center"},t.buttonGroup),btnCss:h({display:"inline-flex",alignItems:"center",justifyContent:"center",minWidth:"240px",minHeight:"88px",padding:"20px 50px",boxSizing:"border-box",cursor:"pointer",fontSize:"40px",fontWeight:"bold",backgroundColor:"#04b6bb",backgroundRepeat:"no-repeat",backgroundPosition:"center center",backgroundSize:"cover",borderRadius:"50px",border:"none",color:"#fff",transition:"all 0.2s linear"},t.button)}},l.prototype.render=function(t,e,n){if(e=e||{},!t)throw new Error("[StartPage] render 失败:container 不存在");this.destroy();var o=this.getStyles(e),r=e.titleText||"欢迎进入游戏",i="string"==typeof e.descText?e.descText:"",s=e.buttonText||"开始游戏",a=c("div","kadou-start-page",o.wrapperCss),u=c("div","kadou-start-overlay",o.overlayCss),d=c("div","kadou-start-content",o.contentCss),h=c("div","kadou-start-title",o.titleCss,r);if(a.appendChild(u),d.appendChild(h),i){var p=c("div","kadou-start-desc",o.descCss,i);d.appendChild(p)}var l=c("div","kadou-start-btn-group",o.btnGroupCss),f=c("div","kadou-start-btn",o.btnCss,s);return this.bindEvent(f,"click",function(){"function"==typeof n&&n()}),l.appendChild(f),d.appendChild(l),a.appendChild(d),t.appendChild(a),this.el=a,a},f.prototype=Object.create(u.prototype),f.prototype.constructor=f,f.prototype.getStyles=function(t){return{wrapperCss:h({position:"absolute",top:"0",left:"0",right:"0",bottom:"0",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",boxSizing:"border-box",padding:"40px",color:"#ffffff",backgroundRepeat:"no-repeat",backgroundPosition:"center center",backgroundSize:"cover",textAlign:"center",zIndex:"99999"},(t=t||{}).wrapper),overlayCss:h({position:"absolute",top:"0",left:"0",right:"0",bottom:"0",background:"rgba(0, 0, 0, 0.35)"},t.overlay),contentCss:h({position:"relative",zIndex:"1",width:"100%",display:"flex",flexDirection:"column",alignItems:"center"},t.content),titleCss:h({fontSize:"72px",fontWeight:"bold",lineHeight:"1.3",maxWidth:"90%",wordBreak:"break-word",textShadow:"2px 2px 4px #0b1c32"},t.title),timeCss:h({marginTop:"28px",fontSize:"40px",wordBreak:"break-word"},t.time),scoreCss:h({marginTop:"28px",fontSize:"40px",wordBreak:"break-word"},t.score),btnGroupCss:h({width:"100%",maxWidth:"900px",marginTop:"70px",display:"flex",justifyContent:"center",alignItems:"center",gap:"24px",flexWrap:"wrap"},t.buttonGroup),primaryBtnCss:h({display:"inline-flex",alignItems:"center",justifyContent:"center",padding:"20px 50px",boxSizing:"border-box",cursor:"pointer",fontSize:"40px",fontWeight:"bold",background:"#04b6bb",borderRadius:"50px",border:"none",color:"#fff",transition:"all 0.2s linear"},t.primaryButton||t.button),secondaryBtnCss:h({display:"inline-flex",alignItems:"center",justifyContent:"center",padding:"20px 50px",boxSizing:"border-box",cursor:"pointer",fontSize:"40px",fontWeight:"bold",background:"#ff6600",borderRadius:"50px",color:"#fff",transition:"all 0.2s linear"},t.secondaryButton)}},f.prototype.render=function(t,e,n){if(e=e||{},n=n||{},!t)throw new Error("[EndPage] render 失败:container 不存在");this.destroy();var o=this.getStyles(e),r=e.titleText||"游戏结束",i="string"==typeof e.timeText?e.timeText:"",s="string"==typeof e.scoreText?e.scoreText:"",a=e.primaryButtonText||e.buttonText||"再来一次",u=e.secondaryButtonText||"",d=c("div","kadou-end-page",o.wrapperCss),h=c("div","kadou-end-overlay",o.overlayCss),p=c("div","kadou-end-content",o.contentCss),l=c("div","kadou-end-title",o.titleCss,r);if(d.appendChild(h),p.appendChild(l),s){var f=c("div","kadou-end-score",o.scoreCss,s);p.appendChild(f)}if(i){var g=c("div","kadou-end-time",o.timeCss,i);p.appendChild(g)}var y=c("div","kadou-end-btn-group",o.btnGroupCss);if(u){var E=c("div","kadou-end-secondary-btn",o.secondaryBtnCss,u);this.bindEvent(E,"click",function(){"function"==typeof n.onShowRank&&n.onShowRank()}),y.appendChild(E)}var m=c("div","kadou-end-primary-btn",o.primaryBtnCss,a);return this.bindEvent(m,"click",function(){"function"==typeof n.onRestart&&n.onRestart()}),y.appendChild(m),y.childNodes.length>0&&p.appendChild(y),d.appendChild(p),t.appendChild(d),this.el=d,d},g.prototype.setContainer=function(t){return t&&(this.container=t),this},g.prototype.showStartPage=function(t,e){var n=this,o=e||{};if(!this.container)throw new Error("[OverlayManager] showStartPage 失败:container 不存在");return this.hideStartPage(),this.startPage=new l,this.startPage.render(this.container,t||{},function(){"function"==typeof o.onStart&&o.onStart(),n.hideStartPage()}),n},g.prototype.hideStartPage=function(){return this.startPage&&(this.startPage.destroy(),this.startPage=null),this},g.prototype.showEndPage=function(t,e){var n=this,o=e||{};if(!this.container)throw new Error("[OverlayManager] showEndPage 失败:container 不存在");return this.hideEndPage(),this.endPage=new f,this.endPage.render(this.container,t||{},{onRestart:function(){"function"==typeof o.onRestart&&(o.onRestart(),n.hideEndPage())},onShowRank:function(){"function"==typeof o.onShowRank&&o.onShowRank()}}),n},g.prototype.hideEndPage=function(){return this.endPage&&(this.endPage.destroy(),this.endPage=null),this},g.prototype.hideAll=function(){return this.hideStartPage(),this.hideEndPage(),this},g.prototype.destroy=function(){this.hideAll(),this.container=null};var y={};function E(t){return y[t]||y.default||null}function m(t,e){return e?/^(https?:)?\/\//.test(n=e)||/^file:/.test(n)||/^data:/.test(n)||/^blob:/.test(n)?e:t+e.replace(/^\.\//,""):"";var n}function b(t,e){var n,o;if(!t)return t;for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&"string"==typeof(o=t[n])&&("backgroundImage"!==n&&"src"!==n?"background"===n&&(t[n]=o.replace(/url\((['"]?)(.+?)\1\)/g,function(t,n,o){return'url("'+m(e,o)+'")'})):t[n]=m(e,o));return t}function _(t,e){var n,o,r,i;if(!t)return t;for(n=t.startPage||{},o=t.endPage||{},r=["wrapper","overlay","content","title","desc","buttonGroup","button","primaryButton","secondaryButton","score"],i=0;i<r.length;i++)b(n[r[i]],e),b(o[r[i]],e);return function(t,e){var n,o,r,i;if(!t)return t;for(n=["bg","frame","actionBtn","logo","icon"],o=0;o<n.length;o++)"string"==typeof(i=t[r=n[o]])&&i&&(t[r]=m(e,i))}(t.host,e),t}function T(t,e){window.__KADOU_THEME_PACK__=null,function(t,e){var n=document.createElement("script"),o=!1;n.type="text/javascript",n.async=!0,n.src=t,n.onload=function(){o||(o=!0,e&&e(null,n))},n.onerror=function(){o||(o=!0,e&&e(new Error("Failed to load script: "+t)))},document.head.appendChild(n)}(t,function(n){var o,r,i;n?e&&e(n):(o=window.__KADOU_THEME_PACK__)&&o.key&&o.theme?(r=function(t){return t?t.replace(/\/[^\/]*$/,"/"):""}(t),i=_(o.theme,r),function(t,e){if(!t)throw new Error("Theme key is required");y[t]=e||{}}(o.key,i),e&&e(null,{key:o.key,url:t,from:"remote",theme:i})):e&&e(new Error("Invalid theme pack: "+t))})}function A(t,e){if(!t)throw new Error("themeRoot is required");if(!e)throw new Error("themeKey is required");return t.replace(/\/?$/,"/")+e+"/theme.js"}function S(t,e,n){if(y[t])n&&n(null,{key:t,from:"cache",theme:E(t)});else{var o;try{o=A(e,t)}catch(t){return void(n&&n(t))}T(o,n)}}function v(t){t=t||{},i.call(this),this.options=t,this.root=t.root||document.body,this.debug=!!t.debug,this.role=t.role||"host",this.state={sdkReady:!1,gameReady:!1,started:!1,paused:!1,destroyed:!1},this.currentThemeKey="",this.currentTheme=null,this.bus=new a({selfWindow:t.selfWindow||window,targetWindow:t.targetWindow||null,targetOrigin:t.targetOrigin||"*",allowedOrigins:t.allowedOrigins||["*"],source:t.source||"KADOU_GAME_SDK",debug:this.debug}),this.overlay="game"===this.role?new g({container:this.root}):null,this._bindBusEvents()}v.prototype=Object.create(i.prototype),v.prototype.constructor=v,v.prototype._bindBusEvents=function(){var t=this;this.bus.on("*",function(e,n){t.emit("message",e,n)}),this.bus.on(n.SDK_READY,function(e,n,o){t.state.sdkReady=!0,t.emit("sdk:ready",e,n,o)}),this.bus.on(n.GAME_READY,function(e,n,o){t.state.gameReady=!0,t.emit("game:ready",e,n,o)}),this.bus.on(n.GAME_LOAD,function(e,n,o){t.emit("game:load",e,n,o)}),this.bus.on(n.GAME_LOADED,function(e,n,o){t.emit("game:loaded",e,n,o)}),this.bus.on(n.GAME_LOADING,function(e,n,o){t.emit("game:loading",e,n,o)}),this.bus.on(n.GAME_START,function(e,n,o){t.state.started=!0,t.state.paused=!1,"game"===t.role&&t.overlay&&t.hideStartPage(),t.emit("game:start",e,n,o)}),this.bus.on(n.GAME_RESTART,function(e,n,o){t.state.started=!0,t.state.paused=!1,"game"===t.role&&t.overlay&&t.hideEndPage(),t.emit("game:restart",e,n,o)}),this.bus.on(n.GAME_PAUSE,function(e,n,o){t.state.paused=!0,t.emit("game:pause",e,n,o)}),this.bus.on(n.GAME_RESUME,function(e,n,o){t.state.paused=!1,t.emit("game:resume",e,n,o)}),this.bus.on(n.GAME_FINISH,function(e,n,o){t.state.started=!1,t.emit("game:finish",e,n,o)}),this.bus.on(n.GAME_DESTROY,function(e,n,o){t.state.destroyed=!0,t.emit("game:destroy",e,n,o)}),this.bus.on(n.THEME_UPDATE,function(e,n,o){t.currentThemeKey=e&&e.themeKey?e.themeKey:"",t.currentTheme=e&&e.theme?e.theme:e||null,t.emit("theme:update",e,n,o)}),this.bus.on(n.CONFIG_UPDATE,function(e,n,o){t.emit("config:update",e,n,o)}),this.bus.on(n.QUESTION_SUBMIT,function(e,n,o){t.emit("question:submit",e,n,o)}),this.bus.on(n.REPORT_GENERATED,function(e,n,o){t.emit("result:report",e,n,o)}),this.bus.on(n.PAGE_START_SHOW,function(e,n,o){t.emit("page:start:show",e,n,o),"game"===t.role&&t.renderStartPage(e)}),this.bus.on(n.PAGE_END_SHOW,function(e,n,o){t.emit("page:end:show",e,n,o),"game"===t.role&&t.renderEndPage(e)}),this.bus.on(n.ERROR,function(e,n,o){t.emit("error",e,n,o)}),this.bus.on(n.HEARTBEAT_PING,function(e,o,r){t.emit("heartbeat:ping",e,o,r),t.send(n.HEARTBEAT_PONG,{replyTo:o.requestId,time:(new Date).getTime()})}),this.bus.on(n.HEARTBEAT_PONG,function(e,n,o){t.emit("heartbeat:pong",e,n,o)}),this.bus.on(n.GAME_RANK,function(e,n,o){t.emit("game:rank",e,n,o)}),this.bus.on(n.ANSWER_START,function(e,n,o){t.emit("answer:start",e,n,o)}),this.bus.on(n.QUESTION_PREV,function(e,n,o){t.emit("question:prev",e,n,o)}),this.bus.on(n.QUESTION_NEXT,function(e,n,o){t.emit("question:next",e,n,o)}),this.bus.on(n.AUDIO_VOLUME_CHANGE,function(e,n,o){t.emit("volume:change",e,n,o)}),this.bus.on(n.ANSWER_COMPLETED,function(e,n,o){t.emit("answer:completed",e,n,o)}),this.bus.on(n.EXTENSION_EVENT,function(e,n,o){t.emit("extension:event",e,n,o)})},v.prototype.init=function(){return this.bus.start(),this.debug&&"undefined"!=typeof console&&console.log&&console.log("[GameManager] init, role =",this.role),this},v.prototype.destroy=function(){return this.state.destroyed=!0,this.bus.destroy(),this.overlay&&(this.overlay.hideStartPage&&this.overlay.hideStartPage(),this.overlay.hideEndPage&&this.overlay.hideEndPage()),this.off(),this.debug&&"undefined"!=typeof console&&console.log&&console.log("[GameManager] destroyed"),this},v.prototype.setTargetWindow=function(t){return this.bus.setTargetWindow(t),this},v.prototype.setTargetOrigin=function(t){return this.bus.setTargetOrigin(t),this},v.prototype.setRoot=function(t){return t?(this.root=t,this.overlay&&(this.overlay.container=t),this):this},v.prototype.send=function(t,e,n){return this.bus.send(t,e,n)},v.prototype.notifySdkReady=function(t){return this.state.sdkReady=!0,this.send(n.SDK_READY,t||{})},v.prototype.heartbeatPing=function(t){var e=t||{};return e.time=(new Date).getTime(),this.send(n.HEARTBEAT_PING,e)},v.prototype.gameReady=function(t){return this.state.gameReady=!0,this.send(n.GAME_READY,t||{})},v.prototype.loadGame=function(t){return this.send(n.GAME_LOAD,t||{})},v.prototype.gameLoading=function(t){return this.send(n.GAME_LOADING,t||{})},v.prototype.startGame=function(t){var e=t||{};return this.state.started=!0,this.state.paused=!1,this.emit("game:start",e,null,{local:!0}),this.bus.send(n.GAME_START,e)},v.prototype.restartGame=function(t){var e=t||{};return this.state.started=!0,this.state.paused=!1,this.emit("game:restart",e,null,{local:!0}),this.bus.send(n.GAME_RESTART,e)},v.prototype.showGameRank=function(t){var e=t||{};return this.bus.send(n.GAME_RANK,e)},v.prototype.pauseGame=function(t){return this.state.paused=!0,this.send(n.GAME_PAUSE,t||{})},v.prototype.resumeGame=function(t){return this.state.paused=!1,this.send(n.GAME_RESUME,t||{})},v.prototype.finishGame=function(t){return this.state.started=!1,this.send(n.GAME_FINISH,t||{})},v.prototype.destroyGame=function(t){return this.state.destroyed=!0,this.send(n.GAME_DESTROY,t||{})},v.prototype.updateTheme=function(t){return"game"===this.role&&(this.currentTheme=t||null),this.send(n.THEME_UPDATE,t||{})},v.prototype.applyTheme=function(t,e,o){var r=o||{};return r.themeKey=t||"",r.theme=e||{},"game"===this.role&&(this.currentThemeKey=r.themeKey,this.currentTheme=r.theme),this.send(n.THEME_UPDATE,r)},v.prototype.updateConfig=function(t){return this.send(n.CONFIG_UPDATE,t||{})},v.prototype.showStartPage=function(t){return this.send(n.PAGE_START_SHOW,t||{})},v.prototype.showEndPage=function(t){return this.send(n.PAGE_END_SHOW,t||{})},v.prototype.submitQuestion=function(t){return this.send(n.QUESTION_SUBMIT,t||{})},v.prototype.reportError=function(t){var e;return e=t instanceof Error?{message:t.message,stack:t.stack}:t||{},this.send(n.ERROR,e)},v.prototype.getState=function(){return{sdkReady:this.state.sdkReady,gameReady:this.state.gameReady,started:this.state.started,paused:this.state.paused,destroyed:this.state.destroyed}},v.prototype.isReady=function(){return!(!this.state.sdkReady||!this.state.gameReady)},v.prototype._mergePageTheme=function(t,e){var n,o=(this.currentTheme||{})[t]||{},r={};for(n in o)Object.prototype.hasOwnProperty.call(o,n)&&(r[n]=o[n]);for(n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r},v.prototype.renderStartPage=function(t,e){var n=this,o=t||{},r=this._mergePageTheme("startPage",o);return this.overlay&&this.overlay.showStartPage?(this.overlay.showStartPage(r,e||{onStart:function(){n.startGame({from:"sdk-start-game"})}}),this):this},v.prototype.hideStartPage=function(){return this.overlay&&this.overlay.hideStartPage&&this.overlay.hideStartPage(),this},v.prototype.renderEndPage=function(t,e){var n=this,o=t||{},r=this._mergePageTheme("endPage",o);return this.overlay&&this.overlay.showEndPage?(this.overlay.showEndPage(r,e||{onRestart:function(){n.restartGame({from:"sdk-restart-game"})},onShowRank:function(){n.showGameRank({from:"sdk-game-rank"})}}),this):this},v.prototype.hideEndPage=function(){return this.overlay&&this.overlay.hideEndPage&&this.overlay.hideEndPage(),this},v.prototype.loadThemeByUrl=function(t,e){return T(t,e),this},v.prototype.ensureTheme=function(t,e,n){return S(t,e,n),this},v.prototype.buildThemeUrl=function(t,e){return A(t,e)},v.prototype.gameLoaded=function(t){return this.send(n.GAME_LOADED,t||{})},v.prototype.startAnswer=function(t){return this.send(n.ANSWER_START,t||{})},v.prototype.prevQuestion=function(t){return this.send(n.QUESTION_PREV,t||{})},v.prototype.nextQuestion=function(t){return this.send(n.QUESTION_NEXT,t||{})},v.prototype.changeVolume=function(t){return this.send(n.AUDIO_VOLUME_CHANGE,t||{})},v.prototype.completedAnswer=function(t){return this.send(n.ANSWER_COMPLETED,t||{})},v.prototype.extensionEvent=function(t){return this.send(n.EXTENSION_EVENT,t||{})};var w={SDK_VERSION:e,MESSAGE_TYPES:n,EventEmitter:i,MessageBus:a,GameRuntime:v};t.EventEmitter=i,t.GameRuntime=v,t.MESSAGE_TYPES=n,t.MessageBus=a,t.SDK_VERSION=e,t.default=w,Object.defineProperty(t,"__esModule",{value:!0})});
|
|
2
|
+
//# sourceMappingURL=kadou-game-sdk.umd.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kadou-game-sdk.umd.min.js","sources":["../src/version.js","../src/constants/message-types.js","../src/core/utils.js","../src/core/event-emitter.js","../src/core/post-message-channel.js","../src/core/message-bus.js","../src/ui/base-page.js","../src/ui/utils/style.js","../src/ui/utils/dom.js","../src/ui/start-page.js","../src/ui/end-page.js","../src/ui/overlay-manager.js","../src/theme/theme-registry.js","../src/theme/theme-loader.js","../src/manager/game-manager.js","../src/index.js"],"sourcesContent":["var SDK_VERSION = '1.0.0';\r\n\r\nexport { SDK_VERSION };\r\nexport default SDK_VERSION;","/**\r\n * 卡兜游戏 SDK 通讯消息类型定义\r\n * 用于 父页面(Vue壳) <-> 子iframe(游戏) 之间的 postMessage 通讯\r\n */\r\nvar MESSAGE_TYPES = {\r\n\r\n // 基础系统\r\n SDK_READY: 'SDK_READY',\r\n HEARTBEAT_PING: 'HEARTBEAT_PING',\r\n HEARTBEAT_PONG: 'HEARTBEAT_PONG',\r\n ERROR_THROWN: 'ERROR_THROWN',\r\n\r\n // 父 -> 子:游戏控制\r\n GAME_LOAD: 'GAME_LOAD',//加载游戏\r\n GAME_START: 'GAME_START',//游戏开始\r\n GAME_PAUSE: 'GAME_PAUSE',//游戏暂停\r\n GAME_RESUME: 'GAME_RESUME',//游戏恢复\r\n GAME_RESTART: 'GAME_RESTART',//重玩游戏\r\n GAME_DESTROY: 'GAME_DESTROY',//销毁游戏\r\n\r\n // 子 -> 父:游戏状态\r\n GAME_READY: 'GAME_READY',//游戏准备完成\r\n GAME_LOADED: 'GAME_LOADED',//游戏加载完成\r\n GAME_LOADING:'GAME_LOADING',//游戏加载进度\r\n GAME_FINISH: 'GAME_FINISH',//游戏结束\r\n GAME_RANK: 'GAME_RANK',//游戏排行榜\r\n\r\n // 配置 / 主题\r\n THEME_UPDATE: 'THEME_UPDATE',//更新主题\r\n CONFIG_UPDATE: 'CONFIG_UPDATE',//配置更新\r\n\r\n // 题目 / 答题\r\n QUESTION_SUBMIT: 'QUESTION_SUBMIT', //单题提交\r\n QUESTION_PREV: 'QUESTION_PREV',//上一题\r\n QUESTION_NEXT: 'QUESTION_NEXT',//下一题\r\n ANSWER_START: 'ANSWER_START',//开始答题\r\n ANSWER_COMPLETED: 'ANSWER_COMPLETED',//答题完成\r\n\r\n // 音频\r\n AUDIO_VOLUME_CHANGE: 'AUDIO_VOLUME_CHANGE',//调节音量包括 音效背景音\r\n\r\n //UI页面\r\n PAGE_START_SHOW: 'PAGE_START_SHOW',//显示开始画面\r\n PAGE_END_SHOW: 'PAGE_END_SHOW',//显示结束画面\r\n\r\n EXTENSION_EVENT: 'EXTENSION_EVENT',//扩展消息类型\r\n\r\n /**\r\n * 异常消息\r\n */\r\n ERROR: 'ERROR'\r\n};\r\n\r\nexport { MESSAGE_TYPES };\r\nexport default MESSAGE_TYPES;","export function isFunction(fn) {\r\n return typeof fn === 'function';\r\n}\r\n\r\nexport function isObject(val) {\r\n return Object.prototype.toString.call(val) === '[object Object]';\r\n}\r\n\r\nexport function noop() {}\r\n\r\nexport function createRequestId(prefix) {\r\n prefix = prefix || 'msg';\r\n return prefix + '_' + new Date().getTime() + '_' + Math.random().toString(16).slice(2, 10);\r\n}","import { isFunction } from './utils.js';\r\n\r\nfunction EventEmitter() {\r\n this.events = {};\r\n}\r\n\r\nEventEmitter.prototype.on = function (eventName, handler) {\r\n if (!eventName || !isFunction(handler)) return this;\r\n\r\n if (!this.events[eventName]) {\r\n this.events[eventName] = [];\r\n }\r\n\r\n this.events[eventName].push(handler);\r\n return this;\r\n};\r\n\r\nEventEmitter.prototype.once = function (eventName, handler) {\r\n var self = this;\r\n\r\n if (!eventName || !isFunction(handler)) return this;\r\n\r\n function wrapper() {\r\n self.off(eventName, wrapper);\r\n handler.apply(null, arguments);\r\n }\r\n\r\n wrapper.__original__ = handler;\r\n this.on(eventName, wrapper);\r\n\r\n return this;\r\n};\r\n\r\nEventEmitter.prototype.off = function (eventName, handler) {\r\n var handlers;\r\n var result;\r\n var i;\r\n var fn;\r\n\r\n if (!eventName) {\r\n this.events = {};\r\n return this;\r\n }\r\n\r\n handlers = this.events[eventName];\r\n if (!handlers || !handlers.length) return this;\r\n\r\n if (!handler) {\r\n delete this.events[eventName];\r\n return this;\r\n }\r\n\r\n result = [];\r\n for (i = 0; i < handlers.length; i++) {\r\n fn = handlers[i];\r\n if (fn !== handler && fn.__original__ !== handler) {\r\n result.push(fn);\r\n }\r\n }\r\n\r\n if (result.length) {\r\n this.events[eventName] = result;\r\n } else {\r\n delete this.events[eventName];\r\n }\r\n\r\n return this;\r\n};\r\n\r\nEventEmitter.prototype.emit = function (eventName) {\r\n var handlers = this.events[eventName];\r\n var args;\r\n var i;\r\n\r\n if (!handlers || !handlers.length) return this;\r\n\r\n args = Array.prototype.slice.call(arguments, 1);\r\n handlers = handlers.slice();\r\n\r\n for (i = 0; i < handlers.length; i++) {\r\n try {\r\n handlers[i].apply(null, args);\r\n } catch (error) {\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error('[EventEmitter] \"' + eventName + '\" handler error:', error);\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\nexport default EventEmitter;","import { createRequestId, isObject } from './utils.js';\r\nimport SDK_VERSION from '../version.js';\r\n\r\nvar DEFAULT_SOURCE = 'KADOU_GAME_SDK';\r\n\r\nfunction PostMessageChannel(options) {\r\n options = options || {};\r\n\r\n this.selfWindow = options.selfWindow || window;\r\n this.targetWindow = options.targetWindow || null;\r\n this.targetOrigin = options.targetOrigin || '*';\r\n this.source = options.source || DEFAULT_SOURCE;\r\n this.debug = !!options.debug;\r\n}\r\n\r\nPostMessageChannel.prototype.setTargetWindow = function (targetWindow) {\r\n this.targetWindow = targetWindow;\r\n return this;\r\n};\r\n\r\nPostMessageChannel.prototype.setTargetOrigin = function (targetOrigin) {\r\n this.targetOrigin = targetOrigin || '*';\r\n return this;\r\n};\r\n\r\nPostMessageChannel.prototype.createMessage = function (type, payload, meta) {\r\n payload = payload || {};\r\n meta = meta || {};\r\n\r\n return {\r\n source: this.source,\r\n version: SDK_VERSION,\r\n type: type,\r\n requestId: createRequestId(),\r\n timestamp: new Date().getTime(),\r\n payload: isObject(payload) ? payload : { value: payload },\r\n meta: isObject(meta) ? meta : {}\r\n };\r\n};\r\n\r\nPostMessageChannel.prototype.send = function (type, payload, meta) {\r\n var message;\r\n\r\n if (!this.targetWindow || !this.targetWindow.postMessage) {\r\n if (this.debug && typeof console !== 'undefined' && console.warn) {\r\n console.warn('[PostMessageChannel] targetWindow 不存在,消息发送失败:', type);\r\n }\r\n return null;\r\n }\r\n\r\n message = this.createMessage(type, payload, meta);\r\n this.targetWindow.postMessage(message, this.targetOrigin);\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[PostMessageChannel] send =>', message);\r\n }\r\n\r\n return message;\r\n};\r\n\r\nPostMessageChannel.prototype.isValidMessage = function (data) {\r\n return !!(\r\n data &&\r\n typeof data === 'object' &&\r\n data.source === this.source &&\r\n typeof data.type === 'string'\r\n );\r\n};\r\n\r\nexport default PostMessageChannel;","import EventEmitter from './event-emitter.js';\r\nimport PostMessageChannel from './post-message-channel.js';\r\n\r\nfunction MessageBus(options) {\r\n options = options || {};\r\n\r\n EventEmitter.call(this);\r\n\r\n this.channel = new PostMessageChannel(options);\r\n this.selfWindow = options.selfWindow || window;\r\n this.allowedOrigins = options.allowedOrigins || ['*'];\r\n this.debug = !!options.debug;\r\n\r\n this._boundOnMessage = this._onMessage.bind(this);\r\n this._listening = false;\r\n}\r\n\r\nMessageBus.prototype = Object.create(EventEmitter.prototype);\r\nMessageBus.prototype.constructor = MessageBus;\r\n\r\nMessageBus.prototype.start = function () {\r\n if (this._listening) return this;\r\n\r\n this.selfWindow.addEventListener('message', this._boundOnMessage, false);\r\n this._listening = true;\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[MessageBus] started');\r\n }\r\n\r\n return this;\r\n};\r\n\r\nMessageBus.prototype.stop = function () {\r\n if (!this._listening) return this;\r\n\r\n this.selfWindow.removeEventListener('message', this._boundOnMessage, false);\r\n this._listening = false;\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[MessageBus] stopped');\r\n }\r\n\r\n return this;\r\n};\r\n\r\nMessageBus.prototype.destroy = function () {\r\n this.stop();\r\n this.off();\r\n return this;\r\n};\r\n\r\nMessageBus.prototype.setTargetWindow = function (targetWindow) {\r\n this.channel.setTargetWindow(targetWindow);\r\n return this;\r\n};\r\n\r\nMessageBus.prototype.setTargetOrigin = function (targetOrigin) {\r\n this.channel.setTargetOrigin(targetOrigin);\r\n return this;\r\n};\r\n\r\nMessageBus.prototype.send = function (type, payload, meta) {\r\n return this.channel.send(type, payload, meta);\r\n};\r\n\r\nMessageBus.prototype._matchOrigin = function (origin) {\r\n var i;\r\n\r\n if (!this.allowedOrigins || !this.allowedOrigins.length) return true;\r\n if (this.allowedOrigins[0] === '*' || this.allowedOrigins.indexOf('*') > -1) return true;\r\n\r\n for (i = 0; i < this.allowedOrigins.length; i++) {\r\n if (this.allowedOrigins[i] === origin) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nMessageBus.prototype._onMessage = function (event) {\r\n var data = event.data;\r\n var origin = event.origin;\r\n var source = event.source;\r\n var context;\r\n\r\n if (!this._matchOrigin(origin)) {\r\n if (this.debug && typeof console !== 'undefined' && console.warn) {\r\n console.warn('[MessageBus] origin 不匹配,已忽略:', origin);\r\n }\r\n return;\r\n }\r\n\r\n if (!this.channel.isValidMessage(data)) return;\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[MessageBus] receive <=', data);\r\n }\r\n\r\n context = {\r\n rawEvent: event,\r\n origin: origin,\r\n sourceWindow: source\r\n };\r\n\r\n this.emit('*', data, context);\r\n this.emit(data.type, data.payload, data, context);\r\n};\r\n\r\nexport default MessageBus;","function BasePage() {\r\n this.el = null;\r\n this.events = [];\r\n}\r\n\r\n/**\r\n * 绑定事件,并记录下来,destroy 时统一卸载\r\n */\r\nBasePage.prototype.bindEvent = function (el, type, handler, options) {\r\n if (!el || !type || !handler) return;\r\n\r\n el.addEventListener(type, handler, options || false);\r\n\r\n this.events.push({\r\n el: el,\r\n type: type,\r\n handler: handler,\r\n options: options || false\r\n });\r\n};\r\n\r\n/**\r\n * 解绑全部事件\r\n */\r\nBasePage.prototype.unbindEvents = function () {\r\n var i;\r\n var item;\r\n\r\n for (i = 0; i < this.events.length; i++) {\r\n item = this.events[i];\r\n\r\n if (item && item.el) {\r\n item.el.removeEventListener(item.type, item.handler, item.options);\r\n }\r\n }\r\n\r\n this.events = [];\r\n};\r\n\r\n/**\r\n * 销毁页面\r\n */\r\nBasePage.prototype.destroy = function () {\r\n this.unbindEvents();\r\n\r\n if (this.el && this.el.parentNode) {\r\n this.el.parentNode.removeChild(this.el);\r\n }\r\n\r\n this.el = null;\r\n};\r\n\r\n/**\r\n * 是否已渲染\r\n */\r\nBasePage.prototype.isRendered = function () {\r\n return !!this.el;\r\n};\r\n\r\nexport default BasePage;","export function isPlainObject(obj) {\r\n return Object.prototype.toString.call(obj) === '[object Object]';\r\n}\r\n\r\nexport function mergeStyles(base, extra) {\r\n var result = {};\r\n var key;\r\n\r\n base = isPlainObject(base) ? base : {};\r\n extra = isPlainObject(extra) ? extra : {};\r\n\r\n for (key in base) {\r\n if (Object.prototype.hasOwnProperty.call(base, key)) {\r\n result[key] = base[key];\r\n }\r\n }\r\n\r\n for (key in extra) {\r\n if (Object.prototype.hasOwnProperty.call(extra, key)) {\r\n result[key] = extra[key];\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function normalizeStyleValue(key, value) {\r\n if (value == null) return '';\r\n\r\n if (key === 'backgroundImage' && value) {\r\n if (\r\n typeof value === 'string' &&\r\n value.indexOf('url(') !== 0 &&\r\n value !== 'none'\r\n ) {\r\n return 'url(\"' + value + '\")';\r\n }\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nexport function applyStyles(el, styles) {\r\n var key;\r\n if (!el || !styles) return;\r\n\r\n for (key in styles) {\r\n if (Object.prototype.hasOwnProperty.call(styles, key)) {\r\n el.style[key] = normalizeStyleValue(key, styles[key]);\r\n }\r\n }\r\n}","import { applyStyles } from './style.js';\r\n\r\nexport function createElement(tag, className, styles, text) {\r\n var el = document.createElement(tag);\r\n\r\n if (className) {\r\n el.className = className;\r\n }\r\n\r\n if (styles) {\r\n applyStyles(el, styles);\r\n }\r\n\r\n if (text != null) {\r\n el.textContent = String(text);\r\n }\r\n\r\n return el;\r\n}","import BasePage from './base-page.js';\r\nimport { mergeStyles } from './utils/style.js';\r\nimport { createElement } from './utils/dom.js';\r\n\r\nfunction StartPage() {\r\n BasePage.call(this);\r\n}\r\n\r\nStartPage.prototype = Object.create(BasePage.prototype);\r\nStartPage.prototype.constructor = StartPage;\r\n\r\n/**\r\n * 获取最终样式\r\n * 不再自己根据 themeKey 查主题\r\n * 直接使用 game-manager 传进来的最终页面配置\r\n */\r\nStartPage.prototype.getStyles = function (data) {\r\n data = data || {};\r\n\r\n var wrapperCss = mergeStyles(\r\n {\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n boxSizing: 'border-box',\r\n padding: '40px',\r\n color: '#ffffff',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center center',\r\n backgroundSize: 'cover',\r\n textAlign: 'center',\r\n zIndex: '99999'\r\n },\r\n data.wrapper\r\n );\r\n\r\n var overlayCss = mergeStyles(\r\n {\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n background: 'rgba(0, 0, 0, 0.28)'\r\n },\r\n data.overlay\r\n );\r\n\r\n var contentCss = mergeStyles(\r\n {\r\n position: 'relative',\r\n zIndex: '1',\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center'\r\n },\r\n data.content\r\n );\r\n\r\n var titleCss = mergeStyles(\r\n {\r\n fontSize: '85px',\r\n fontWeight: 'bold',\r\n textShadow: '2px 2px 4px #0b1c32',\r\n letterSpacing: '5px',\r\n lineHeight: '1.3',\r\n maxWidth: '90%',\r\n wordBreak: 'break-word'\r\n },\r\n data.title\r\n );\r\n\r\n var descCss = mergeStyles(\r\n {\r\n marginTop: '30px',\r\n width: '100%',\r\n whiteSpace: 'pre-wrap',\r\n lineHeight: '1.6',\r\n wordBreak: 'break-word',\r\n fontSize: '40px'\r\n },\r\n data.desc\r\n );\r\n\r\n var btnGroupCss = mergeStyles(\r\n {\r\n width: '100%',\r\n maxWidth: '800px',\r\n marginTop: '80px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n },\r\n data.buttonGroup\r\n );\r\n\r\n var btnCss = mergeStyles(\r\n {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minWidth: '240px',\r\n minHeight: '88px',\r\n padding: '20px 50px',\r\n boxSizing: 'border-box',\r\n cursor: 'pointer',\r\n fontSize: '40px',\r\n fontWeight: 'bold',\r\n backgroundColor: '#04b6bb',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center center',\r\n backgroundSize: 'cover',\r\n borderRadius: '50px',\r\n border: 'none',\r\n color: '#fff',\r\n transition: 'all 0.2s linear'\r\n },\r\n data.button\r\n );\r\n\r\n return {\r\n wrapperCss: wrapperCss,\r\n overlayCss: overlayCss,\r\n contentCss: contentCss,\r\n titleCss: titleCss,\r\n descCss: descCss,\r\n btnGroupCss: btnGroupCss,\r\n btnCss: btnCss\r\n };\r\n};\r\n\r\nStartPage.prototype.render = function (container, data, onStart) {\r\n data = data || {};\r\n\r\n if (!container) {\r\n throw new Error('[StartPage] render 失败:container 不存在');\r\n }\r\n\r\n this.destroy();\r\n\r\n var styles = this.getStyles(data);\r\n\r\n var titleText = data.titleText || '欢迎进入游戏';\r\n var descText = typeof data.descText === 'string' ? data.descText : '';\r\n var buttonText = data.buttonText || '开始游戏';\r\n\r\n var rootDom = createElement('div', 'kadou-start-page', styles.wrapperCss);\r\n var overlayDom = createElement('div', 'kadou-start-overlay', styles.overlayCss);\r\n var contentDom = createElement('div', 'kadou-start-content', styles.contentCss);\r\n var titleDom = createElement('div', 'kadou-start-title', styles.titleCss, titleText);\r\n\r\n rootDom.appendChild(overlayDom);\r\n contentDom.appendChild(titleDom);\r\n\r\n if (descText) {\r\n var descDom = createElement('div', 'kadou-start-desc', styles.descCss, descText);\r\n contentDom.appendChild(descDom);\r\n }\r\n\r\n var btnGroupDom = createElement('div', 'kadou-start-btn-group', styles.btnGroupCss);\r\n var btnDom = createElement('div', 'kadou-start-btn', styles.btnCss, buttonText);\r\n this.bindEvent(btnDom, 'click', function () {\r\n if (typeof onStart === 'function') {\r\n onStart();\r\n }\r\n });\r\n\r\n btnGroupDom.appendChild(btnDom);\r\n contentDom.appendChild(btnGroupDom);\r\n rootDom.appendChild(contentDom);\r\n\r\n container.appendChild(rootDom);\r\n this.el = rootDom;\r\n\r\n return rootDom;\r\n};\r\n\r\nexport default StartPage;","import BasePage from './base-page.js';\r\nimport { mergeStyles } from './utils/style.js';\r\nimport { createElement } from './utils/dom.js';\r\n\r\nfunction EndPage() {\r\n BasePage.call(this);\r\n}\r\n\r\nEndPage.prototype = Object.create(BasePage.prototype);\r\nEndPage.prototype.constructor = EndPage;\r\n\r\n/**\r\n * 获取最终样式\r\n * 直接使用 game-manager 传进来的最终页面配置\r\n */\r\nEndPage.prototype.getStyles = function (data) {\r\n data = data || {};\r\n\r\n var wrapperCss = mergeStyles(\r\n {\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n boxSizing: 'border-box',\r\n padding: '40px',\r\n color: '#ffffff',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center center',\r\n backgroundSize: 'cover',\r\n textAlign: 'center',\r\n zIndex: '99999'\r\n },\r\n data.wrapper\r\n );\r\n\r\n var overlayCss = mergeStyles(\r\n {\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n background: 'rgba(0, 0, 0, 0.35)'\r\n },\r\n data.overlay\r\n );\r\n\r\n var contentCss = mergeStyles(\r\n {\r\n position: 'relative',\r\n zIndex: '1',\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center'\r\n },\r\n data.content\r\n );\r\n\r\n var titleCss = mergeStyles(\r\n {\r\n fontSize: '72px',\r\n fontWeight: 'bold',\r\n lineHeight: '1.3',\r\n maxWidth: '90%',\r\n wordBreak: 'break-word',\r\n textShadow: '2px 2px 4px #0b1c32'\r\n },\r\n data.title\r\n );\r\n var timeCss = mergeStyles(\r\n {\r\n marginTop: '28px',\r\n fontSize:'40px',\r\n wordBreak: 'break-word'\r\n },\r\n data.time\r\n );\r\n var scoreCss = mergeStyles(\r\n {\r\n marginTop: '28px',\r\n fontSize:'40px',\r\n wordBreak: 'break-word'\r\n },\r\n data.score\r\n );\r\n\r\n var btnGroupCss = mergeStyles(\r\n {\r\n width: '100%',\r\n maxWidth: '900px',\r\n marginTop: '70px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n gap: '24px',\r\n flexWrap: 'wrap'\r\n },\r\n data.buttonGroup\r\n );\r\n\r\n var primaryBtnCss = mergeStyles(\r\n {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '20px 50px',\r\n boxSizing: 'border-box',\r\n cursor: 'pointer',\r\n fontSize: '40px',\r\n fontWeight: 'bold',\r\n background: '#04b6bb',\r\n borderRadius: '50px',\r\n border: 'none',\r\n color: '#fff',\r\n transition: 'all 0.2s linear'\r\n },\r\n data.primaryButton || data.button\r\n );\r\n\r\n var secondaryBtnCss = mergeStyles(\r\n {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '20px 50px',\r\n boxSizing: 'border-box',\r\n cursor: 'pointer',\r\n fontSize: '40px',\r\n fontWeight: 'bold',\r\n background: '#ff6600',\r\n borderRadius: '50px',\r\n color: '#fff',\r\n transition: 'all 0.2s linear'\r\n },\r\n data.secondaryButton\r\n );\r\n\r\n return {\r\n wrapperCss: wrapperCss,\r\n overlayCss: overlayCss,\r\n contentCss: contentCss,\r\n titleCss: titleCss,\r\n timeCss:timeCss,\r\n scoreCss: scoreCss,\r\n btnGroupCss: btnGroupCss,\r\n primaryBtnCss: primaryBtnCss,\r\n secondaryBtnCss: secondaryBtnCss\r\n };\r\n};\r\n\r\n/**\r\n * 渲染结束页\r\n * callbacks:\r\n * - onRestart\r\n * - onClose\r\n */\r\nEndPage.prototype.render = function (container, data, callbacks) {\r\n data = data || {};\r\n callbacks = callbacks || {};\r\n\r\n if (!container) {\r\n throw new Error('[EndPage] render 失败:container 不存在');\r\n }\r\n\r\n this.destroy();\r\n\r\n var styles = this.getStyles(data);\r\n\r\n var titleText = data.titleText || '游戏结束';\r\n var timeText = typeof data.timeText === 'string' ? data.timeText : '';\r\n var scoreText = typeof data.scoreText === 'string' ? data.scoreText : '';\r\n var primaryButtonText = data.primaryButtonText || data.buttonText || '再来一次';\r\n var secondaryButtonText = data.secondaryButtonText || '';\r\n\r\n var rootDom = createElement('div', 'kadou-end-page', styles.wrapperCss);\r\n var overlayDom = createElement('div', 'kadou-end-overlay', styles.overlayCss);\r\n var contentDom = createElement('div', 'kadou-end-content', styles.contentCss);\r\n var titleDom = createElement('div', 'kadou-end-title', styles.titleCss, titleText);\r\n\r\n rootDom.appendChild(overlayDom);\r\n contentDom.appendChild(titleDom);\r\n\r\n if (scoreText) {\r\n var scoreDom = createElement('div', 'kadou-end-score', styles.scoreCss, scoreText);\r\n contentDom.appendChild(scoreDom);\r\n }\r\n\r\n if (timeText) {\r\n var timeDom = createElement('div', 'kadou-end-time', styles.timeCss, timeText);\r\n contentDom.appendChild(timeDom);\r\n }\r\n\r\n var btnGroupDom = createElement('div', 'kadou-end-btn-group', styles.btnGroupCss);\r\n\r\n\r\n if (secondaryButtonText) {\r\n var secondaryBtnDom = createElement(\r\n 'div',\r\n 'kadou-end-secondary-btn',\r\n styles.secondaryBtnCss,\r\n secondaryButtonText\r\n );\r\n\r\n this.bindEvent(secondaryBtnDom, 'click', function () {\r\n if (typeof callbacks.onShowRank === 'function') {\r\n callbacks.onShowRank();\r\n }\r\n });\r\n\r\n btnGroupDom.appendChild(secondaryBtnDom);\r\n }\r\n if (primaryButtonText) {\r\n var primaryBtnDom = createElement(\r\n 'div',\r\n 'kadou-end-primary-btn',\r\n styles.primaryBtnCss,\r\n primaryButtonText\r\n );\r\n\r\n this.bindEvent(primaryBtnDom, 'click', function () {\r\n if (typeof callbacks.onRestart === 'function') {\r\n callbacks.onRestart();\r\n }\r\n });\r\n\r\n btnGroupDom.appendChild(primaryBtnDom);\r\n }\r\n\r\n if (btnGroupDom.childNodes.length > 0) {\r\n contentDom.appendChild(btnGroupDom);\r\n }\r\n\r\n rootDom.appendChild(contentDom);\r\n container.appendChild(rootDom);\r\n\r\n this.el = rootDom;\r\n\r\n return rootDom;\r\n};\r\n\r\nexport default EndPage;","import StartPage from './start-page.js';\r\nimport EndPage from './end-page.js';\r\n\r\nfunction OverlayManager(options) {\r\n options = options || {};\r\n\r\n this.container = options.container || document.body;\r\n this.startPage = null;\r\n this.endPage = null;\r\n}\r\n\r\n/**\r\n * 设置容器\r\n */\r\nOverlayManager.prototype.setContainer = function (container) {\r\n if (container) {\r\n this.container = container;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * 显示开始页\r\n * data 直接使用统一 pageData 结构\r\n */\r\nOverlayManager.prototype.showStartPage = function (data, callbacks) {\r\n var self = this;\r\n var finalCallbacks = callbacks || {};\r\n\r\n if (!this.container) {\r\n throw new Error('[OverlayManager] showStartPage 失败:container 不存在');\r\n }\r\n\r\n this.hideStartPage();\r\n\r\n this.startPage = new StartPage();\r\n this.startPage.render(\r\n this.container,\r\n data || {},\r\n function () {\r\n if (typeof finalCallbacks.onStart === 'function') {\r\n finalCallbacks.onStart();\r\n }\r\n\r\n // 如果没传回调,也不自动销毁,由外部决定何时关闭\r\n // 想点按钮立刻隐藏,可以把下面这行打开\r\n self.hideStartPage();\r\n }\r\n );\r\n\r\n return self;\r\n};\r\n\r\n/**\r\n * 隐藏开始页\r\n */\r\nOverlayManager.prototype.hideStartPage = function () {\r\n if (this.startPage) {\r\n this.startPage.destroy();\r\n this.startPage = null;\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 显示结束页\r\n */\r\nOverlayManager.prototype.showEndPage = function (data, callbacks) {\r\n var self = this;\r\n var finalCallbacks = callbacks || {};\r\n\r\n if (!this.container) {\r\n throw new Error('[OverlayManager] showEndPage 失败:container 不存在');\r\n }\r\n\r\n this.hideEndPage();\r\n\r\n this.endPage = new EndPage();\r\n this.endPage.render(\r\n this.container,\r\n data || {},\r\n {\r\n onRestart: function () {\r\n if (typeof finalCallbacks.onRestart === 'function') {\r\n finalCallbacks.onRestart();\r\n self.hideEndPage();\r\n }\r\n },\r\n onShowRank: function () {\r\n if (typeof finalCallbacks.onShowRank === 'function') {\r\n finalCallbacks.onShowRank();\r\n }\r\n }\r\n }\r\n );\r\n\r\n return self;\r\n};\r\n\r\n/**\r\n * 隐藏结束页\r\n */\r\nOverlayManager.prototype.hideEndPage = function () {\r\n if (this.endPage) {\r\n this.endPage.destroy();\r\n this.endPage = null;\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 全部隐藏\r\n */\r\nOverlayManager.prototype.hideAll = function () {\r\n this.hideStartPage();\r\n this.hideEndPage();\r\n return this;\r\n};\r\n\r\n/**\r\n * 销毁管理器\r\n */\r\nOverlayManager.prototype.destroy = function () {\r\n this.hideAll();\r\n this.container = null;\r\n};\r\n\r\nexport default OverlayManager;","var themes = {};\r\n\r\n/**\r\n * 注册主题\r\n * @param {string} key 主题 key\r\n * @param {object} config 主题配置\r\n */\r\nfunction registerTheme(key, config) {\r\n if (!key) {\r\n throw new Error('Theme key is required');\r\n }\r\n\r\n themes[key] = config || {};\r\n}\r\n\r\n/**\r\n * 是否已存在主题\r\n * @param {string} key\r\n * @returns {boolean}\r\n */\r\nfunction hasTheme(key) {\r\n return !!themes[key];\r\n}\r\n\r\n/**\r\n * 获取主题\r\n * @param {string} key\r\n * @returns {object|null}\r\n */\r\nfunction getTheme(key) {\r\n return themes[key] || themes.default || null;\r\n}\r\n\r\n/**\r\n * 清除某个主题\r\n * @param {string} key\r\n */\r\nfunction clearTheme(key) {\r\n if (key && themes[key]) {\r\n delete themes[key];\r\n }\r\n}\r\n\r\n/**\r\n * 清空全部主题\r\n */\r\nfunction clearAllThemes() {\r\n themes = {};\r\n}\r\n\r\n/**\r\n * 获取全部主题\r\n * 调试时可用\r\n */\r\nfunction getAllThemes() {\r\n return themes;\r\n}\r\n\r\nexport {\r\n registerTheme,\r\n hasTheme,\r\n getTheme,\r\n clearTheme,\r\n clearAllThemes,\r\n getAllThemes\r\n};","import { registerTheme, hasTheme, getTheme } from './theme-registry.js';\r\n\r\nfunction dirname(url) {\r\n if (!url) return '';\r\n return url.replace(/\\/[^\\/]*$/, '/');\r\n}\r\n\r\nfunction isAbsoluteUrl(url) {\r\n return /^(https?:)?\\/\\//.test(url) ||\r\n /^file:/.test(url) ||\r\n /^data:/.test(url) ||\r\n /^blob:/.test(url);\r\n}\r\n\r\nfunction joinUrl(base, path) {\r\n if (!path) return '';\r\n if (isAbsoluteUrl(path)) return path;\r\n return base + path.replace(/^\\.\\//, '');\r\n}\r\n\r\nfunction patchStyleAssetPaths(styleObj, baseUrl) {\r\n var key;\r\n var value;\r\n\r\n if (!styleObj) return styleObj;\r\n\r\n for (key in styleObj) {\r\n if (!Object.prototype.hasOwnProperty.call(styleObj, key)) continue;\r\n\r\n value = styleObj[key];\r\n\r\n if (typeof value !== 'string') continue;\r\n\r\n if (key === 'backgroundImage') {\r\n styleObj[key] = joinUrl(baseUrl, value);\r\n continue;\r\n }\r\n\r\n if (key === 'src') {\r\n styleObj[key] = joinUrl(baseUrl, value);\r\n continue;\r\n }\r\n\r\n if (key === 'background') {\r\n styleObj[key] = value.replace(/url\\((['\"]?)(.+?)\\1\\)/g, function (_, quote, assetPath) {\r\n return 'url(\"' + joinUrl(baseUrl, assetPath) + '\")';\r\n });\r\n }\r\n }\r\n\r\n return styleObj;\r\n}\r\n\r\nfunction patchHostAssetPaths(hostConfig, baseUrl) {\r\n var keys;\r\n var i;\r\n var key;\r\n var value;\r\n\r\n if (!hostConfig) return hostConfig;\r\n\r\n keys = ['bg', 'frame', 'actionBtn', 'logo', 'icon'];\r\n\r\n for (i = 0; i < keys.length; i++) {\r\n key = keys[i];\r\n value = hostConfig[key];\r\n\r\n if (typeof value === 'string' && value) {\r\n hostConfig[key] = joinUrl(baseUrl, value);\r\n }\r\n }\r\n\r\n return hostConfig;\r\n}\r\n\r\nfunction patchThemeAssetPaths(theme, baseUrl) {\r\n var startPage;\r\n var endPage;\r\n var pageKeys;\r\n var i;\r\n\r\n if (!theme) return theme;\r\n\r\n startPage = theme.startPage || {};\r\n endPage = theme.endPage || {};\r\n\r\n pageKeys = [\r\n 'wrapper',\r\n 'overlay',\r\n 'content',\r\n 'title',\r\n 'desc',\r\n 'buttonGroup',\r\n 'button',\r\n 'primaryButton',\r\n 'secondaryButton',\r\n 'score'\r\n ];\r\n\r\n for (i = 0; i < pageKeys.length; i++) {\r\n patchStyleAssetPaths(startPage[pageKeys[i]], baseUrl);\r\n patchStyleAssetPaths(endPage[pageKeys[i]], baseUrl);\r\n }\r\n\r\n patchHostAssetPaths(theme.host, baseUrl);\r\n\r\n return theme;\r\n}\r\n\r\nfunction loadScript(url, callback) {\r\n var script = document.createElement('script');\r\n var done = false;\r\n\r\n script.type = 'text/javascript';\r\n script.async = true;\r\n script.src = url;\r\n\r\n script.onload = function () {\r\n if (done) return;\r\n done = true;\r\n callback && callback(null, script);\r\n };\r\n\r\n script.onerror = function () {\r\n if (done) return;\r\n done = true;\r\n callback && callback(new Error('Failed to load script: ' + url));\r\n };\r\n\r\n document.head.appendChild(script);\r\n}\r\n\r\nfunction loadThemeByUrl(url, callback) {\r\n window.__KADOU_THEME_PACK__ = null;\r\n\r\n loadScript(url, function (err) {\r\n var pack;\r\n var baseUrl;\r\n var theme;\r\n\r\n if (err) {\r\n callback && callback(err);\r\n return;\r\n }\r\n\r\n pack = window.__KADOU_THEME_PACK__;\r\n\r\n if (!pack || !pack.key || !pack.theme) {\r\n callback && callback(new Error('Invalid theme pack: ' + url));\r\n return;\r\n }\r\n\r\n baseUrl = dirname(url);\r\n theme = patchThemeAssetPaths(pack.theme, baseUrl);\r\n\r\n registerTheme(pack.key, theme);\r\n\r\n callback && callback(null, {\r\n key: pack.key,\r\n url: url,\r\n from: 'remote',\r\n theme: theme\r\n });\r\n });\r\n}\r\n\r\nfunction buildThemeUrl(themeRoot, themeKey) {\r\n if (!themeRoot) {\r\n throw new Error('themeRoot is required');\r\n }\r\n\r\n if (!themeKey) {\r\n throw new Error('themeKey is required');\r\n }\r\n\r\n return themeRoot.replace(/\\/?$/, '/') + themeKey + '/theme.js';\r\n}\r\n\r\nfunction ensureTheme(themeKey, themeRoot, callback) {\r\n if (hasTheme(themeKey)) {\r\n callback && callback(null, {\r\n key: themeKey,\r\n from: 'cache',\r\n theme: getTheme(themeKey)\r\n });\r\n return;\r\n }\r\n\r\n var url;\r\n\r\n try {\r\n url = buildThemeUrl(themeRoot, themeKey);\r\n } catch (err) {\r\n callback && callback(err);\r\n return;\r\n }\r\n\r\n loadThemeByUrl(url, callback);\r\n}\r\n\r\nexport {\r\n buildThemeUrl,\r\n loadThemeByUrl,\r\n ensureTheme\r\n};","/**\r\n * GameManager\r\n * -----------------------------------------\r\n * 游戏管理器\r\n *\r\n * 作用:\r\n * 1 管理游戏生命周期\r\n * 2 统一发送 / 接收 postMessage\r\n * 3 提供事件机制给外部使用\r\n * 4 管理 SDK 与 Game 的状态\r\n * 5 host 负责主题加载,game 负责主题渲染\r\n *\r\n * 架构关系:\r\n *\r\n * Host 页面 (Vue 壳)\r\n * │\r\n * │ postMessage\r\n * ▼\r\n * GameManager <----> MessageBus\r\n * │\r\n * ▼\r\n * Game iframe\r\n *\r\n */\r\n\r\nimport EventEmitter from '../core/event-emitter.js';\r\nimport MessageBus from '../core/message-bus.js';\r\nimport MESSAGE_TYPES from '../constants/message-types.js';\r\nimport OverlayManager from '../ui/overlay-manager.js';\r\nimport { ensureTheme, buildThemeUrl, loadThemeByUrl } from '../theme/theme-loader.js';\r\n\r\n/**\r\n * 构造函数\r\n */\r\nfunction GameManager(options) {\r\n options = options || {};\r\n\r\n // 继承事件系统\r\n EventEmitter.call(this);\r\n\r\n this.options = options;\r\n\r\n /**\r\n * UI 挂载根节点\r\n */\r\n this.root = options.root || document.body;\r\n\r\n /**\r\n * 是否开启调试\r\n */\r\n this.debug = !!options.debug;\r\n\r\n /**\r\n * 角色\r\n * host = 宿主页面\r\n * game = 游戏页面\r\n */\r\n this.role = options.role || 'host';\r\n\r\n /**\r\n * SDK 状态\r\n */\r\n this.state = {\r\n sdkReady: false,\r\n gameReady: false,\r\n started: false,\r\n paused: false,\r\n destroyed: false\r\n };\r\n\r\n /**\r\n * 当前主题\r\n * 仅用于 game 内部渲染\r\n */\r\n this.currentThemeKey = '';\r\n this.currentTheme = null;\r\n\r\n /**\r\n * MessageBus\r\n * 负责 postMessage 封装\r\n */\r\n this.bus = new MessageBus({\r\n selfWindow: options.selfWindow || window,\r\n targetWindow: options.targetWindow || null,\r\n targetOrigin: options.targetOrigin || '*',\r\n allowedOrigins: options.allowedOrigins || ['*'],\r\n source: options.source || 'KADOU_GAME_SDK',\r\n debug: this.debug\r\n });\r\n\r\n /**\r\n * UI Overlay 管理器\r\n * 只有 game 角色才负责真正渲染开始页 / 结束页\r\n */\r\n this.overlay = this.role === 'game'\r\n ? new OverlayManager({\r\n container: this.root\r\n })\r\n : null;\r\n\r\n /**\r\n * 绑定 MessageBus 事件\r\n */\r\n this._bindBusEvents();\r\n}\r\n\r\nGameManager.prototype = Object.create(EventEmitter.prototype);\r\nGameManager.prototype.constructor = GameManager;\r\n\r\n/**\r\n * 绑定 MessageBus 所有事件\r\n */\r\nGameManager.prototype._bindBusEvents = function () {\r\n var self = this;\r\n\r\n /**\r\n * 所有消息\r\n */\r\n this.bus.on('*', function (message, context) {\r\n self.emit('message', message, context);\r\n });\r\n\r\n /**\r\n * SDK READY\r\n */\r\n this.bus.on(MESSAGE_TYPES.SDK_READY, function (payload, message, context) {\r\n self.state.sdkReady = true;\r\n self.emit('sdk:ready', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME READY\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_READY, function (payload, message, context) {\r\n self.state.gameReady = true;\r\n self.emit('game:ready', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME LOAD\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_LOAD, function (payload, message, context) {\r\n self.emit('game:load', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME LOADED\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_LOADED, function (payload, message, context) {\r\n self.emit('game:loaded', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME LOADING\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_LOADING, function (payload, message, context) {\r\n self.emit('game:loading', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME START\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_START, function (payload, message, context) {\r\n self.state.started = true;\r\n self.state.paused = false;\r\n\r\n if (self.role === 'game' && self.overlay) {\r\n self.hideStartPage();\r\n }\r\n\r\n self.emit('game:start', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME START\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_RESTART, function (payload, message, context) {\r\n self.state.started = true;\r\n self.state.paused = false;\r\n\r\n if (self.role === 'game' && self.overlay) {\r\n self.hideEndPage();\r\n }\r\n\r\n self.emit('game:restart', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME PAUSE\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_PAUSE, function (payload, message, context) {\r\n self.state.paused = true;\r\n self.emit('game:pause', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME RESUME\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_RESUME, function (payload, message, context) {\r\n self.state.paused = false;\r\n self.emit('game:resume', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME FINISH\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_FINISH, function (payload, message, context) {\r\n self.state.started = false;\r\n self.emit('game:finish', payload, message, context);\r\n });\r\n\r\n /**\r\n * GAME DESTROY\r\n */\r\n this.bus.on(MESSAGE_TYPES.GAME_DESTROY, function (payload, message, context) {\r\n self.state.destroyed = true;\r\n self.emit('game:destroy', payload, message, context);\r\n });\r\n\r\n /**\r\n * 主题更新\r\n * 只缓存,不直接渲染\r\n */\r\n this.bus.on(MESSAGE_TYPES.THEME_UPDATE, function (payload, message, context) {\r\n self.currentThemeKey = payload && payload.themeKey ? payload.themeKey : '';\r\n self.currentTheme = payload && payload.theme ? payload.theme : payload || null;\r\n self.emit('theme:update', payload, message, context);\r\n });\r\n\r\n /**\r\n * 配置更新\r\n */\r\n this.bus.on(MESSAGE_TYPES.CONFIG_UPDATE, function (payload, message, context) {\r\n self.emit('config:update', payload, message, context);\r\n });\r\n\r\n /**\r\n * 学生提交答案\r\n */\r\n this.bus.on(MESSAGE_TYPES.QUESTION_SUBMIT, function (payload, message, context) {\r\n self.emit('question:submit', payload, message, context);\r\n });\r\n\r\n /**\r\n * 游戏结果上报\r\n */\r\n this.bus.on(MESSAGE_TYPES.REPORT_GENERATED, function (payload, message, context) {\r\n self.emit('result:report', payload, message, context);\r\n });\r\n\r\n /**\r\n * 显示开始页\r\n * host 发消息,game 内部真正 render\r\n */\r\n this.bus.on(MESSAGE_TYPES.PAGE_START_SHOW, function (payload, message, context) {\r\n self.emit('page:start:show', payload, message, context);\r\n\r\n if (self.role === 'game') {\r\n self.renderStartPage(payload);\r\n }\r\n });\r\n\r\n /**\r\n * 显示结束页\r\n */\r\n this.bus.on(MESSAGE_TYPES.PAGE_END_SHOW, function (payload, message, context) {\r\n self.emit('page:end:show', payload, message, context);\r\n\r\n if (self.role === 'game') {\r\n self.renderEndPage(payload);\r\n }\r\n });\r\n\r\n /**\r\n * 错误\r\n */\r\n this.bus.on(MESSAGE_TYPES.ERROR, function (payload, message, context) {\r\n self.emit('error', payload, message, context);\r\n });\r\n\r\n /**\r\n * HEARTBEAT_PING 心跳检测\r\n */\r\n this.bus.on(MESSAGE_TYPES.HEARTBEAT_PING, function (payload, message, context) {\r\n self.emit('heartbeat:ping', payload, message, context);\r\n\r\n self.send(MESSAGE_TYPES.HEARTBEAT_PONG, {\r\n replyTo: message.requestId,\r\n time: new Date().getTime()\r\n });\r\n });\r\n\r\n /**\r\n * HEARTBEAT_PONG\r\n */\r\n this.bus.on(MESSAGE_TYPES.HEARTBEAT_PONG, function (payload, message, context) {\r\n self.emit('heartbeat:pong', payload, message, context);\r\n });\r\n\r\n this.bus.on(MESSAGE_TYPES.GAME_RANK, function (payload, message, context) {\r\n self.emit('game:rank', payload, message, context);\r\n });\r\n\r\n /**\r\n * 开始答题\r\n */\r\n this.bus.on(MESSAGE_TYPES.ANSWER_START, function (payload, message, context) {\r\n self.emit('answer:start', payload, message, context);\r\n });\r\n\r\n /**\r\n * 上一题\r\n */\r\n this.bus.on(MESSAGE_TYPES.QUESTION_PREV, function (payload, message, context) {\r\n self.emit('question:prev', payload, message, context);\r\n });\r\n\r\n /**\r\n * 下一题\r\n */\r\n this.bus.on(MESSAGE_TYPES.QUESTION_NEXT, function (payload, message, context) {\r\n self.emit('question:next', payload, message, context);\r\n });\r\n\r\n /**\r\n * 调节声音\r\n */\r\n this.bus.on(MESSAGE_TYPES.AUDIO_VOLUME_CHANGE, function (payload, message, context) {\r\n self.emit('volume:change', payload, message, context);\r\n });\r\n\r\n /**\r\n * 答题完成\r\n */\r\n this.bus.on(MESSAGE_TYPES.ANSWER_COMPLETED, function (payload, message, context) {\r\n self.emit('answer:completed', payload, message, context);\r\n });\r\n\r\n \r\n\r\n /**\r\n * 扩展消息类型\r\n */\r\n this.bus.on(MESSAGE_TYPES.EXTENSION_EVENT, function (payload, message, context) {\r\n self.emit('extension:event', payload, message, context);\r\n });\r\n\r\n};\r\n\r\n/**\r\n * 初始化 SDK\r\n */\r\nGameManager.prototype.init = function () {\r\n this.bus.start();\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[GameManager] init, role =', this.role);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 销毁 SDK\r\n */\r\nGameManager.prototype.destroy = function () {\r\n this.state.destroyed = true;\r\n\r\n this.bus.destroy();\r\n\r\n if (this.overlay) {\r\n if (this.overlay.hideStartPage) {\r\n this.overlay.hideStartPage();\r\n }\r\n if (this.overlay.hideEndPage) {\r\n this.overlay.hideEndPage();\r\n }\r\n }\r\n\r\n this.off();\r\n\r\n if (this.debug && typeof console !== 'undefined' && console.log) {\r\n console.log('[GameManager] destroyed');\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 设置目标窗口\r\n * 一般为 iframe.contentWindow\r\n */\r\nGameManager.prototype.setTargetWindow = function (win) {\r\n this.bus.setTargetWindow(win);\r\n return this;\r\n};\r\n\r\n/**\r\n * 设置目标 origin\r\n */\r\nGameManager.prototype.setTargetOrigin = function (origin) {\r\n this.bus.setTargetOrigin(origin);\r\n return this;\r\n};\r\n\r\n/**\r\n * 设置 root\r\n */\r\nGameManager.prototype.setRoot = function (el) {\r\n if (!el) return this;\r\n\r\n this.root = el;\r\n\r\n if (this.overlay) {\r\n this.overlay.container = el;\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 发送消息\r\n */\r\nGameManager.prototype.send = function (type, payload, meta) {\r\n return this.bus.send(type, payload, meta);\r\n};\r\n\r\n/**\r\n * SDK ready\r\n */\r\nGameManager.prototype.notifySdkReady = function (extra) {\r\n this.state.sdkReady = true;\r\n return this.send(MESSAGE_TYPES.SDK_READY, extra || {});\r\n};\r\n\r\n/**\r\n * 心跳 ping\r\n */\r\nGameManager.prototype.heartbeatPing = function (extra) {\r\n var payload = extra || {};\r\n payload.time = new Date().getTime();\r\n return this.send(MESSAGE_TYPES.HEARTBEAT_PING, payload);\r\n};\r\n\r\n/**\r\n * 游戏 ready\r\n */\r\nGameManager.prototype.gameReady = function (extra) {\r\n this.state.gameReady = true;\r\n return this.send(MESSAGE_TYPES.GAME_READY, extra || {});\r\n};\r\n\r\n/**\r\n * 加载游戏\r\n */\r\nGameManager.prototype.loadGame = function (config) {\r\n return this.send(MESSAGE_TYPES.GAME_LOAD, config || {});\r\n};\r\n\r\n/**\r\n * 游戏加载进度\r\n */\r\nGameManager.prototype.gameLoading = function (config) {\r\n return this.send(MESSAGE_TYPES.GAME_LOADING, config || {});\r\n};\r\n\r\n/**\r\n * 开始游戏\r\n * 保留一个最终版本,避免重复定义覆盖\r\n */\r\nGameManager.prototype.startGame = function (data) {\r\n var payload = data || {};\r\n\r\n this.state.started = true;\r\n this.state.paused = false;\r\n\r\n this.emit('game:start', payload, null, {\r\n local: true\r\n });\r\n\r\n return this.bus.send(MESSAGE_TYPES.GAME_START, payload);\r\n};\r\n\r\n\r\n/**\r\n * 游戏重新开始\r\n */\r\nGameManager.prototype.restartGame = function (data) {\r\n var payload = data || {};\r\n\r\n this.state.started = true;\r\n this.state.paused = false;\r\n\r\n this.emit('game:restart', payload, null, {\r\n local: true\r\n });\r\n\r\n return this.bus.send(MESSAGE_TYPES.GAME_RESTART, payload);\r\n};\r\n\r\n/**\r\n * 查看游戏排行榜\r\n */\r\nGameManager.prototype.showGameRank = function (data) {\r\n var payload = data || {};\r\n\r\n return this.bus.send(MESSAGE_TYPES.GAME_RANK, payload);\r\n};\r\n/**\r\n * 暂停游戏\r\n */\r\nGameManager.prototype.pauseGame = function (data) {\r\n this.state.paused = true;\r\n return this.send(MESSAGE_TYPES.GAME_PAUSE, data || {});\r\n};\r\n\r\n/**\r\n * 恢复游戏\r\n */\r\nGameManager.prototype.resumeGame = function (data) {\r\n this.state.paused = false;\r\n return this.send(MESSAGE_TYPES.GAME_RESUME, data || {});\r\n};\r\n\r\n/**\r\n * 游戏结束\r\n */\r\nGameManager.prototype.finishGame = function (result) {\r\n this.state.started = false;\r\n return this.send(MESSAGE_TYPES.GAME_FINISH, result || {});\r\n};\r\n\r\n/**\r\n * 销毁游戏\r\n */\r\nGameManager.prototype.destroyGame = function (data) {\r\n this.state.destroyed = true;\r\n return this.send(MESSAGE_TYPES.GAME_DESTROY, data || {});\r\n};\r\n\r\n/**\r\n * 更新主题\r\n * 保持兼容旧接口\r\n */\r\nGameManager.prototype.updateTheme = function (theme) {\r\n if (this.role === 'game') {\r\n this.currentTheme = theme || null;\r\n }\r\n return this.send(MESSAGE_TYPES.THEME_UPDATE, theme || {});\r\n};\r\n\r\n/**\r\n * 应用主题\r\n * 推荐 host 使用这个方法发给 game\r\n */\r\nGameManager.prototype.applyTheme = function (themeKey, themeConfig, extra) {\r\n var payload = extra || {};\r\n\r\n payload.themeKey = themeKey || '';\r\n payload.theme = themeConfig || {};\r\n\r\n if (this.role === 'game') {\r\n this.currentThemeKey = payload.themeKey;\r\n this.currentTheme = payload.theme;\r\n }\r\n\r\n return this.send(MESSAGE_TYPES.THEME_UPDATE, payload);\r\n};\r\n\r\n/**\r\n * 更新配置\r\n */\r\nGameManager.prototype.updateConfig = function (config) {\r\n return this.send(MESSAGE_TYPES.CONFIG_UPDATE, config || {});\r\n};\r\n\r\n/**\r\n * 显示开始页\r\n * host 调这个;真正渲染在 game 内部执行\r\n */\r\nGameManager.prototype.showStartPage = function (data) {\r\n return this.send(MESSAGE_TYPES.PAGE_START_SHOW, data || {});\r\n};\r\n\r\n/**\r\n * 显示结束页\r\n */\r\nGameManager.prototype.showEndPage = function (data) {\r\n return this.send(MESSAGE_TYPES.PAGE_END_SHOW, data || {});\r\n};\r\n\r\n/**\r\n * 提交题目\r\n */\r\nGameManager.prototype.submitQuestion = function (data) {\r\n return this.send(MESSAGE_TYPES.QUESTION_SUBMIT, data || {});\r\n};\r\n\r\n/**\r\n * 上报错误\r\n */\r\nGameManager.prototype.reportError = function (error) {\r\n var payload;\r\n\r\n if (error instanceof Error) {\r\n payload = {\r\n message: error.message,\r\n stack: error.stack\r\n };\r\n } else {\r\n payload = error || {};\r\n }\r\n\r\n return this.send(MESSAGE_TYPES.ERROR, payload);\r\n};\r\n\r\n/**\r\n * 获取当前状态\r\n */\r\nGameManager.prototype.getState = function () {\r\n return {\r\n sdkReady: this.state.sdkReady,\r\n gameReady: this.state.gameReady,\r\n started: this.state.started,\r\n paused: this.state.paused,\r\n destroyed: this.state.destroyed\r\n };\r\n};\r\n\r\n/**\r\n * 是否 ready\r\n */\r\nGameManager.prototype.isReady = function () {\r\n return !!(this.state.sdkReady && this.state.gameReady);\r\n};\r\n\r\n/**\r\n * 合并页面主题配置\r\n * pageKey: startPage / endPage\r\n */\r\nGameManager.prototype._mergePageTheme = function (pageKey, pageData) {\r\n var theme = this.currentTheme || {};\r\n var pageTheme = theme[pageKey] || {};\r\n var result = {};\r\n var key;\r\n\r\n for (key in pageTheme) {\r\n if (Object.prototype.hasOwnProperty.call(pageTheme, key)) {\r\n result[key] = pageTheme[key];\r\n }\r\n }\r\n\r\n for (key in pageData) {\r\n if (Object.prototype.hasOwnProperty.call(pageData, key)) {\r\n result[key] = pageData[key];\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * game 内部渲染开始页\r\n */\r\nGameManager.prototype.renderStartPage = function (data, callbacks) {\r\n var self = this;\r\n var payload = data || {};\r\n var finalData = this._mergePageTheme('startPage', payload);\r\n\r\n if (!this.overlay || !this.overlay.showStartPage) {\r\n return this;\r\n }\r\n\r\n this.overlay.showStartPage(finalData, callbacks || {\r\n onStart: function () {\r\n self.startGame({\r\n from: 'sdk-start-game'\r\n });\r\n }\r\n });\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * 隐藏开始页\r\n */\r\nGameManager.prototype.hideStartPage = function () {\r\n if (this.overlay && this.overlay.hideStartPage) {\r\n this.overlay.hideStartPage();\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * game 内部渲染结束页\r\n */\r\nGameManager.prototype.renderEndPage = function (data, callbacks) {\r\n let self = this;\r\n var payload = data || {};\r\n var finalData = this._mergePageTheme('endPage', payload);\r\n\r\n if (!this.overlay || !this.overlay.showEndPage) {\r\n return this;\r\n }\r\n\r\n\r\n this.overlay.showEndPage(finalData, callbacks || {\r\n onRestart: function () {\r\n self.restartGame({\r\n from: 'sdk-restart-game'\r\n });\r\n },\r\n onShowRank: function () {\r\n self.showGameRank({\r\n from: 'sdk-game-rank'\r\n });\r\n },\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * 隐藏结束页\r\n */\r\nGameManager.prototype.hideEndPage = function () {\r\n if (this.overlay && this.overlay.hideEndPage) {\r\n this.overlay.hideEndPage();\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * 直接按 url 加载主题\r\n * 更适合 host 使用\r\n */\r\nGameManager.prototype.loadThemeByUrl = function (url, callback) {\r\n loadThemeByUrl(url, callback);\r\n return this;\r\n};\r\n\r\n/**\r\n * 确保主题已加载\r\n * 更适合 host 使用\r\n */\r\nGameManager.prototype.ensureTheme = function (themeKey, themeRoot, callback) {\r\n ensureTheme(themeKey, themeRoot, callback);\r\n return this;\r\n};\r\n\r\n/**\r\n * 生成主题地址\r\n */\r\nGameManager.prototype.buildThemeUrl = function (themeRoot, themeKey) {\r\n return buildThemeUrl(themeRoot, themeKey);\r\n};\r\n\r\n/**\r\n * 游戏完成\r\n */\r\nGameManager.prototype.gameLoaded = function (config) {\r\n return this.send(MESSAGE_TYPES.GAME_LOADED, config || {});\r\n};\r\n/**\r\n * 开始答题\r\n */\r\nGameManager.prototype.startAnswer = function (data) {\r\n return this.send(MESSAGE_TYPES.ANSWER_START, data || {});\r\n};\r\n\r\n/**\r\n * 上一题\r\n */\r\nGameManager.prototype.prevQuestion = function (data) {\r\n return this.send(MESSAGE_TYPES.QUESTION_PREV, data || {});\r\n};\r\n\r\n/**\r\n * 下一题\r\n */\r\nGameManager.prototype.nextQuestion = function (data) {\r\n return this.send(MESSAGE_TYPES.QUESTION_NEXT, data || {});\r\n};\r\n\r\n/**\r\n * 调节声音\r\n * 例如 { volume: 0.8, muted: false }\r\n */\r\nGameManager.prototype.changeVolume = function (data) {\r\n return this.send(MESSAGE_TYPES.AUDIO_VOLUME_CHANGE, data || {});\r\n};\r\n\r\n/**\r\n * 答题完成\r\n */\r\nGameManager.prototype.completedAnswer = function (data) {\r\n return this.send(MESSAGE_TYPES.ANSWER_COMPLETED, data || {});\r\n};\r\n\r\n/**\r\n * 扩展消息类型\r\n */\r\nGameManager.prototype.extensionEvent = function (extra) {\r\n return this.send(MESSAGE_TYPES.EXTENSION_EVENT, extra || {});\r\n};\r\nexport default GameManager;","import SDK_VERSION from './version.js';\r\nimport MESSAGE_TYPES from './constants/message-types.js';\r\nimport EventEmitter from './core/event-emitter.js';\r\nimport MessageBus from './core/message-bus.js';\r\nimport GameRuntime from './manager/game-manager.js';\r\n\r\nexport {\r\n SDK_VERSION,\r\n MESSAGE_TYPES,\r\n EventEmitter,\r\n MessageBus,\r\n GameRuntime\r\n};\r\n\r\nexport default {\r\n SDK_VERSION: SDK_VERSION,\r\n MESSAGE_TYPES: MESSAGE_TYPES,\r\n EventEmitter: EventEmitter,\r\n MessageBus: MessageBus,\r\n GameRuntime: GameRuntime\r\n};"],"names":["SDK_VERSION","MESSAGE_TYPES","SDK_READY","HEARTBEAT_PING","HEARTBEAT_PONG","ERROR_THROWN","GAME_LOAD","GAME_START","GAME_PAUSE","GAME_RESUME","GAME_RESTART","GAME_DESTROY","GAME_READY","GAME_LOADED","GAME_LOADING","GAME_FINISH","GAME_RANK","THEME_UPDATE","CONFIG_UPDATE","QUESTION_SUBMIT","QUESTION_PREV","QUESTION_NEXT","ANSWER_START","ANSWER_COMPLETED","AUDIO_VOLUME_CHANGE","PAGE_START_SHOW","PAGE_END_SHOW","EXTENSION_EVENT","ERROR","isFunction","fn","isObject","val","Object","prototype","toString","call","EventEmitter","this","events","on","eventName","handler","push","once","self","wrapper","off","apply","arguments","__original__","handlers","result","i","length","emit","args","Array","slice","error","console","PostMessageChannel","options","selfWindow","window","targetWindow","targetOrigin","source","debug","MessageBus","channel","allowedOrigins","_boundOnMessage","_onMessage","bind","_listening","BasePage","el","isPlainObject","obj","mergeStyles","base","extra","key","hasOwnProperty","normalizeStyleValue","value","indexOf","String","createElement","tag","className","styles","text","document","style","applyStyles","textContent","StartPage","EndPage","OverlayManager","container","body","startPage","endPage","setTargetWindow","setTargetOrigin","createMessage","type","payload","meta","version","requestId","prefix","Date","getTime","Math","random","timestamp","send","message","postMessage","log","warn","isValidMessage","data","create","constructor","start","addEventListener","stop","removeEventListener","destroy","_matchOrigin","origin","event","context","rawEvent","sourceWindow","bindEvent","unbindEvents","item","parentNode","removeChild","isRendered","getStyles","wrapperCss","position","top","left","right","bottom","display","flexDirection","alignItems","justifyContent","boxSizing","padding","color","backgroundRepeat","backgroundPosition","backgroundSize","textAlign","zIndex","overlayCss","background","overlay","contentCss","width","content","titleCss","fontSize","fontWeight","textShadow","letterSpacing","lineHeight","maxWidth","wordBreak","title","descCss","marginTop","whiteSpace","desc","btnGroupCss","buttonGroup","btnCss","minWidth","minHeight","cursor","backgroundColor","borderRadius","border","transition","button","render","onStart","Error","titleText","descText","buttonText","rootDom","overlayDom","contentDom","titleDom","appendChild","descDom","btnGroupDom","btnDom","timeCss","time","scoreCss","score","gap","flexWrap","primaryBtnCss","primaryButton","secondaryBtnCss","secondaryButton","callbacks","timeText","scoreText","primaryButtonText","secondaryButtonText","scoreDom","timeDom","secondaryBtnDom","onShowRank","primaryBtnDom","onRestart","childNodes","setContainer","showStartPage","finalCallbacks","hideStartPage","showEndPage","hideEndPage","hideAll","themes","getTheme","default","joinUrl","path","test","url","replace","patchStyleAssetPaths","styleObj","baseUrl","_","quote","assetPath","patchThemeAssetPaths","theme","pageKeys","hostConfig","keys","patchHostAssetPaths","host","loadThemeByUrl","callback","__KADOU_THEME_PACK__","script","done","async","src","onload","onerror","head","loadScript","err","pack","dirname","config","registerTheme","from","buildThemeUrl","themeRoot","themeKey","ensureTheme","GameManager","root","role","state","sdkReady","gameReady","started","paused","destroyed","currentThemeKey","currentTheme","bus","_bindBusEvents","REPORT_GENERATED","renderStartPage","renderEndPage","replyTo","init","win","setRoot","notifySdkReady","heartbeatPing","loadGame","gameLoading","startGame","local","restartGame","showGameRank","pauseGame","resumeGame","finishGame","destroyGame","updateTheme","applyTheme","themeConfig","updateConfig","submitQuestion","reportError","stack","getState","isReady","_mergePageTheme","pageKey","pageData","pageTheme","finalData","gameLoaded","startAnswer","prevQuestion","nextQuestion","changeVolume","completedAnswer","extensionEvent","index","GameRuntime"],"mappings":"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"}
|