@galacean/effects-plugin-orientation-transformer 2.0.0-alpha.4 → 2.0.0-alpha.6

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_inherits.js","../src/orientation-component.ts","../src/transform-vfx-item.ts","../src/composition-transformer-acceler.ts","../src/utils/object-type.ts","../src/utils/angle-limit.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_extends.js","../src/utils/deep-merge.ts","../src/utils/device.ts","../src/utils/filtering.ts","../src/device-orientation.ts","../src/orientation-adapter-acceler.ts","../src/orientation-plugin-loader.ts","../src/index.ts"],"sourcesContent":["export function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _set_prototype_of } from \"./_set_prototype_of.js\";\n\nexport function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","import type { spec } from '@galacean/effects';\nimport { ItemBehaviour } from '@galacean/effects';\nimport type { CompositionTransformerAcceler } from './composition-transformer-acceler';\n\nexport class OrientationComponent extends ItemBehaviour {\n private targets: spec.PluginGyroscopeTarget[];\n\n override fromData (data: any) {\n super.fromData(data);\n\n const { targets } = data.content.options;\n\n if (targets) {\n this.targets = targets.map((t: any) => ({\n name: t.name,\n xMin: +t.xMin || 0,\n yMin: +t.yMin || 0,\n xMax: +t.xMax || 0,\n yMax: +t.yMax || 0,\n vMin: +t.vMin || 0,\n hMin: +t.hMin || 0,\n vMax: +t.vMax || 0,\n hMax: +t.hMax || 0,\n }));\n }\n\n }\n\n override start () {\n const transformer = this.item.composition?.loaderData.deviceTransformer as CompositionTransformerAcceler;\n\n if (transformer) {\n this.targets?.forEach(target => transformer.addTarget(target));\n transformer.initComposition();\n }\n }\n\n override update (dt: number) {\n const transformer = this.item.composition?.loaderData.deviceTransformer as CompositionTransformerAcceler;\n\n if (transformer) {\n transformer.updateOrientation();\n }\n }\n\n override onDestroy () {\n this.targets?.forEach(target => this.item.composition?.loaderData.deviceTransformer?.removeTarget(target.name));\n }\n}\n","import type { Engine, VFXItemProps } from '@galacean/effects';\nimport { VFXItem } from '@galacean/effects';\nimport { OrientationComponent } from './orientation-component';\n\n/**\n * 水平旋转变化起始角(手机处于改角度时无变化)\n */\nexport const VERTICAL_INIT_DEGREE = 45;\n\nexport class TransformVFXItem extends VFXItem<OrientationComponent> {\n constructor (engine: Engine, props: VFXItemProps) {\n super(engine, props);\n\n const component = this.addComponent(OrientationComponent);\n\n component.fromData(props);\n }\n}\n","import type { Composition, spec } from '@galacean/effects';\nimport { VERTICAL_INIT_DEGREE } from './transform-vfx-item';\n\ntype EventType = {\n x: number,\n y: number,\n};\n\nexport class CompositionTransformerAcceler {\n private readonly targets: Record<string, spec.PluginGyroscopeTarget> = {};\n private readonly records: Record<string, { item: any, position: number[], current?: number[], rotation: number[] }> = {};\n private readonly currentPos: Record<string, number[]> = {};\n private readonly currentRot: Record<string, number[]> = {};\n private gammaRange: [x: number, y: number] = [-89, 89];\n private betaRange: [x: number, y: number] = [-89, 89];\n private currentEvent?: EventType;\n\n constructor (\n private readonly composition: Composition,\n ) {\n }\n\n update ({ x, y }: EventType) {\n this.currentEvent = { x, y };\n }\n\n updateOrientation () {\n const event = this.currentEvent;\n\n if (event) {\n Object.getOwnPropertyNames(this.targets).forEach(name => {\n this.moveLayer(name, event);\n });\n }\n }\n\n initComposition () {\n const items = this.composition.items;\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const target = this.targets[item.name];\n\n if (target) {\n const position = item.transform.position.toArray();\n const rotation = item.transform.rotation.toArray();\n\n const currentPosition = this.currentPos[item.name];\n const currentRot = this.currentRot[item.name];\n\n this.records[item.name] = {\n item,\n position,\n rotation,\n };\n if (currentPosition) {\n item.transform.setPosition(currentPosition[0], currentPosition[1], currentPosition[2]);\n }\n if (currentRot) {\n item.transform.setRotation(currentRot[0], currentRot[1], currentRot[2]);\n }\n\n }\n }\n }\n\n addTarget (target: spec.PluginGyroscopeTarget) {\n this.targets[target.name] = target;\n }\n\n removeTarget (name: string) {\n delete this.targets[name];\n delete this.records[name];\n }\n\n private moveLayer (name: string, { x, y }: EventType) {\n const layer = this.records[name]?.item;\n\n if (layer) {\n const initPosition = this.records[name].position;\n const initRotation = this.records[name].rotation;\n const target = this.targets[name];\n const beta = clamp(x, this.betaRange), gamma = clamp(y, this.gammaRange);\n\n if (target) {\n const position = [\n initPosition[0] + 1.2 * mapRange((beta - this.gammaRange[0]) / (this.gammaRange[1] - this.gammaRange[0]), target.xMin, target.xMax),\n initPosition[1] + 1.2 * mapRange((gamma - this.betaRange[0]) / (this.betaRange[1] - this.betaRange[0]), target.yMin, target.yMax),\n initPosition[2],\n ];\n\n const br = (clamp(x * 2, this.betaRange) - this.betaRange[0]) / (this.betaRange[1] - this.betaRange[0]);\n const gr = (clamp(y * 2 - VERTICAL_INIT_DEGREE, this.gammaRange) - this.gammaRange[0]) / (this.gammaRange[1] - this.gammaRange[0]);\n const rotation = [\n initRotation[0] + mapRange(gr, target.hMin, target.hMax),\n initRotation[1] + mapRange(br, target.vMin, target.vMax),\n initRotation[2],\n ];\n\n layer.transform.setPosition(...position);\n layer.transform.setRotation(...rotation);\n this.currentPos[name] = position.slice();\n this.currentRot[name] = rotation.slice();\n }\n }\n }\n}\n\nfunction clamp (x: number, range: [x: number, y: number]) {\n if (x < range[0]) {\n return range[0];\n } else if (x > range[1]) {\n return range[1];\n }\n\n return x;\n}\n\nfunction mapRange (t: number, min: number, max: number): number {\n return min + (max - min) * t;\n}\n","export function getObjectType (obj: any) {\n return Object.prototype.toString.call(obj);\n}\n","import { getObjectType } from './object-type';\n\nexport type AngleType = {\n alpha: number,\n beta: number,\n gamma: number,\n};\n\ntype RangeType = {\n alpha: number[],\n beta: number[],\n gamma: number[],\n};\n\n/**\n * 角度限制\n * @internal\n * @param angleObj 角度数值对象\n * @param validRange 角度限制值\n */\nexport function angleLimit (angleObj: AngleType, validRange: RangeType) {\n let flagAlpha = true;\n let flagBeta = true;\n let flagGamma = true;\n\n if (getObjectType(validRange.alpha) === '[object Array]' && validRange.alpha.length >= 2) {\n let referAlphaA = angleObj.alpha + validRange.alpha[0];\n let referAlphaB = angleObj.alpha + validRange.alpha[1];\n\n referAlphaA = referAlphaA < 0 ? referAlphaA + 360 : referAlphaA;\n referAlphaB = referAlphaB > 360 ? referAlphaB - 360 : referAlphaB;\n if (referAlphaA < referAlphaB) {\n flagAlpha = angleObj.alpha > referAlphaA && angleObj.alpha < referAlphaB;\n } else {\n flagAlpha = angleObj.alpha > referAlphaA || angleObj.alpha < referAlphaB;\n }\n }\n if (getObjectType(validRange.beta) === '[object Array]' && validRange.beta.length >= 2) {\n flagBeta = angleObj.beta >= validRange.beta[0] && angleObj.beta <= validRange.beta[1];\n }\n if (getObjectType(validRange.gamma) === '[object Array]' && validRange.gamma.length >= 2) {\n flagGamma = angleObj.gamma >= validRange.gamma[0] && angleObj.gamma <= validRange.gamma[1];\n }\n\n return flagAlpha && flagBeta && flagGamma;\n}\n","export function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","/* eslint-disable no-prototype-builtins */\nimport { isArray, isObject } from '@galacean/effects';\n\nexport function deepMerge (target: any, args?: any) {\n if (!isObject(target) && !isArray(target)) {\n return target;\n }\n const result = isArray(target) ? [...target] : { ...target };\n const length = arguments.length;\n\n for (let index = 1; index < length; index++) {\n const source = arguments[index] || {};\n\n if (isObject(source)) {\n let prop;\n\n for (prop in source) {\n if (source.hasOwnProperty(prop)) {\n if (isObject(result[prop]) && isObject(source[prop])) {\n result[prop] = deepMerge(result[prop], source[prop]);\n } else if (isObject(source[prop])) {\n result[prop] = deepMerge(source[prop]);\n } else if (isArray(source[prop])) {\n result[prop] = deepMerge(source[prop]);\n } else {\n result[prop] = source[prop];\n }\n }\n }\n for (prop in result) {\n if (\n isObject(result[prop]) &&\n result.hasOwnProperty(prop) &&\n !source.hasOwnProperty(prop)\n ) {\n result[prop] = deepMerge(result[prop]);\n }\n }\n }\n }\n if (length === 1) {\n for (const prop in result) {\n if (isObject(result[prop]) && result.hasOwnProperty(prop)) {\n result[prop] = deepMerge(result[prop]);\n }\n }\n }\n\n return result;\n}\n","export function isIOS () {\n const str = navigator.userAgent.toLowerCase();\n const ver = str.match(/cpu (iphone )?os (.*?) like mac os/);\n\n return ver ? parseInt(ver[2], 10) : 0;\n}\n","/**\n * 稳定区间\n */\nconst STABLE_RANGE = 3;\n/**\n * 每次增幅的最大值\n */\nconst MAX_CHANGE = 5;\n/**\n * 每次增幅的最小值\n */\nconst MIN_CHANGE = 1;\n/**\n * 数据缓存队列的长度\n */\nconst VALUE_POOL_LENGTH = 5;\n\n/**\n *\n */\ntype FilteringOptions = {\n /**\n * 稳定区间\n */\n stableRange?: number,\n /**\n * 最大变幅\n */\n maxChange?: number,\n};\n\n/**\n * 滤波方法\n */\nexport class Filtering {\n private lastValue = 0;\n private valuePool: number[] = [];\n\n constructor (\n private readonly options: FilteringOptions = {} as FilteringOptions,\n ) { }\n\n /**\n * 0deg 左右保持一定的稳定区间 STABLE_RANGE\n * - 小于 STABLE_RANGE 的算 0\n * - 大于 STABLE_RANGE 的减去 STABLE_RANGE\n * @param value - 输入值\n * @returns\n */\n stableFix (value: number) {\n const stableRange = this.options.stableRange || STABLE_RANGE;\n\n if (Math.abs(value) < stableRange) {\n return 0;\n }\n\n return value > stableRange ? value - stableRange : value + stableRange;\n }\n\n /**\n * 变幅限制\n * - 最大变化 MAX_CHANGE\n * - 最小变化 MIN_CHANGE\n * @param value\n * @returns\n */\n changeLimit (value: number) {\n const lastValue = this.lastValue;\n let result = value;\n\n if (Math.abs(value - lastValue) > MAX_CHANGE) {\n result = lastValue < value ? lastValue + MAX_CHANGE : lastValue - MAX_CHANGE;\n }\n if (Math.abs(value - lastValue) < MIN_CHANGE) {\n result = lastValue;\n }\n this.lastValue = result;\n\n return result;\n }\n\n linearRegressionMedian (value: number) {\n // 在队列中装载数据,达到队列阀值长度时开始计算\n this.valuePool.push(value);\n let result;\n\n if (this.valuePool.length >= VALUE_POOL_LENGTH) {\n result = getLinearRegressionFixedVal(this.valuePool);\n this.valuePool.shift();\n } else {\n result = this.lastValue;\n }\n\n return result;\n }\n}\n\n// 计算出线性回归参数\nfunction linearRegression (x: number[], y: number[]) {\n const result: Record<string, number> = {};\n const n = y.length;\n let sumX = 0;\n let sumY = 0;\n let sumXY = 0;\n let sumXX = 0;\n let sumYY = 0;\n\n for (let i = 0; i < y.length; i++) {\n sumX += x[i];\n sumY += y[i];\n sumXY += (x[i] * y[i]);\n sumXX += (x[i] * x[i]);\n sumYY += (y[i] * y[i]);\n }\n\n const avgX = sumX / n;\n const avgY = sumY / n;\n\n result['a'] = (sumXY - n * avgX * avgY) / (sumXX - n * avgX * avgX);\n result['b'] = avgY - result.a * avgX;\n result['miss'] = Math.pow((n * sumXY - sumX * sumY) / Math.sqrt((n * sumXX - sumX * sumX) * (n * sumYY - sumY * sumY)), 2);\n\n return result;\n}\n\n// 生成线性回归函数 F(x) = ax + b\nfunction createLinearRegressionFx (values: number[]) {\n const x: number[] = [];\n const y: number[] = [];\n\n values.forEach((item, index) => {\n x.push(index); // 数据是连续的,所以直接取数组下标为 x\n y.push(item);\n });\n const key = linearRegression(x, y);\n\n return (x: number) => {\n return key.a * x + key.b;\n };\n}\n\n// 获取线性回归后的中位数\nfunction getLinearRegressionFixedVal (valuePool: number[]) {\n const fx = createLinearRegressionFx(valuePool);\n\n // 这个迭代修正很重要\n valuePool = valuePool.map((item, index) => {\n return fx(index);\n });\n\n return fx(valuePool.length / 2);\n}\n","import { assertExist } from '@galacean/effects';\nimport { angleLimit, type AngleType } from './utils/angle-limit';\nimport { deepMerge } from './utils/deep-merge';\nimport { isIOS } from './utils/device';\nimport { Filtering } from './utils/filtering';\n\ndeclare global {\n interface Window {\n AlipayJSBridge: any,\n WindVane: any,\n }\n}\n\ntype JSBridgeParam = {\n x: number,\n y: number,\n z: number,\n};\n\ntype WindVaneParams = {\n x: number,\n y: number,\n z: number,\n};\n\nconst useJSBridge = isIOS() && typeof window.AlipayJSBridge !== 'undefined';\nconst useWindVane = typeof window.WindVane !== 'undefined';\n\nexport type DeviceOrientationOptions = {\n X?: boolean,\n Y?: boolean,\n /**\n * 监听时间片段(一秒30帧)\n */\n interval?: number,\n /**\n * 使用 requestAnimationFrame 对齐\n */\n useRequestAnimationFrame?: boolean,\n /**\n * bate 角度使用相对初始化的\n */\n relativeBeta?: boolean,\n /**\n * gamma 角度使用相对初始化的\n */\n relativeGamma?: boolean,\n /**\n * 限制 3d 角度范围\n */\n validRange: {\n /**\n * 相对范围\n */\n alpha: number[],\n /**\n * 上下翻转\n */\n beta: number[],\n /**\n * 左右翻转\n */\n gamma: number[],\n },\n /**\n * 稳定区间\n */\n stableRange: number,\n};\n\n// 默认参数\nconst defaultOptions = {\n X: true,\n Y: true,\n interval: Math.floor(1000 / 30),\n useRequestAnimationFrame: true,\n relativeBeta: false,\n relativeGamma: false,\n validRange: {\n alpha: [-60, 60],\n beta: [-60, 180],\n gamma: [-89, 89],\n },\n stableRange: 3,\n};\n\nexport class DeviceOrientation {\n private options: Required<DeviceOrientationOptions>;\n private lastX = 0;\n private lastY = 0;\n private prevAcceler = {\n x: 0,\n y: 0,\n z: 0,\n };\n private stoped = false;\n private readonly filterX: Filtering;\n private readonly filterY: Filtering;\n private watchListener?: (e: DeviceOrientationEvent | Event) => void;\n\n constructor (options = {}) {\n this.options = deepMerge(defaultOptions, options);\n\n const { stableRange } = this.options;\n\n this.filterX = new Filtering({ stableRange });\n this.filterY = new Filtering({ stableRange });\n }\n\n watch (callback: (x: number, y: number, data: AngleType) => void) {\n if (typeof callback !== 'function') {\n return;\n }\n // 目前只能绑定一个方法,此处可以扩展成一个方法队列\n if (this.watchListener) {\n return;\n }\n\n let timefragment = 0; // 时间片计时\n let nowts = 0; // 当前时间\n let referGamma = 0; // 初始化角度,作为单独一个用户的空间旋转的参照\n let referBeta = 0;\n let referAlpha = 0;\n let alpha: number;\n let beta: number;\n let gamma: number;\n let gammaFixed;\n let betaFixed;\n let isInValidDegRange;\n let x: number; // 最终输出的 x\n let y: number; // 最终输出的 y\n const handleWatch = (e: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>) => {\n if (this.stoped) {\n return;\n }\n alpha = e.alpha!; // 垂直于屏幕的轴 0 ~ 360\n beta = e.beta!; // 横向 X 轴 -180 ~ 180\n gamma = e.gamma!; // 纵向 Y 轴 -90 ~ 90\n // 对 alpha beta gamma 初始化位置\n if (!referAlpha) {\n referAlpha = alpha || 0;\n }\n if (!referBeta) {\n referBeta = beta || 0;\n }\n if (!referGamma) {\n referGamma = gamma || 0;\n }\n //\n isInValidDegRange = angleLimit.call(this, {\n alpha,\n beta,\n gamma,\n }, this.options.validRange);\n if (isInValidDegRange) {\n // 最终结果值\n if (this.options.X) {\n gammaFixed = gamma - referGamma;\n x = this.options.relativeGamma ? gammaFixed : gamma;\n x = this.filterX.stableFix(x);\n x = this.filterX.changeLimit(x);\n x = this.filterX.linearRegressionMedian(+x);\n } else {\n x = 0;\n }\n if (this.options.Y) {\n // beta 相对 referBeta 的角度\n betaFixed = beta - referBeta;\n y = this.options.relativeBeta ? betaFixed : beta;\n y = this.filterY.stableFix(y);\n y = this.filterY.changeLimit(y);\n y = this.filterY.linearRegressionMedian(+y);\n } else {\n y = 0;\n }\n if (this.isValid(x, y)) {\n if (this.options.useRequestAnimationFrame) {\n window.requestAnimationFrame(() => {\n callback(x, y, { alpha, beta, gamma });\n });\n } else {\n callback(x, y, { alpha, beta, gamma });\n }\n this.lastX = x;\n this.lastY = y;\n }\n }\n };\n\n // 针对不同平台绑定不同事件\n this.stoped = false;\n if (useWindVane) {\n switchWindVane(true, this.options.interval);\n this.watchListener = (e: Event) => {\n if ('param' in e) {\n const { x, y, z } = e.param as WindVaneParams;\n\n // 即使手机没动,也会不停触发,所以这里加个判断,值相等则不调用回调\n if (x === this.prevAcceler.x && y === this.prevAcceler.y && z === this.prevAcceler.z) {\n return;\n }\n this.prevAcceler = { x, y, z };\n const evt = {\n alpha: +z * 180,\n beta: +y * -90,\n gamma: +x * 90,\n };\n\n handleWatch(evt);\n }\n };\n document.addEventListener('motion.gyro', this.watchListener, false);\n } else if (useJSBridge) {\n switchIOSEvent(true, this.options.interval / 1000);\n this.watchListener = (e: Event) => {\n if (e && 'data' in e) {\n /*\n data:\n {\n data: {\n x: 0.0, // gamma -1 ~ 1\n y: 0.0, // beta -1 ~ 1\n z: 0.0, // alpha\n }\n }\n */\n const { x, y, z } = e.data as JSBridgeParam;\n const evt = {\n alpha: z * 180,\n beta: y * -90,\n gamma: x * 90,\n };\n\n handleWatch(evt);\n }\n };\n document.addEventListener('accelerometerChange', this.watchListener, false);\n } else {\n this.watchListener = (e: DeviceOrientationEvent | Event) => {\n nowts = new Date().getTime();\n // 控制时间片\n if (nowts - timefragment >= this.options.interval) {\n timefragment = nowts;\n handleWatch(e as DeviceOrientationEvent);\n }\n };\n window.addEventListener('deviceorientation', this.watchListener, false);\n }\n }\n\n unWatch () {\n assertExist(this.watchListener);\n if (useWindVane) {\n switchWindVane(false);\n document.removeEventListener('motion.gyro', this.watchListener);\n } else if (useJSBridge) {\n switchIOSEvent(false);\n document.removeEventListener('accelerometerChange', this.watchListener);\n } else {\n window.removeEventListener('deviceorientation', this.watchListener);\n }\n this.stoped = true;\n this.watchListener = undefined;\n }\n\n pause () {\n this.stoped = true;\n if (useJSBridge) {\n switchIOSEvent(false);\n }\n }\n\n continue () {\n this.stoped = false;\n if (useJSBridge) {\n switchIOSEvent(true, this.options.interval / 1000);\n }\n }\n\n private isValid (x: number, y: number) {\n // 判断是否和上次的值一样,检测有没有变\n return this.lastX !== x || this.lastY !== y;\n }\n}\n\n// 开启/关闭 iOS 的陀螺仪监听\nfunction switchIOSEvent (open: boolean, interval?: number) {\n window.AlipayJSBridge.call(\n 'watchShake',\n {\n monitorGyroscope: false,\n monitorAccelerometer: !!open,\n interval: !open ? 10 : parseFloat(interval!.toFixed(3)),\n },\n () => { }\n );\n}\n\nfunction switchWindVane (open: boolean, interval?: number) {\n const params = {\n // 是开启还是关闭陀螺仪的监听\n on: open,\n // 陀螺仪事件的时间间隔\n frequency: interval,\n };\n\n window.WindVane.call('WVMotion', 'listenGyro', params, (e: Event) => {\n console.info('call WVMotion success');\n }, (e: Event) => {\n console.error('call WVMotion failed:' + JSON.stringify(e));\n });\n}\n","import type { CompositionTransformerAcceler } from './composition-transformer-acceler';\nimport { DeviceOrientation } from './device-orientation';\n\nexport type AccelerMotionData = {\n x: number,\n y: number,\n};\n\n/**\n *\n */\nexport class OrientationAdapterAcceler {\n private transformers: CompositionTransformerAcceler[] = [];\n private connected = false;\n private accelerMotion: DeviceOrientation | null = null;\n private validRange = { // 限制 3d 角度范围\n alpha: [-60, 60], // 相对范围\n beta: [-80, 80], // 上下翻转\n gamma: [-89, 89], // 左右翻转\n };\n\n connect () {\n if (!this.connected) {\n this.accelerMotion = new DeviceOrientation({\n X: true, // 监听X(beta)轴\n Y: true, // 监听Y(gamma)轴\n interval: Math.floor(1000 / 60), // 监听时间片段(一秒30帧)\n useRequestAnimationFrame: true, // 使用 requestAnimationFrame 对齐\n relativeBeta: false, // bate 角度使用相对初始化的\n relativeGamma: false, // gamma 角度使用相对初始化的\n validRange: this.validRange,\n stableRange: 3, // 稳定区间\n });\n this.accelerMotion.watch((x, y) => {\n const motion: AccelerMotionData = {\n x, y,\n };\n\n this.dispatchMotion(motion);\n });\n }\n this.connected = true;\n }\n\n disconnect () {\n if (this.accelerMotion) {\n this.accelerMotion.unWatch();\n }\n this.connected = false;\n }\n\n /**\n *\n * @param motion\n */\n dispatchMotion (motion: AccelerMotionData) {\n this.transformers.forEach(t => t.update(motion));\n }\n\n addTransformer (transformer: CompositionTransformerAcceler) {\n if (!this.transformers.includes(transformer)) {\n this.transformers.push(transformer);\n }\n }\n\n removeTransformer (transformer: CompositionTransformerAcceler) {\n const index = this.transformers.indexOf(transformer);\n\n if (index > -1) {\n this.transformers.splice(index, 1);\n }\n\n return this.transformers.length === 0;\n }\n}\n\nlet adapter: OrientationAdapterAcceler;\n\nexport function getAccelerAdapter () {\n if (!adapter) {\n adapter = new OrientationAdapterAcceler();\n }\n\n return adapter;\n}\n","import type { Composition, Disposable } from '@galacean/effects';\nimport { AbstractPlugin } from '@galacean/effects';\nimport { CompositionTransformerAcceler } from './composition-transformer-acceler';\nimport type { OrientationAdapterAcceler } from './orientation-adapter-acceler';\nimport { getAccelerAdapter } from './orientation-adapter-acceler';\n\nexport class OrientationPluginLoader extends AbstractPlugin implements Disposable {\n override order = 90;\n\n private adapter: OrientationAdapterAcceler | null = null;\n\n override onCompositionConstructed () {\n this.adapter = getAdapter();\n this.adapter?.connect();\n this.bindAccelerDocumentEvent();\n }\n\n override onCompositionReset (composition: Composition): void {\n const transformer = composition.loaderData.deviceTransformer = new CompositionTransformerAcceler(composition);\n\n this.adapter?.addTransformer(transformer);\n }\n\n override onCompositionUpdate (composition: Composition) {\n const transformer = composition.loaderData.deviceTransformer as CompositionTransformerAcceler;\n\n if (transformer) {\n transformer.updateOrientation();\n }\n }\n\n override onCompositionDestroyed (composition: Composition): void {\n const empty = this.adapter?.removeTransformer(composition.loaderData.deviceTransformer);\n\n if (empty) {\n this.adapter?.disconnect();\n }\n }\n\n private handleConnect = () => {\n if (!closeManually) {\n this.adapter?.connect();\n }\n };\n\n private handleDisconnect = () => {\n this.adapter?.disconnect();\n };\n\n private bindAccelerDocumentEvent () {\n this.unbindAccelerDocumentEvent(); // 保证全局只监听一份\n document.addEventListener('resume', this.handleConnect, false);\n document.addEventListener('pause', this.handleDisconnect, false);\n document.addEventListener('back', this.handleDisconnect, false);\n }\n\n private unbindAccelerDocumentEvent () {\n document.removeEventListener('resume', this.handleConnect);\n document.removeEventListener('pause', this.handleDisconnect);\n document.removeEventListener('back', this.handleDisconnect);\n }\n\n dispose (): void {\n getAdapter().disconnect();\n this.unbindAccelerDocumentEvent();\n }\n}\n\n// 是否是手动关闭,如果是,那么 resume 时不要恢复\nlet closeManually = false;\n\n/**\n *\n * @returns\n */\nexport function getAdapter () {\n // 运动感应类型(默认使用加速度,Native 环境使用陀螺仪)\n return getAccelerAdapter();\n}\n\nexport function closeDeviceMotion () {\n closeManually = true;\n getAdapter().disconnect();\n}\n\nexport function openDeviceMotion () {\n closeManually = false;\n getAdapter().connect();\n}\n","import { logger, registerPlugin } from '@galacean/effects';\nimport { OrientationPluginLoader } from './orientation-plugin-loader';\nimport { TransformVFXItem } from './transform-vfx-item';\n\ndeclare global {\n interface Window {\n ge: any,\n }\n}\n\nregisterPlugin('orientation-transformer', OrientationPluginLoader, TransformVFXItem);\n\nexport { getAdapter, closeDeviceMotion, openDeviceMotion } from './orientation-plugin-loader';\nexport { OrientationAdapterAcceler } from './orientation-adapter-acceler';\n\nexport const version = __VERSION__;\n\nlogger.info('plugin orientation transformer version: ' + version);\n"],"names":["_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","value","writable","configurable","OrientationComponent","fromData","data","content","options","targets","map","t","name","xMin","yMin","xMax","yMax","vMin","hMin","vMax","hMax","start","transformer","item","composition","loaderData","deviceTransformer","forEach","target","addTarget","initComposition","update","dt","updateOrientation","onDestroy","removeTarget","ItemBehaviour","VERTICAL_INIT_DEGREE","TransformVFXItem","engine","props","component","addComponent","VFXItem","CompositionTransformerAcceler","records","currentPos","currentRot","gammaRange","betaRange","x","y","currentEvent","event","getOwnPropertyNames","moveLayer","items","i","length","position","transform","toArray","rotation","currentPosition","setPosition","setRotation","layer","initPosition","initRotation","beta","clamp","gamma","mapRange","br","gr","slice","range","min","max","getObjectType","obj","toString","call","angleLimit","angleObj","validRange","flagAlpha","flagBeta","flagGamma","alpha","referAlphaA","referAlphaB","_extends","assign","arguments","source","key","hasOwnProperty","apply","deepMerge","args","isObject","isArray","result","index","prop","isIOS","str","navigator","userAgent","toLowerCase","ver","match","parseInt","STABLE_RANGE","MAX_CHANGE","MIN_CHANGE","VALUE_POOL_LENGTH","Filtering","lastValue","valuePool","stableFix","stableRange","Math","abs","changeLimit","linearRegressionMedian","push","getLinearRegressionFixedVal","shift","linearRegression","n","sumX","sumY","sumXY","sumXX","sumYY","avgX","avgY","a","pow","sqrt","createLinearRegressionFx","values","b","fx","useJSBridge","window","AlipayJSBridge","useWindVane","WindVane","defaultOptions","X","Y","interval","floor","useRequestAnimationFrame","relativeBeta","relativeGamma","DeviceOrientation","lastX","lastY","prevAcceler","z","stoped","filterX","filterY","watch","callback","watchListener","timefragment","nowts","referGamma","referBeta","gammaFixed","betaFixed","isInValidDegRange","handleWatch","e","isValid","requestAnimationFrame","switchWindVane","param","evt","document","addEventListener","switchIOSEvent","Date","getTime","unWatch","assertExist","removeEventListener","undefined","pause","continue","open","monitorGyroscope","monitorAccelerometer","parseFloat","toFixed","params","on","frequency","console","info","error","JSON","stringify","OrientationAdapterAcceler","transformers","connected","accelerMotion","connect","motion","dispatchMotion","disconnect","addTransformer","includes","removeTransformer","indexOf","splice","adapter","getAccelerAdapter","OrientationPluginLoader","order","handleConnect","closeManually","handleDisconnect","onCompositionConstructed","getAdapter","bindAccelerDocumentEvent","onCompositionReset","onCompositionUpdate","onCompositionDestroyed","empty","unbindAccelerDocumentEvent","dispose","AbstractPlugin","closeDeviceMotion","openDeviceMotion","registerPlugin","version","logger"],"mappings":"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"}
package/dist/index.min.js CHANGED
@@ -1,9 +1,8 @@
1
- /*!
1
+ !/*!
2
2
  * Name: @galacean/effects-plugin-orientation-transformer
3
3
  * Description: Galacean Effects player orientation transformer plugin
4
4
  * Author: Ant Group CO., Ltd.
5
5
  * Contributors: 燃然,意绮
6
- * Version: v2.0.0-alpha.4
7
- */
8
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@galacean/effects")):"function"==typeof define&&define.amd?define(["exports","@galacean/effects"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).ge=t.ge||{},t.ge.orientationTransformerPlugin={}),t.ge)}(this,(function(t,e){"use strict";var n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},n(t,e)};function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function o(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}var i=function(){return i=Object.assign||function(t){for(var e,n=1,o=arguments.length;n<o;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},i.apply(this,arguments)};function r(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,i,r=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=r.next()).done;)a.push(o.value)}catch(t){i={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(i)throw i.error}}return a}function a(t,e,n){if(n||2===arguments.length)for(var o,i=0,r=e.length;i<r;i++)!o&&i in e||(o||(o=Array.prototype.slice.call(e,0,i)),o[i]=e[i]);return t.concat(o||Array.prototype.slice.call(e))}"function"==typeof SuppressedError&&SuppressedError;var s=function(){function t(t){this.composition=t,this.targets={},this.records={},this.current={},this.gammaRange=[-89,89],this.betaRange=[-80,80]}return t.prototype.update=function(t){var e=t.x,n=t.y;this.currentEvent={x:e,y:n}},t.prototype.updateOrientation=function(){var t=this,e=this.currentEvent;e&&Object.getOwnPropertyNames(this.targets).forEach((function(n){t.moveLayer(n,e)}))},t.prototype.initComposition=function(){for(var t=this.composition.items,e=0;e<t.length;e++){var n=t[e];if(this.targets[n.name]){var o=n.transform.position.toArray(),i=this.current[n.name];if(this.records[n.name]={item:n,position:o},i){var a=r(i,3),s=a[0],c=a[1],l=a[2];n.transform.setPosition(s,c,l)}}}},t.prototype.addTarget=function(t){this.targets[t.name]=t},t.prototype.removeTarget=function(t){delete this.targets[t],delete this.records[t]},t.prototype.moveLayer=function(t,e){var n,o,i=e.x,s=e.y,u=null===(o=this.records[t])||void 0===o?void 0:o.item;if(u){var h=this.records[t].position,p=this.targets[t],f=c(i,this.betaRange),d=c(s,this.gammaRange);if(p){var v=[h[0]+1.2*l((f-this.gammaRange[0])/(this.gammaRange[1]-this.gammaRange[0]),p.xMin,p.xMax),h[1]+1.2*l((d-this.betaRange[0])/(this.betaRange[1]-this.betaRange[0]),p.yMin,p.yMax),h[2]];(n=u.transform).setPosition.apply(n,a([],r(v),!1)),this.current[t]=v.slice()}}},t}();function c(t,e){return t<e[0]?e[0]:t>e[1]?e[1]:t}function l(t,e,n){return e+(n-e)*t}function u(t){return Object.prototype.toString.call(t)}function h(t,e){var n=!0,o=!0,i=!0;if("[object Array]"===u(e.alpha)&&e.alpha.length>=2){var r=t.alpha+e.alpha[0],a=t.alpha+e.alpha[1];n=(r=r<0?r+360:r)<(a=a>360?a-360:a)?t.alpha>r&&t.alpha<a:t.alpha>r||t.alpha<a}return"[object Array]"===u(e.beta)&&e.beta.length>=2&&(o=t.beta>=e.beta[0]&&t.beta<=e.beta[1]),"[object Array]"===u(e.gamma)&&e.gamma.length>=2&&(i=t.gamma>=e.gamma[0]&&t.gamma<=e.gamma[1]),n&&o&&i}function p(t,n){if(!e.isObject(t)&&!e.isArray(t))return t;for(var o=e.isArray(t)?a([],r(t),!1):i({},t),s=arguments.length,c=1;c<s;c++){var l=arguments[c]||{};if(e.isObject(l)){var u=void 0;for(u in l)l.hasOwnProperty(u)&&(e.isObject(o[u])&&e.isObject(l[u])?o[u]=p(o[u],l[u]):e.isObject(l[u])||e.isArray(l[u])?o[u]=p(l[u]):o[u]=l[u]);for(u in o)e.isObject(o[u])&&o.hasOwnProperty(u)&&!l.hasOwnProperty(u)&&(o[u]=p(o[u]))}}if(1===s)for(var u in o)e.isObject(o[u])&&o.hasOwnProperty(u)&&(o[u]=p(o[u]));return o}var f=function(){function t(t){void 0===t&&(t={}),this.options=t,this.lastValue=0,this.valuePool=[]}return t.prototype.stableFix=function(t){var e=this.options.stableRange||3;return Math.abs(t)<e?0:t>e?t-e:t+e},t.prototype.changeLimit=function(t){var e=this.lastValue,n=t;return Math.abs(t-e)>5&&(n=e<t?e+5:e-5),Math.abs(t-e)<1&&(n=e),this.lastValue=n,n},t.prototype.linearRegressionMedian=function(t){var e,n,o;return this.valuePool.push(t),this.valuePool.length>=5?(n=this.valuePool,o=function(t){var e=[],n=[];t.forEach((function(t,o){e.push(o),n.push(t)}));var o=function(t,e){for(var n={},o=e.length,i=0,r=0,a=0,s=0,c=0,l=0;l<e.length;l++)i+=t[l],r+=e[l],a+=t[l]*e[l],s+=t[l]*t[l],c+=e[l]*e[l];var u=i/o,h=r/o;return n.a=(a-o*u*h)/(s-o*u*u),n.b=h-n.a*u,n.miss=Math.pow((o*a-i*r)/Math.sqrt((o*s-i*i)*(o*c-r*r)),2),n}(e,n);return function(t){return o.a*t+o.b}}(n),n=n.map((function(t,e){return o(e)})),e=o(n.length/2),this.valuePool.shift()):e=this.lastValue,e},t}();var d,v=((d=navigator.userAgent.toLowerCase().match(/cpu (iphone )?os (.*?) like mac os/))?parseInt(d[2],10):0)&&void 0!==window.AlipayJSBridge,m=void 0!==window.WindVane,y={X:!0,Y:!0,interval:Math.floor(1e3/30),useRequestAnimationFrame:!0,relativeBeta:!1,relativeGamma:!1,validRange:{alpha:[-60,60],beta:[-60,180],gamma:[-89,89]},stableRange:3},g=function(){function t(t){void 0===t&&(t={}),this.lastX=0,this.lastY=0,this.prevAcceler={x:0,y:0,z:0},this.stoped=!1,this.options=p(y,t);var e=this.options.stableRange;this.filterX=new f({stableRange:e}),this.filterY=new f({stableRange:e})}return t.prototype.watch=function(t){var e=this;if("function"==typeof t&&!this.watchListener){var n,o,i,r,a,s,c,l=0,u=0,p=0,f=0,d=function(l){e.stoped||(n=l.alpha,o=l.beta,i=l.gamma,f||(f=o||0),p||(p=i||0),h.call(e,{alpha:n,beta:o,gamma:i},e.options.validRange)&&(e.options.X?(r=i-p,s=e.options.relativeGamma?r:i,s=e.filterX.stableFix(s),s=e.filterX.changeLimit(s),s=e.filterX.linearRegressionMedian(+s)):s=0,e.options.Y?(a=o-f,c=e.options.relativeBeta?a:o,c=e.filterY.stableFix(c),c=e.filterY.changeLimit(c),c=e.filterY.linearRegressionMedian(+c)):c=0,e.isValid(s,c)&&(e.options.useRequestAnimationFrame?window.requestAnimationFrame((function(){t(s,c,{alpha:n,beta:o,gamma:i})})):t(s,c,{alpha:n,beta:o,gamma:i}),e.lastX=s,e.lastY=c)))};this.stoped=!1,m?(w(!0,this.options.interval),this.watchListener=function(t){if("param"in t){var n=t.param,o=n.x,i=n.y,r=n.z;if(o===e.prevAcceler.x&&i===e.prevAcceler.y&&r===e.prevAcceler.z)return;e.prevAcceler={x:o,y:i,z:r},d({alpha:180*+r,beta:-90*+i,gamma:90*+o})}},document.addEventListener("motion.gyro",this.watchListener,!1)):v?(b(!0,this.options.interval/1e3),this.watchListener=function(t){if(t&&"data"in t){var e=t.data,n=e.x,o=e.y,i=e.z;d({alpha:180*i,beta:-90*o,gamma:90*n})}},document.addEventListener("accelerometerChange",this.watchListener,!1)):(this.watchListener=function(t){(u=(new Date).getTime())-l>=e.options.interval&&(l=u,d(t))},window.addEventListener("deviceorientation",this.watchListener,!1))}},t.prototype.unWatch=function(){e.assertExist(this.watchListener),m?(w(!1),document.removeEventListener("motion.gyro",this.watchListener)):v?(b(!1),document.removeEventListener("accelerometerChange",this.watchListener)):window.removeEventListener("deviceorientation",this.watchListener),this.stoped=!0,this.watchListener=void 0},t.prototype.pause=function(){this.stoped=!0,v&&b(!1)},t.prototype.continue=function(){this.stoped=!1,v&&b(!0,this.options.interval/1e3)},t.prototype.isValid=function(t,e){return this.lastX!==t||this.lastY!==e},t}();function b(t,e){window.AlipayJSBridge.call("watchShake",{monitorGyroscope:!1,monitorAccelerometer:!!t,interval:t?parseFloat(e.toFixed(3)):10},(function(){}))}function w(t,e){var n={on:t,frequency:e};window.WindVane.call("WVMotion","listenGyro",n,(function(t){console.info("call WVMotion success")}),(function(t){console.error("call WVMotion failed:"+JSON.stringify(t))}))}var M,x=function(){function t(){this.transformers=[],this.connected=!1,this.accelerMotion=null,this.validRange={alpha:[-60,60],beta:[-80,80],gamma:[-89,89]}}return t.prototype.connect=function(){var t=this;this.connected||(this.accelerMotion=new g({X:!0,Y:!0,interval:Math.floor(1e3/60),useRequestAnimationFrame:!0,relativeBeta:!1,relativeGamma:!1,validRange:this.validRange,stableRange:3}),this.accelerMotion.watch((function(e,n){var o={x:e,y:n};t.dispatchMotion(o)}))),this.connected=!0},t.prototype.disconnect=function(){this.accelerMotion&&this.accelerMotion.unWatch(),this.connected=!1},t.prototype.dispatchMotion=function(t){this.transformers.forEach((function(e){return e.update(t)}))},t.prototype.addTransformer=function(t){this.transformers.includes(t)||this.transformers.push(t)},t.prototype.removeTransformer=function(t){var e=this.transformers.indexOf(t);return e>-1&&this.transformers.splice(e,1),0===this.transformers.length},t}();var A=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.order=90,e.adapter=null,e.handleConnect=function(){var t;L||null===(t=e.adapter)||void 0===t||t.connect()},e.handleDisconnect=function(){var t;null===(t=e.adapter)||void 0===t||t.disconnect()},e}return o(e,t),e.prototype.onCompositionConstructed=function(){var t;this.adapter=O(),null===(t=this.adapter)||void 0===t||t.connect(),this.bindAccelerDocumentEvent()},e.prototype.onCompositionReset=function(t){var e,n=t.loaderData.deviceTransformer=new s(t);null===(e=this.adapter)||void 0===e||e.addTransformer(n)},e.prototype.onCompositionUpdate=function(t){var e=t.loaderData.deviceTransformer;e&&e.updateOrientation()},e.prototype.onCompositionDestroyed=function(t){var e,n;(null===(e=this.adapter)||void 0===e?void 0:e.removeTransformer(t.loaderData.deviceTransformer))&&(null===(n=this.adapter)||void 0===n||n.disconnect())},e.prototype.bindAccelerDocumentEvent=function(){this.unbindAccelerDocumentEvent(),document.addEventListener("resume",this.handleConnect,!1),document.addEventListener("pause",this.handleDisconnect,!1),document.addEventListener("back",this.handleDisconnect,!1)},e.prototype.unbindAccelerDocumentEvent=function(){document.removeEventListener("resume",this.handleConnect),document.removeEventListener("pause",this.handleDisconnect),document.removeEventListener("back",this.handleDisconnect)},e.prototype.dispose=function(){O().disconnect(),this.unbindAccelerDocumentEvent()},e}(e.AbstractPlugin),L=!1;function O(){return M||(M=new x),M}var E=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.fromData=function(e){t.prototype.fromData.call(this,e);var n=e.content.options.targets;n&&(this.targets=n.map((function(t){return{name:t.name,xMin:+t.xMin||0,yMin:+t.yMin||0,xMax:+t.xMax||0,yMax:+t.yMax||0}})))},e.prototype.start=function(){var t,e,n=null===(t=this.item.composition)||void 0===t?void 0:t.loaderData.deviceTransformer;n&&(null===(e=this.targets)||void 0===e||e.forEach((function(t){return n.addTarget(t)})),n.initComposition())},e.prototype.update=function(t){var e,n=null===(e=this.item.composition)||void 0===e?void 0:e.loaderData.deviceTransformer;n&&n.updateOrientation()},e.prototype.onDestroy=function(){var t,e=this;null===(t=this.targets)||void 0===t||t.forEach((function(t){var n,o;return null===(o=null===(n=e.item.composition)||void 0===n?void 0:n.loaderData.deviceTransformer)||void 0===o?void 0:o.removeTarget(t.name)}))},e}(e.ItemBehaviour),R=function(t){function e(e,n){var o=t.call(this,e,n)||this;return o.addComponent(E).fromData(n),o}return o(e,t),e}(e.VFXItem);e.registerPlugin("orientation-transformer",A,R);var D="2.0.0-alpha.4";e.logger.info("plugin orientation transformer version: "+D),t.OrientationAdapterAcceler=x,t.closeDeviceMotion=function(){L=!0,O().disconnect()},t.getAdapter=O,t.openDeviceMotion=function(){L=!1,O().connect()},t.version=D,Object.defineProperty(t,"__esModule",{value:!0})}));
6
+ * Version: v2.0.0-alpha.6
7
+ */function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@galacean/effects")):"function"==typeof define&&define.amd?define(["exports","@galacean/effects"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).ge=t.ge||{},t.ge.orientationTransformerPlugin={}),t.ge)}(this,function(t,e){"use strict";function n(t,e){return(n=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function a(t,e){if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&n(t,e)}var i,o,r=function(t){function e(){return t.apply(this,arguments)}a(e,t);var n=e.prototype;return n.fromData=function(e){t.prototype.fromData.call(this,e);var n=e.content.options.targets;n&&(this.targets=n.map(function(t){return{name:t.name,xMin:+t.xMin||0,yMin:+t.yMin||0,xMax:+t.xMax||0,yMax:+t.yMax||0,vMin:+t.vMin||0,hMin:+t.hMin||0,vMax:+t.vMax||0,hMax:+t.hMax||0}}))},n.start=function(){var t,e,n=null==(t=this.item.composition)?void 0:t.loaderData.deviceTransformer;n&&(null==(e=this.targets)||e.forEach(function(t){return n.addTarget(t)}),n.initComposition())},n.update=function(t){var e,n=null==(e=this.item.composition)?void 0:e.loaderData.deviceTransformer;n&&n.updateOrientation()},n.onDestroy=function(){var t,e=this;null==(t=this.targets)||t.forEach(function(t){var n,a;return null==(a=e.item.composition)?void 0:null==(n=a.loaderData.deviceTransformer)?void 0:n.removeTarget(t.name)})},e}(e.ItemBehaviour),s=function(t){function e(e,n){var a;return(a=t.call(this,e,n)||this).addComponent(r).fromData(n),a}return a(e,t),e}(e.VFXItem),c=function(){function t(t){this.composition=t,this.targets={},this.records={},this.currentPos={},this.currentRot={},this.gammaRange=[-89,89],this.betaRange=[-89,89]}var e=t.prototype;return e.update=function(t){var e=t.x,n=t.y;this.currentEvent={x:e,y:n}},e.updateOrientation=function(){var t=this,e=this.currentEvent;e&&Object.getOwnPropertyNames(this.targets).forEach(function(n){t.moveLayer(n,e)})},e.initComposition=function(){for(var t=this.composition.items,e=0;e<t.length;e++){var n=t[e];if(this.targets[n.name]){var a=n.transform.position.toArray(),i=n.transform.rotation.toArray(),o=this.currentPos[n.name],r=this.currentRot[n.name];this.records[n.name]={item:n,position:a,rotation:i},o&&n.transform.setPosition(o[0],o[1],o[2]),r&&n.transform.setRotation(r[0],r[1],r[2])}}},e.addTarget=function(t){this.targets[t.name]=t},e.removeTarget=function(t){delete this.targets[t],delete this.records[t]},e.moveLayer=function(t,e){var n=e.x,a=e.y,i=null==(g=this.records[t])?void 0:g.item;if(i){var o=this.records[t].position,r=this.records[t].rotation,s=this.targets[t],c=h(n,this.betaRange),l=h(a,this.gammaRange);if(s){var u,f,m,d,p,v,g,b,y,M=[o[0]+1.2*(u=(c-this.gammaRange[0])/(this.gammaRange[1]-this.gammaRange[0]),(f=s.xMin)+(s.xMax-f)*u),o[1]+1.2*(m=(l-this.betaRange[0])/(this.betaRange[1]-this.betaRange[0]),(d=s.yMin)+(s.yMax-d)*m),o[2]],w=(h(2*n,this.betaRange)-this.betaRange[0])/(this.betaRange[1]-this.betaRange[0]),R=(h(2*a-45,this.gammaRange)-this.gammaRange[0])/(this.gammaRange[1]-this.gammaRange[0]),x=[r[0]+((p=s.hMin)+(s.hMax-p)*R),r[1]+((v=s.vMin)+(s.vMax-v)*w),r[2]];(b=i.transform).setPosition.apply(b,[].concat(M)),(y=i.transform).setRotation.apply(y,[].concat(x)),this.currentPos[t]=M.slice(),this.currentRot[t]=x.slice()}}},t}();function h(t,e){return t<e[0]?e[0]:t>e[1]?e[1]:t}function l(t){return Object.prototype.toString.call(t)}function u(t,e){var n=!0,a=!0,i=!0;if("[object Array]"===l(e.alpha)&&e.alpha.length>=2){var o=t.alpha+e.alpha[0],r=t.alpha+e.alpha[1];n=(o=o<0?o+360:o)<(r=r>360?r-360:r)?t.alpha>o&&t.alpha<r:t.alpha>o||t.alpha<r}return"[object Array]"===l(e.beta)&&e.beta.length>=2&&(a=t.beta>=e.beta[0]&&t.beta<=e.beta[1]),"[object Array]"===l(e.gamma)&&e.gamma.length>=2&&(i=t.gamma>=e.gamma[0]&&t.gamma<=e.gamma[1]),n&&a&&i}function f(){return(f=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(t[a]=n[a])}return t}).apply(this,arguments)}var m=function(){function t(t){void 0===t&&(t={}),this.options=t,this.lastValue=0,this.valuePool=[]}var e=t.prototype;return e.stableFix=function(t){var e=this.options.stableRange||3;return Math.abs(t)<e?0:t>e?t-e:t+e},e.changeLimit=function(t){var e=this.lastValue,n=t;return Math.abs(t-e)>5&&(n=e<t?e+5:e-5),1>Math.abs(t-e)&&(n=e),this.lastValue=n,n},e.linearRegressionMedian=function(t){var e,n,a;return this.valuePool.push(t),this.valuePool.length>=5?(a=function(t){var e=[],n=[];t.forEach(function(t,a){e.push(a),n.push(t)});var a=function(t,e){for(var n={},a=e.length,i=0,o=0,r=0,s=0,c=0,h=0;h<e.length;h++)i+=t[h],o+=e[h],r+=t[h]*e[h],s+=t[h]*t[h],c+=e[h]*e[h];var l=i/a,u=o/a;return n.a=(r-a*l*u)/(s-a*l*l),n.b=u-n.a*l,n.miss=Math.pow((a*r-i*o)/Math.sqrt((a*s-i*i)*(a*c-o*o)),2),n}(e,n);return function(t){return a.a*t+a.b}}(n=this.valuePool),n=n.map(function(t,e){return a(e)}),e=a(n.length/2),this.valuePool.shift()):e=this.lastValue,e},t}(),d=((i=navigator.userAgent.toLowerCase().match(/cpu (iphone )?os (.*?) like mac os/))?parseInt(i[2],10):0)&&void 0!==window.AlipayJSBridge,p=void 0!==window.WindVane,v={X:!0,Y:!0,interval:Math.floor(1e3/30),useRequestAnimationFrame:!0,relativeBeta:!1,relativeGamma:!1,validRange:{alpha:[-60,60],beta:[-60,180],gamma:[-89,89]},stableRange:3},g=function(){function t(t){void 0===t&&(t={}),this.lastX=0,this.lastY=0,this.prevAcceler={x:0,y:0,z:0},this.stoped=!1,this.options=function t(n,a){if(!e.isObject(n)&&!e.isArray(n))return n;for(var i=e.isArray(n)?[].concat(n):f({},n),o=arguments.length,r=1;r<o;r++){var s=arguments[r]||{};if(e.isObject(s)){var c=void 0;for(c in s)s.hasOwnProperty(c)&&(e.isObject(i[c])&&e.isObject(s[c])?i[c]=t(i[c],s[c]):e.isObject(s[c])?i[c]=t(s[c]):e.isArray(s[c])?i[c]=t(s[c]):i[c]=s[c]);for(c in i)e.isObject(i[c])&&i.hasOwnProperty(c)&&!s.hasOwnProperty(c)&&(i[c]=t(i[c]))}}if(1===o)for(var h in i)e.isObject(i[h])&&i.hasOwnProperty(h)&&(i[h]=t(i[h]));return i}(v,t);var n=this.options.stableRange;this.filterX=new m({stableRange:n}),this.filterY=new m({stableRange:n})}var n=t.prototype;return n.watch=function(t){var e,n,a,i,o,r,s,c=this;if("function"==typeof t&&!this.watchListener){var h=0,l=0,f=0,m=0,v=function(h){!c.stoped&&(e=h.alpha,n=h.beta,a=h.gamma,m||(m=n||0),f||(f=a||0),u.call(c,{alpha:e,beta:n,gamma:a},c.options.validRange)&&(c.options.X?(i=a-f,r=c.options.relativeGamma?i:a,r=c.filterX.stableFix(r),r=c.filterX.changeLimit(r),r=c.filterX.linearRegressionMedian(+r)):r=0,c.options.Y?(o=n-m,s=c.options.relativeBeta?o:n,s=c.filterY.stableFix(s),s=c.filterY.changeLimit(s),s=c.filterY.linearRegressionMedian(+s)):s=0,c.isValid(r,s)&&(c.options.useRequestAnimationFrame?window.requestAnimationFrame(function(){t(r,s,{alpha:e,beta:n,gamma:a})}):t(r,s,{alpha:e,beta:n,gamma:a}),c.lastX=r,c.lastY=s)))};this.stoped=!1,p?(y(!0,this.options.interval),this.watchListener=function(t){if("param"in t){var e=t.param,n=e.x,a=e.y,i=e.z;(n!==c.prevAcceler.x||a!==c.prevAcceler.y||i!==c.prevAcceler.z)&&(c.prevAcceler={x:n,y:a,z:i},v({alpha:180*+i,beta:-90*+a,gamma:90*+n}))}},document.addEventListener("motion.gyro",this.watchListener,!1)):d?(b(!0,this.options.interval/1e3),this.watchListener=function(t){if(t&&"data"in t){var e=t.data,n=e.x,a=e.y;v({alpha:180*e.z,beta:-90*a,gamma:90*n})}},document.addEventListener("accelerometerChange",this.watchListener,!1)):(this.watchListener=function(t){(l=new Date().getTime())-h>=c.options.interval&&(h=l,v(t))},window.addEventListener("deviceorientation",this.watchListener,!1))}},n.unWatch=function(){e.assertExist(this.watchListener),p?(y(!1),document.removeEventListener("motion.gyro",this.watchListener)):d?(b(!1),document.removeEventListener("accelerometerChange",this.watchListener)):window.removeEventListener("deviceorientation",this.watchListener),this.stoped=!0,this.watchListener=void 0},n.pause=function(){this.stoped=!0,d&&b(!1)},n.continue=function(){this.stoped=!1,d&&b(!0,this.options.interval/1e3)},n.isValid=function(t,e){return this.lastX!==t||this.lastY!==e},t}();function b(t,e){window.AlipayJSBridge.call("watchShake",{monitorGyroscope:!1,monitorAccelerometer:!!t,interval:t?parseFloat(e.toFixed(3)):10},function(){})}function y(t,e){window.WindVane.call("WVMotion","listenGyro",{on:t,frequency:e},function(t){console.info("call WVMotion success")},function(t){console.error("call WVMotion failed:"+JSON.stringify(t))})}var M=function(){function t(){this.transformers=[],this.connected=!1,this.accelerMotion=null,this.validRange={alpha:[-60,60],beta:[-80,80],gamma:[-89,89]}}var e=t.prototype;return e.connect=function(){var t=this;this.connected||(this.accelerMotion=new g({X:!0,Y:!0,interval:Math.floor(1e3/60),useRequestAnimationFrame:!0,relativeBeta:!1,relativeGamma:!1,validRange:this.validRange,stableRange:3}),this.accelerMotion.watch(function(e,n){t.dispatchMotion({x:e,y:n})})),this.connected=!0},e.disconnect=function(){this.accelerMotion&&this.accelerMotion.unWatch(),this.connected=!1},e.dispatchMotion=function(t){this.transformers.forEach(function(e){return e.update(t)})},e.addTransformer=function(t){this.transformers.includes(t)||this.transformers.push(t)},e.removeTransformer=function(t){var e=this.transformers.indexOf(t);return e>-1&&this.transformers.splice(e,1),0===this.transformers.length},t}(),w=function(t){function e(){var e;return e=t.apply(this,arguments)||this,e.order=90,e.adapter=null,e.handleConnect=function(){if(!R){var t;null==(t=e.adapter)||t.connect()}},e.handleDisconnect=function(){var t;null==(t=e.adapter)||t.disconnect()},e}a(e,t);var n=e.prototype;return n.onCompositionConstructed=function(){var t;this.adapter=x(),null==(t=this.adapter)||t.connect(),this.bindAccelerDocumentEvent()},n.onCompositionReset=function(t){var e,n=t.loaderData.deviceTransformer=new c(t);null==(e=this.adapter)||e.addTransformer(n)},n.onCompositionUpdate=function(t){var e=t.loaderData.deviceTransformer;e&&e.updateOrientation()},n.onCompositionDestroyed=function(t){var e,n;(null==(e=this.adapter)?void 0:e.removeTransformer(t.loaderData.deviceTransformer))&&(null==(n=this.adapter)||n.disconnect())},n.bindAccelerDocumentEvent=function(){this.unbindAccelerDocumentEvent(),document.addEventListener("resume",this.handleConnect,!1),document.addEventListener("pause",this.handleDisconnect,!1),document.addEventListener("back",this.handleDisconnect,!1)},n.unbindAccelerDocumentEvent=function(){document.removeEventListener("resume",this.handleConnect),document.removeEventListener("pause",this.handleDisconnect),document.removeEventListener("back",this.handleDisconnect)},n.dispose=function(){x().disconnect(),this.unbindAccelerDocumentEvent()},e}(e.AbstractPlugin),R=!1;function x(){return o||(o=new M),o}e.registerPlugin("orientation-transformer",w,s);var A="2.0.0-alpha.6";e.logger.info("plugin orientation transformer version: "+A),t.OrientationAdapterAcceler=M,t.closeDeviceMotion=function(){R=!0,x().disconnect()},t.getAdapter=x,t.openDeviceMotion=function(){R=!1,x().connect()},t.version=A,Object.defineProperty(t,"__esModule",{value:!0})});
9
8
  //# sourceMappingURL=index.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"index.min.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_inherits.js","../src/orientation-component.ts","../src/utils/device.ts","../src/orientation-adapter-acceler.ts","../src/transform-vfx-item.ts","../src/composition-transformer-acceler.ts","../src/utils/object-type.ts","../src/utils/angle-limit.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.8/node_modules/@swc/helpers/esm/_extends.js","../src/utils/filtering.ts","../src/device-orientation.ts","../src/utils/deep-merge.ts","../src/orientation-plugin-loader.ts","../src/index.ts"],"sourcesContent":["export function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _set_prototype_of } from \"./_set_prototype_of.js\";\n\nexport function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","import type { spec } from '@galacean/effects';\nimport { ItemBehaviour } from '@galacean/effects';\nimport type { CompositionTransformerAcceler } from './composition-transformer-acceler';\n\nexport class OrientationComponent extends ItemBehaviour {\n private targets: spec.PluginGyroscopeTarget[];\n\n override fromData (data: any) {\n super.fromData(data);\n\n const { targets } = data.content.options;\n\n if (targets) {\n this.targets = targets.map((t: any) => ({\n name: t.name,\n xMin: +t.xMin || 0,\n yMin: +t.yMin || 0,\n xMax: +t.xMax || 0,\n yMax: +t.yMax || 0,\n vMin: +t.vMin || 0,\n hMin: +t.hMin || 0,\n vMax: +t.vMax || 0,\n hMax: +t.hMax || 0,\n }));\n }\n\n }\n\n override start () {\n const transformer = this.item.composition?.loaderData.deviceTransformer as CompositionTransformerAcceler;\n\n if (transformer) {\n this.targets?.forEach(target => transformer.addTarget(target));\n transformer.initComposition();\n }\n }\n\n override update (dt: number) {\n const transformer = this.item.composition?.loaderData.deviceTransformer as CompositionTransformerAcceler;\n\n if (transformer) {\n transformer.updateOrientation();\n }\n }\n\n override onDestroy () {\n this.targets?.forEach(target => this.item.composition?.loaderData.deviceTransformer?.removeTarget(target.name));\n }\n}\n","export function isIOS () {\n const str = navigator.userAgent.toLowerCase();\n const ver = str.match(/cpu (iphone )?os (.*?) like mac os/);\n\n return ver ? parseInt(ver[2], 10) : 0;\n}\n","import type { CompositionTransformerAcceler } from './composition-transformer-acceler';\nimport { DeviceOrientation } from './device-orientation';\n\nexport type AccelerMotionData = {\n x: number,\n y: number,\n};\n\n/**\n *\n */\nexport class OrientationAdapterAcceler {\n private transformers: CompositionTransformerAcceler[] = [];\n private connected = false;\n private accelerMotion: DeviceOrientation | null = null;\n private validRange = { // 限制 3d 角度范围\n alpha: [-60, 60], // 相对范围\n beta: [-80, 80], // 上下翻转\n gamma: [-89, 89], // 左右翻转\n };\n\n connect () {\n if (!this.connected) {\n this.accelerMotion = new DeviceOrientation({\n X: true, // 监听X(beta)轴\n Y: true, // 监听Y(gamma)轴\n interval: Math.floor(1000 / 60), // 监听时间片段(一秒30帧)\n useRequestAnimationFrame: true, // 使用 requestAnimationFrame 对齐\n relativeBeta: false, // bate 角度使用相对初始化的\n relativeGamma: false, // gamma 角度使用相对初始化的\n validRange: this.validRange,\n stableRange: 3, // 稳定区间\n });\n this.accelerMotion.watch((x, y) => {\n const motion: AccelerMotionData = {\n x, y,\n };\n\n this.dispatchMotion(motion);\n });\n }\n this.connected = true;\n }\n\n disconnect () {\n if (this.accelerMotion) {\n this.accelerMotion.unWatch();\n }\n this.connected = false;\n }\n\n /**\n *\n * @param motion\n */\n dispatchMotion (motion: AccelerMotionData) {\n this.transformers.forEach(t => t.update(motion));\n }\n\n addTransformer (transformer: CompositionTransformerAcceler) {\n if (!this.transformers.includes(transformer)) {\n this.transformers.push(transformer);\n }\n }\n\n removeTransformer (transformer: CompositionTransformerAcceler) {\n const index = this.transformers.indexOf(transformer);\n\n if (index > -1) {\n this.transformers.splice(index, 1);\n }\n\n return this.transformers.length === 0;\n }\n}\n\nlet adapter: OrientationAdapterAcceler;\n\nexport function getAccelerAdapter () {\n if (!adapter) {\n adapter = new OrientationAdapterAcceler();\n }\n\n return adapter;\n}\n","import type { Engine, VFXItemProps } from '@galacean/effects';\nimport { VFXItem } from '@galacean/effects';\nimport { OrientationComponent } from './orientation-component';\n\n/**\n * 水平旋转变化起始角(手机处于改角度时无变化)\n */\nexport const VERTICAL_INIT_DEGREE = 45;\n\nexport class TransformVFXItem extends VFXItem<OrientationComponent> {\n constructor (engine: Engine, props: VFXItemProps) {\n super(engine, props);\n\n const component = this.addComponent(OrientationComponent);\n\n component.fromData(props);\n }\n}\n","import type { Composition, spec } from '@galacean/effects';\nimport { VERTICAL_INIT_DEGREE } from './transform-vfx-item';\n\ntype EventType = {\n x: number,\n y: number,\n};\n\nexport class CompositionTransformerAcceler {\n private readonly targets: Record<string, spec.PluginGyroscopeTarget> = {};\n private readonly records: Record<string, { item: any, position: number[], current?: number[], rotation: number[] }> = {};\n private readonly currentPos: Record<string, number[]> = {};\n private readonly currentRot: Record<string, number[]> = {};\n private gammaRange: [x: number, y: number] = [-89, 89];\n private betaRange: [x: number, y: number] = [-89, 89];\n private currentEvent?: EventType;\n\n constructor (\n private readonly composition: Composition,\n ) {\n }\n\n update ({ x, y }: EventType) {\n this.currentEvent = { x, y };\n }\n\n updateOrientation () {\n const event = this.currentEvent;\n\n if (event) {\n Object.getOwnPropertyNames(this.targets).forEach(name => {\n this.moveLayer(name, event);\n });\n }\n }\n\n initComposition () {\n const items = this.composition.items;\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const target = this.targets[item.name];\n\n if (target) {\n const position = item.transform.position.toArray();\n const rotation = item.transform.rotation.toArray();\n\n const currentPosition = this.currentPos[item.name];\n const currentRot = this.currentRot[item.name];\n\n this.records[item.name] = {\n item,\n position,\n rotation,\n };\n if (currentPosition) {\n item.transform.setPosition(currentPosition[0], currentPosition[1], currentPosition[2]);\n }\n if (currentRot) {\n item.transform.setRotation(currentRot[0], currentRot[1], currentRot[2]);\n }\n\n }\n }\n }\n\n addTarget (target: spec.PluginGyroscopeTarget) {\n this.targets[target.name] = target;\n }\n\n removeTarget (name: string) {\n delete this.targets[name];\n delete this.records[name];\n }\n\n private moveLayer (name: string, { x, y }: EventType) {\n const layer = this.records[name]?.item;\n\n if (layer) {\n const initPosition = this.records[name].position;\n const initRotation = this.records[name].rotation;\n const target = this.targets[name];\n const beta = clamp(x, this.betaRange), gamma = clamp(y, this.gammaRange);\n\n if (target) {\n const position = [\n initPosition[0] + 1.2 * mapRange((beta - this.gammaRange[0]) / (this.gammaRange[1] - this.gammaRange[0]), target.xMin, target.xMax),\n initPosition[1] + 1.2 * mapRange((gamma - this.betaRange[0]) / (this.betaRange[1] - this.betaRange[0]), target.yMin, target.yMax),\n initPosition[2],\n ];\n\n const br = (clamp(x * 2, this.betaRange) - this.betaRange[0]) / (this.betaRange[1] - this.betaRange[0]);\n const gr = (clamp(y * 2 - VERTICAL_INIT_DEGREE, this.gammaRange) - this.gammaRange[0]) / (this.gammaRange[1] - this.gammaRange[0]);\n const rotation = [\n initRotation[0] + mapRange(gr, target.hMin, target.hMax),\n initRotation[1] + mapRange(br, target.vMin, target.vMax),\n initRotation[2],\n ];\n\n layer.transform.setPosition(...position);\n layer.transform.setRotation(...rotation);\n this.currentPos[name] = position.slice();\n this.currentRot[name] = rotation.slice();\n }\n }\n }\n}\n\nfunction clamp (x: number, range: [x: number, y: number]) {\n if (x < range[0]) {\n return range[0];\n } else if (x > range[1]) {\n return range[1];\n }\n\n return x;\n}\n\nfunction mapRange (t: number, min: number, max: number): number {\n return min + (max - min) * t;\n}\n","export function getObjectType (obj: any) {\n return Object.prototype.toString.call(obj);\n}\n","import { getObjectType } from './object-type';\n\nexport type AngleType = {\n alpha: number,\n beta: number,\n gamma: number,\n};\n\ntype RangeType = {\n alpha: number[],\n beta: number[],\n gamma: number[],\n};\n\n/**\n * 角度限制\n * @internal\n * @param angleObj 角度数值对象\n * @param validRange 角度限制值\n */\nexport function angleLimit (angleObj: AngleType, validRange: RangeType) {\n let flagAlpha = true;\n let flagBeta = true;\n let flagGamma = true;\n\n if (getObjectType(validRange.alpha) === '[object Array]' && validRange.alpha.length >= 2) {\n let referAlphaA = angleObj.alpha + validRange.alpha[0];\n let referAlphaB = angleObj.alpha + validRange.alpha[1];\n\n referAlphaA = referAlphaA < 0 ? referAlphaA + 360 : referAlphaA;\n referAlphaB = referAlphaB > 360 ? referAlphaB - 360 : referAlphaB;\n if (referAlphaA < referAlphaB) {\n flagAlpha = angleObj.alpha > referAlphaA && angleObj.alpha < referAlphaB;\n } else {\n flagAlpha = angleObj.alpha > referAlphaA || angleObj.alpha < referAlphaB;\n }\n }\n if (getObjectType(validRange.beta) === '[object Array]' && validRange.beta.length >= 2) {\n flagBeta = angleObj.beta >= validRange.beta[0] && angleObj.beta <= validRange.beta[1];\n }\n if (getObjectType(validRange.gamma) === '[object Array]' && validRange.gamma.length >= 2) {\n flagGamma = angleObj.gamma >= validRange.gamma[0] && angleObj.gamma <= validRange.gamma[1];\n }\n\n return flagAlpha && flagBeta && flagGamma;\n}\n","export function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","/**\n * 稳定区间\n */\nconst STABLE_RANGE = 3;\n/**\n * 每次增幅的最大值\n */\nconst MAX_CHANGE = 5;\n/**\n * 每次增幅的最小值\n */\nconst MIN_CHANGE = 1;\n/**\n * 数据缓存队列的长度\n */\nconst VALUE_POOL_LENGTH = 5;\n\n/**\n *\n */\ntype FilteringOptions = {\n /**\n * 稳定区间\n */\n stableRange?: number,\n /**\n * 最大变幅\n */\n maxChange?: number,\n};\n\n/**\n * 滤波方法\n */\nexport class Filtering {\n private lastValue = 0;\n private valuePool: number[] = [];\n\n constructor (\n private readonly options: FilteringOptions = {} as FilteringOptions,\n ) { }\n\n /**\n * 0deg 左右保持一定的稳定区间 STABLE_RANGE\n * - 小于 STABLE_RANGE 的算 0\n * - 大于 STABLE_RANGE 的减去 STABLE_RANGE\n * @param value - 输入值\n * @returns\n */\n stableFix (value: number) {\n const stableRange = this.options.stableRange || STABLE_RANGE;\n\n if (Math.abs(value) < stableRange) {\n return 0;\n }\n\n return value > stableRange ? value - stableRange : value + stableRange;\n }\n\n /**\n * 变幅限制\n * - 最大变化 MAX_CHANGE\n * - 最小变化 MIN_CHANGE\n * @param value\n * @returns\n */\n changeLimit (value: number) {\n const lastValue = this.lastValue;\n let result = value;\n\n if (Math.abs(value - lastValue) > MAX_CHANGE) {\n result = lastValue < value ? lastValue + MAX_CHANGE : lastValue - MAX_CHANGE;\n }\n if (Math.abs(value - lastValue) < MIN_CHANGE) {\n result = lastValue;\n }\n this.lastValue = result;\n\n return result;\n }\n\n linearRegressionMedian (value: number) {\n // 在队列中装载数据,达到队列阀值长度时开始计算\n this.valuePool.push(value);\n let result;\n\n if (this.valuePool.length >= VALUE_POOL_LENGTH) {\n result = getLinearRegressionFixedVal(this.valuePool);\n this.valuePool.shift();\n } else {\n result = this.lastValue;\n }\n\n return result;\n }\n}\n\n// 计算出线性回归参数\nfunction linearRegression (x: number[], y: number[]) {\n const result: Record<string, number> = {};\n const n = y.length;\n let sumX = 0;\n let sumY = 0;\n let sumXY = 0;\n let sumXX = 0;\n let sumYY = 0;\n\n for (let i = 0; i < y.length; i++) {\n sumX += x[i];\n sumY += y[i];\n sumXY += (x[i] * y[i]);\n sumXX += (x[i] * x[i]);\n sumYY += (y[i] * y[i]);\n }\n\n const avgX = sumX / n;\n const avgY = sumY / n;\n\n result['a'] = (sumXY - n * avgX * avgY) / (sumXX - n * avgX * avgX);\n result['b'] = avgY - result.a * avgX;\n result['miss'] = Math.pow((n * sumXY - sumX * sumY) / Math.sqrt((n * sumXX - sumX * sumX) * (n * sumYY - sumY * sumY)), 2);\n\n return result;\n}\n\n// 生成线性回归函数 F(x) = ax + b\nfunction createLinearRegressionFx (values: number[]) {\n const x: number[] = [];\n const y: number[] = [];\n\n values.forEach((item, index) => {\n x.push(index); // 数据是连续的,所以直接取数组下标为 x\n y.push(item);\n });\n const key = linearRegression(x, y);\n\n return (x: number) => {\n return key.a * x + key.b;\n };\n}\n\n// 获取线性回归后的中位数\nfunction getLinearRegressionFixedVal (valuePool: number[]) {\n const fx = createLinearRegressionFx(valuePool);\n\n // 这个迭代修正很重要\n valuePool = valuePool.map((item, index) => {\n return fx(index);\n });\n\n return fx(valuePool.length / 2);\n}\n","import { assertExist } from '@galacean/effects';\nimport { angleLimit, type AngleType } from './utils/angle-limit';\nimport { deepMerge } from './utils/deep-merge';\nimport { isIOS } from './utils/device';\nimport { Filtering } from './utils/filtering';\n\ndeclare global {\n interface Window {\n AlipayJSBridge: any,\n WindVane: any,\n }\n}\n\ntype JSBridgeParam = {\n x: number,\n y: number,\n z: number,\n};\n\ntype WindVaneParams = {\n x: number,\n y: number,\n z: number,\n};\n\nconst useJSBridge = isIOS() && typeof window.AlipayJSBridge !== 'undefined';\nconst useWindVane = typeof window.WindVane !== 'undefined';\n\nexport type DeviceOrientationOptions = {\n X?: boolean,\n Y?: boolean,\n /**\n * 监听时间片段(一秒30帧)\n */\n interval?: number,\n /**\n * 使用 requestAnimationFrame 对齐\n */\n useRequestAnimationFrame?: boolean,\n /**\n * bate 角度使用相对初始化的\n */\n relativeBeta?: boolean,\n /**\n * gamma 角度使用相对初始化的\n */\n relativeGamma?: boolean,\n /**\n * 限制 3d 角度范围\n */\n validRange: {\n /**\n * 相对范围\n */\n alpha: number[],\n /**\n * 上下翻转\n */\n beta: number[],\n /**\n * 左右翻转\n */\n gamma: number[],\n },\n /**\n * 稳定区间\n */\n stableRange: number,\n};\n\n// 默认参数\nconst defaultOptions = {\n X: true,\n Y: true,\n interval: Math.floor(1000 / 30),\n useRequestAnimationFrame: true,\n relativeBeta: false,\n relativeGamma: false,\n validRange: {\n alpha: [-60, 60],\n beta: [-60, 180],\n gamma: [-89, 89],\n },\n stableRange: 3,\n};\n\nexport class DeviceOrientation {\n private options: Required<DeviceOrientationOptions>;\n private lastX = 0;\n private lastY = 0;\n private prevAcceler = {\n x: 0,\n y: 0,\n z: 0,\n };\n private stoped = false;\n private readonly filterX: Filtering;\n private readonly filterY: Filtering;\n private watchListener?: (e: DeviceOrientationEvent | Event) => void;\n\n constructor (options = {}) {\n this.options = deepMerge(defaultOptions, options);\n\n const { stableRange } = this.options;\n\n this.filterX = new Filtering({ stableRange });\n this.filterY = new Filtering({ stableRange });\n }\n\n watch (callback: (x: number, y: number, data: AngleType) => void) {\n if (typeof callback !== 'function') {\n return;\n }\n // 目前只能绑定一个方法,此处可以扩展成一个方法队列\n if (this.watchListener) {\n return;\n }\n\n let timefragment = 0; // 时间片计时\n let nowts = 0; // 当前时间\n let referGamma = 0; // 初始化角度,作为单独一个用户的空间旋转的参照\n let referBeta = 0;\n let referAlpha = 0;\n let alpha: number;\n let beta: number;\n let gamma: number;\n let gammaFixed;\n let betaFixed;\n let isInValidDegRange;\n let x: number; // 最终输出的 x\n let y: number; // 最终输出的 y\n const handleWatch = (e: Pick<DeviceOrientationEvent, 'alpha' | 'beta' | 'gamma'>) => {\n if (this.stoped) {\n return;\n }\n alpha = e.alpha!; // 垂直于屏幕的轴 0 ~ 360\n beta = e.beta!; // 横向 X 轴 -180 ~ 180\n gamma = e.gamma!; // 纵向 Y 轴 -90 ~ 90\n // 对 alpha beta gamma 初始化位置\n if (!referAlpha) {\n referAlpha = alpha || 0;\n }\n if (!referBeta) {\n referBeta = beta || 0;\n }\n if (!referGamma) {\n referGamma = gamma || 0;\n }\n //\n isInValidDegRange = angleLimit.call(this, {\n alpha,\n beta,\n gamma,\n }, this.options.validRange);\n if (isInValidDegRange) {\n // 最终结果值\n if (this.options.X) {\n gammaFixed = gamma - referGamma;\n x = this.options.relativeGamma ? gammaFixed : gamma;\n x = this.filterX.stableFix(x);\n x = this.filterX.changeLimit(x);\n x = this.filterX.linearRegressionMedian(+x);\n } else {\n x = 0;\n }\n if (this.options.Y) {\n // beta 相对 referBeta 的角度\n betaFixed = beta - referBeta;\n y = this.options.relativeBeta ? betaFixed : beta;\n y = this.filterY.stableFix(y);\n y = this.filterY.changeLimit(y);\n y = this.filterY.linearRegressionMedian(+y);\n } else {\n y = 0;\n }\n if (this.isValid(x, y)) {\n if (this.options.useRequestAnimationFrame) {\n window.requestAnimationFrame(() => {\n callback(x, y, { alpha, beta, gamma });\n });\n } else {\n callback(x, y, { alpha, beta, gamma });\n }\n this.lastX = x;\n this.lastY = y;\n }\n }\n };\n\n // 针对不同平台绑定不同事件\n this.stoped = false;\n if (useWindVane) {\n switchWindVane(true, this.options.interval);\n this.watchListener = (e: Event) => {\n if ('param' in e) {\n const { x, y, z } = e.param as WindVaneParams;\n\n // 即使手机没动,也会不停触发,所以这里加个判断,值相等则不调用回调\n if (x === this.prevAcceler.x && y === this.prevAcceler.y && z === this.prevAcceler.z) {\n return;\n }\n this.prevAcceler = { x, y, z };\n const evt = {\n alpha: +z * 180,\n beta: +y * -90,\n gamma: +x * 90,\n };\n\n handleWatch(evt);\n }\n };\n document.addEventListener('motion.gyro', this.watchListener, false);\n } else if (useJSBridge) {\n switchIOSEvent(true, this.options.interval / 1000);\n this.watchListener = (e: Event) => {\n if (e && 'data' in e) {\n /*\n data:\n {\n data: {\n x: 0.0, // gamma -1 ~ 1\n y: 0.0, // beta -1 ~ 1\n z: 0.0, // alpha\n }\n }\n */\n const { x, y, z } = e.data as JSBridgeParam;\n const evt = {\n alpha: z * 180,\n beta: y * -90,\n gamma: x * 90,\n };\n\n handleWatch(evt);\n }\n };\n document.addEventListener('accelerometerChange', this.watchListener, false);\n } else {\n this.watchListener = (e: DeviceOrientationEvent | Event) => {\n nowts = new Date().getTime();\n // 控制时间片\n if (nowts - timefragment >= this.options.interval) {\n timefragment = nowts;\n handleWatch(e as DeviceOrientationEvent);\n }\n };\n window.addEventListener('deviceorientation', this.watchListener, false);\n }\n }\n\n unWatch () {\n assertExist(this.watchListener);\n if (useWindVane) {\n switchWindVane(false);\n document.removeEventListener('motion.gyro', this.watchListener);\n } else if (useJSBridge) {\n switchIOSEvent(false);\n document.removeEventListener('accelerometerChange', this.watchListener);\n } else {\n window.removeEventListener('deviceorientation', this.watchListener);\n }\n this.stoped = true;\n this.watchListener = undefined;\n }\n\n pause () {\n this.stoped = true;\n if (useJSBridge) {\n switchIOSEvent(false);\n }\n }\n\n continue () {\n this.stoped = false;\n if (useJSBridge) {\n switchIOSEvent(true, this.options.interval / 1000);\n }\n }\n\n private isValid (x: number, y: number) {\n // 判断是否和上次的值一样,检测有没有变\n return this.lastX !== x || this.lastY !== y;\n }\n}\n\n// 开启/关闭 iOS 的陀螺仪监听\nfunction switchIOSEvent (open: boolean, interval?: number) {\n window.AlipayJSBridge.call(\n 'watchShake',\n {\n monitorGyroscope: false,\n monitorAccelerometer: !!open,\n interval: !open ? 10 : parseFloat(interval!.toFixed(3)),\n },\n () => { }\n );\n}\n\nfunction switchWindVane (open: boolean, interval?: number) {\n const params = {\n // 是开启还是关闭陀螺仪的监听\n on: open,\n // 陀螺仪事件的时间间隔\n frequency: interval,\n };\n\n window.WindVane.call('WVMotion', 'listenGyro', params, (e: Event) => {\n console.info('call WVMotion success');\n }, (e: Event) => {\n console.error('call WVMotion failed:' + JSON.stringify(e));\n });\n}\n","/* eslint-disable no-prototype-builtins */\nimport { isArray, isObject } from '@galacean/effects';\n\nexport function deepMerge (target: any, args?: any) {\n if (!isObject(target) && !isArray(target)) {\n return target;\n }\n const result = isArray(target) ? [...target] : { ...target };\n const length = arguments.length;\n\n for (let index = 1; index < length; index++) {\n const source = arguments[index] || {};\n\n if (isObject(source)) {\n let prop;\n\n for (prop in source) {\n if (source.hasOwnProperty(prop)) {\n if (isObject(result[prop]) && isObject(source[prop])) {\n result[prop] = deepMerge(result[prop], source[prop]);\n } else if (isObject(source[prop])) {\n result[prop] = deepMerge(source[prop]);\n } else if (isArray(source[prop])) {\n result[prop] = deepMerge(source[prop]);\n } else {\n result[prop] = source[prop];\n }\n }\n }\n for (prop in result) {\n if (\n isObject(result[prop]) &&\n result.hasOwnProperty(prop) &&\n !source.hasOwnProperty(prop)\n ) {\n result[prop] = deepMerge(result[prop]);\n }\n }\n }\n }\n if (length === 1) {\n for (const prop in result) {\n if (isObject(result[prop]) && result.hasOwnProperty(prop)) {\n result[prop] = deepMerge(result[prop]);\n }\n }\n }\n\n return result;\n}\n","import type { Composition, Disposable } from '@galacean/effects';\nimport { AbstractPlugin } from '@galacean/effects';\nimport { CompositionTransformerAcceler } from './composition-transformer-acceler';\nimport type { OrientationAdapterAcceler } from './orientation-adapter-acceler';\nimport { getAccelerAdapter } from './orientation-adapter-acceler';\n\nexport class OrientationPluginLoader extends AbstractPlugin implements Disposable {\n override order = 90;\n\n private adapter: OrientationAdapterAcceler | null = null;\n\n override onCompositionConstructed () {\n this.adapter = getAdapter();\n this.adapter?.connect();\n this.bindAccelerDocumentEvent();\n }\n\n override onCompositionReset (composition: Composition): void {\n const transformer = composition.loaderData.deviceTransformer = new CompositionTransformerAcceler(composition);\n\n this.adapter?.addTransformer(transformer);\n }\n\n override onCompositionUpdate (composition: Composition) {\n const transformer = composition.loaderData.deviceTransformer as CompositionTransformerAcceler;\n\n if (transformer) {\n transformer.updateOrientation();\n }\n }\n\n override onCompositionDestroyed (composition: Composition): void {\n const empty = this.adapter?.removeTransformer(composition.loaderData.deviceTransformer);\n\n if (empty) {\n this.adapter?.disconnect();\n }\n }\n\n private handleConnect = () => {\n if (!closeManually) {\n this.adapter?.connect();\n }\n };\n\n private handleDisconnect = () => {\n this.adapter?.disconnect();\n };\n\n private bindAccelerDocumentEvent () {\n this.unbindAccelerDocumentEvent(); // 保证全局只监听一份\n document.addEventListener('resume', this.handleConnect, false);\n document.addEventListener('pause', this.handleDisconnect, false);\n document.addEventListener('back', this.handleDisconnect, false);\n }\n\n private unbindAccelerDocumentEvent () {\n document.removeEventListener('resume', this.handleConnect);\n document.removeEventListener('pause', this.handleDisconnect);\n document.removeEventListener('back', this.handleDisconnect);\n }\n\n dispose (): void {\n getAdapter().disconnect();\n this.unbindAccelerDocumentEvent();\n }\n}\n\n// 是否是手动关闭,如果是,那么 resume 时不要恢复\nlet closeManually = false;\n\n/**\n *\n * @returns\n */\nexport function getAdapter () {\n // 运动感应类型(默认使用加速度,Native 环境使用陀螺仪)\n return getAccelerAdapter();\n}\n\nexport function closeDeviceMotion () {\n closeManually = true;\n getAdapter().disconnect();\n}\n\nexport function openDeviceMotion () {\n closeManually = false;\n getAdapter().connect();\n}\n","import { logger, registerPlugin } from '@galacean/effects';\nimport { OrientationPluginLoader } from './orientation-plugin-loader';\nimport { TransformVFXItem } from './transform-vfx-item';\n\ndeclare global {\n interface Window {\n ge: any,\n }\n}\n\nregisterPlugin('orientation-transformer', OrientationPluginLoader, TransformVFXItem);\n\nexport { getAdapter, closeDeviceMotion, openDeviceMotion } from './orientation-plugin-loader';\nexport { OrientationAdapterAcceler } from './orientation-adapter-acceler';\n\nexport const version = __VERSION__;\n\nlogger.info('plugin orientation transformer version: ' + version);\n"],"names":["_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","value","writable","configurable","ver","adapter","OrientationComponent","ItemBehaviour","_proto","fromData","data","targets","content","options","map","t","name","xMin","yMin","xMax","yMax","vMin","hMin","vMax","hMax","start","_this_item_composition","_this_targets","transformer","item","composition","loaderData","deviceTransformer","forEach","target","addTarget","initComposition","update","dt","updateOrientation","onDestroy","_this_item_composition_loaderData_deviceTransformer","_this","removeTarget","TransformVFXItem","VFXItem","engine","props","component","addComponent","CompositionTransformerAcceler","records","currentPos","currentRot","gammaRange","betaRange","param","x","y","currentEvent","event","getOwnPropertyNames","moveLayer","items","i","length","position","transform","toArray","rotation","currentPosition","setPosition","setRotation","layer","_this_records_name","initPosition","initRotation","beta","clamp","gamma","min","max","br","gr","slice","range","getObjectType","obj","toString","call","angleLimit","angleObj","validRange","flagAlpha","flagBeta","flagGamma","alpha","referAlphaA","referAlphaB","_extends","assign","arguments","source","key","hasOwnProperty","apply","Filtering","lastValue","valuePool","stableFix","stableRange","Math","abs","changeLimit","result","linearRegressionMedian","fx","push","createLinearRegressionFx","values","index","linearRegression","n","sumX","sumY","sumXY","sumXX","sumYY","avgX","avgY","a","pow","sqrt","b","shift","useJSBridge","isIOS","str","navigator","userAgent","toLowerCase","match","parseInt","window","AlipayJSBridge","useWindVane","WindVane","defaultOptions","X","Y","interval","floor","useRequestAnimationFrame","relativeBeta","relativeGamma","DeviceOrientation","lastX","lastY","prevAcceler","z","stoped","deepMerge","args","isObject","isArray","prop","filterX","filterY","watch","callback","gammaFixed","betaFixed","watchListener","timefragment","nowts","referGamma","referBeta","handleWatch","e","isValid","requestAnimationFrame","switchWindVane","document","addEventListener","switchIOSEvent","Date","getTime","unWatch","assertExist","removeEventListener","undefined","pause","continue","open","monitorGyroscope","monitorAccelerometer","parseFloat","toFixed","on","frequency","console","info","error","JSON","stringify","OrientationAdapterAcceler","transformers","connected","accelerMotion","connect","dispatchMotion","disconnect","motion","addTransformer","includes","removeTransformer","indexOf","splice","OrientationPluginLoader","AbstractPlugin","order","handleConnect","closeManually","_this_adapter","handleDisconnect","onCompositionConstructed","getAdapter","bindAccelerDocumentEvent","onCompositionReset","onCompositionUpdate","onCompositionDestroyed","_this_adapter1","unbindAccelerDocumentEvent","dispose","registerPlugin","version","logger"],"mappings":"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"}