@galacean/effects-plugin-orientation-transformer 2.0.0-alpha.11 → 2.0.0-alpha.12
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/composition-transformer-acceler.d.ts +2 -6
- package/dist/index.js +103 -101
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +1 -1
- package/dist/index.mjs +104 -102
- package/dist/index.mjs.map +1 -1
- package/dist/orientation-adapter-acceler.d.ts +2 -0
- package/dist/transform-vfx-item.d.ts +0 -4
- package/dist/utils/filtering.d.ts +1 -1
- package/package.json +3 -3
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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/composition-transformer-acceler.ts","../src/utils/device.ts","../src/orientation-adapter-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/orientation-component.ts","../src/transform-vfx-item.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 { Composition, spec } from '@galacean/effects';\nimport type { AccelerMotionData } from './orientation-adapter-acceler';\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?: AccelerMotionData;\n\n constructor (\n private readonly composition: Composition,\n ) {\n }\n\n update ({ x, y, beta, gamma }: AccelerMotionData) {\n this.currentEvent = { x, y, beta, gamma };\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, beta: b, gamma: g }: AccelerMotionData) {\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(normalize(beta, this.gammaRange[0], this.gammaRange[1]), target.xMin, target.xMax),\n initPosition[1] + 1.2 * mapRange(normalize(gamma, this.betaRange[0], this.betaRange[1]), target.yMin, target.yMax),\n initPosition[2],\n ];\n\n const br = normalize(clamp(g * 0.8, this.gammaRange), this.gammaRange[0], this.gammaRange[1]);\n const gr = normalize(clamp(b * 0.8, this.betaRange), this.betaRange[0], this.betaRange[1]);\n\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 // console.log(y, initY, y - initY);\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\nfunction normalize (a: number, min: number, max: number) {\n return (a - min) / (max - min);\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 beta: number,\n gamma: 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, { beta, gamma }) => {\n const motion: AccelerMotionData = {\n x, y, beta, gamma,\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","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 public 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 // 初始化角度,作为单独一个用户的空间旋转的参照\n let referGamma = NaN, referBeta = NaN, referAlpha = NaN;\n let alpha: number;\n let beta: number;\n let gamma: number;\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\n isInValidDegRange = angleLimit.call(this, {\n alpha,\n beta,\n gamma,\n }, this.options.validRange);\n\n // 对 alpha beta gamma 初始化位置\n if (isNaN(referAlpha)) {\n referAlpha = alpha || 0;\n }\n if (isNaN(referGamma)) {\n referGamma = gamma;\n this.filterX.lastValue = gamma;\n }\n if (isNaN(referBeta)) {\n referBeta = beta;\n this.filterY.lastValue = beta;\n }\n if (isInValidDegRange) {\n // 最终结果值\n if (this.options.X) {\n x = this.options.relativeGamma ? gamma - referGamma : 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 y = this.options.relativeBeta ? beta - referBeta : 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\n if (this.isValid(x, y)) {\n if (this.options.useRequestAnimationFrame) {\n window.requestAnimationFrame(() => {\n callback(x, y, { alpha, beta: y - referBeta, gamma:x - referGamma });\n });\n } else {\n callback(x, y, { alpha, beta: y - referBeta, gamma:x - referGamma });\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 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\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 { 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","CompositionTransformerAcceler","composition","targets","records","currentPos","currentRot","gammaRange","betaRange","update","param","x","y","beta","gamma","currentEvent","updateOrientation","event","getOwnPropertyNames","forEach","name","_this","moveLayer","initComposition","items","i","length","item","position","transform","toArray","rotation","currentPosition","setPosition","setRotation","addTarget","target","removeTarget","_proto","layer","_this_records_name","initPosition","initRotation","clamp","min","t","a","max","xMin","xMax","yMin","yMax","br","g","gr","b","hMin","hMax","vMin","vMax","slice","range","getObjectType","obj","toString","call","angleLimit","angleObj","validRange","flagAlpha","flagBeta","flagGamma","alpha","referAlphaA","referAlphaB","_extends","assign","arguments","source","key","hasOwnProperty","apply","Filtering","options","lastValue","valuePool","stableFix","stableRange","Math","abs","changeLimit","result","linearRegressionMedian","fx","push","createLinearRegressionFx","values","index","linearRegression","n","sumX","sumY","sumXY","sumXX","sumYY","avgX","avgY","pow","sqrt","map","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","isInValidDegRange","watchListener","timefragment","nowts","referGamma","NaN","referBeta","handleWatch","e","isNaN","isValid","requestAnimationFrame","switchWindVane","document","addEventListener","switchIOSEvent","data","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","transformer","includes","removeTransformer","indexOf","splice","OrientationPluginLoader","AbstractPlugin","order","handleConnect","closeManually","_this_adapter","handleDisconnect","onCompositionConstructed","getAdapter","bindAccelerDocumentEvent","onCompositionReset","loaderData","deviceTransformer","onCompositionUpdate","onCompositionDestroyed","_this_adapter1","unbindAccelerDocumentEvent","dispose","OrientationComponent","ItemBehaviour","fromData","content","start","_this_item_composition","_this_targets","dt","onDestroy","_this_item_composition_loaderData_deviceTransformer","TransformVFXItem","VFXItem","engine","props","component","addComponent","registerPlugin","version","logger"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
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.
|
|
6
|
+
* Version: v2.0.0-alpha.12
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { isObject, isArray, assertExist, AbstractPlugin, ItemBehaviour, VFXItem, registerPlugin, logger } from '@galacean/effects';
|
|
10
10
|
|
|
11
11
|
function _set_prototype_of(o, p) {
|
|
12
12
|
_set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
|
|
@@ -30,75 +30,6 @@ function _inherits(subClass, superClass) {
|
|
|
30
30
|
if (superClass) _set_prototype_of(subClass, superClass);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
var OrientationComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
34
|
-
_inherits(OrientationComponent, ItemBehaviour);
|
|
35
|
-
function OrientationComponent() {
|
|
36
|
-
return ItemBehaviour.apply(this, arguments);
|
|
37
|
-
}
|
|
38
|
-
var _proto = OrientationComponent.prototype;
|
|
39
|
-
_proto.fromData = function fromData(data) {
|
|
40
|
-
ItemBehaviour.prototype.fromData.call(this, data);
|
|
41
|
-
var targets = data.content.options.targets;
|
|
42
|
-
if (targets) {
|
|
43
|
-
this.targets = targets.map(function(t) {
|
|
44
|
-
return {
|
|
45
|
-
name: t.name,
|
|
46
|
-
xMin: +t.xMin || 0,
|
|
47
|
-
yMin: +t.yMin || 0,
|
|
48
|
-
xMax: +t.xMax || 0,
|
|
49
|
-
yMax: +t.yMax || 0,
|
|
50
|
-
vMin: +t.vMin || 0,
|
|
51
|
-
hMin: +t.hMin || 0,
|
|
52
|
-
vMax: +t.vMax || 0,
|
|
53
|
-
hMax: +t.hMax || 0
|
|
54
|
-
};
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
_proto.start = function start() {
|
|
59
|
-
var _this_item_composition;
|
|
60
|
-
var transformer = (_this_item_composition = this.item.composition) == null ? void 0 : _this_item_composition.loaderData.deviceTransformer;
|
|
61
|
-
if (transformer) {
|
|
62
|
-
var _this_targets;
|
|
63
|
-
(_this_targets = this.targets) == null ? void 0 : _this_targets.forEach(function(target) {
|
|
64
|
-
return transformer.addTarget(target);
|
|
65
|
-
});
|
|
66
|
-
transformer.initComposition();
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
_proto.update = function update(dt) {
|
|
70
|
-
var _this_item_composition;
|
|
71
|
-
var transformer = (_this_item_composition = this.item.composition) == null ? void 0 : _this_item_composition.loaderData.deviceTransformer;
|
|
72
|
-
if (transformer) {
|
|
73
|
-
transformer.updateOrientation();
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
_proto.onDestroy = function onDestroy() {
|
|
77
|
-
var _this = this;
|
|
78
|
-
var _this_targets;
|
|
79
|
-
(_this_targets = this.targets) == null ? void 0 : _this_targets.forEach(function(target) {
|
|
80
|
-
var _this_item_composition_loaderData_deviceTransformer, _this_item_composition;
|
|
81
|
-
return (_this_item_composition = _this.item.composition) == null ? void 0 : (_this_item_composition_loaderData_deviceTransformer = _this_item_composition.loaderData.deviceTransformer) == null ? void 0 : _this_item_composition_loaderData_deviceTransformer.removeTarget(target.name);
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
return OrientationComponent;
|
|
85
|
-
}(ItemBehaviour);
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* 水平旋转变化起始角(手机处于改角度时无变化)
|
|
89
|
-
*/ var VERTICAL_INIT_DEGREE = 45;
|
|
90
|
-
var TransformVFXItem = /*#__PURE__*/ function(VFXItem) {
|
|
91
|
-
_inherits(TransformVFXItem, VFXItem);
|
|
92
|
-
function TransformVFXItem(engine, props) {
|
|
93
|
-
var _this;
|
|
94
|
-
_this = VFXItem.call(this, engine, props) || this;
|
|
95
|
-
var component = _this.addComponent(OrientationComponent);
|
|
96
|
-
component.fromData(props);
|
|
97
|
-
return _this;
|
|
98
|
-
}
|
|
99
|
-
return TransformVFXItem;
|
|
100
|
-
}(VFXItem);
|
|
101
|
-
|
|
102
33
|
var CompositionTransformerAcceler = /*#__PURE__*/ function() {
|
|
103
34
|
function CompositionTransformerAcceler(composition) {
|
|
104
35
|
this.composition = composition;
|
|
@@ -117,10 +48,12 @@ var CompositionTransformerAcceler = /*#__PURE__*/ function() {
|
|
|
117
48
|
}
|
|
118
49
|
var _proto = CompositionTransformerAcceler.prototype;
|
|
119
50
|
_proto.update = function update(param) {
|
|
120
|
-
var x = param.x, y = param.y;
|
|
51
|
+
var x = param.x, y = param.y, beta = param.beta, gamma = param.gamma;
|
|
121
52
|
this.currentEvent = {
|
|
122
53
|
x: x,
|
|
123
|
-
y: y
|
|
54
|
+
y: y,
|
|
55
|
+
beta: beta,
|
|
56
|
+
gamma: gamma
|
|
124
57
|
};
|
|
125
58
|
};
|
|
126
59
|
_proto.updateOrientation = function updateOrientation() {
|
|
@@ -164,7 +97,7 @@ var CompositionTransformerAcceler = /*#__PURE__*/ function() {
|
|
|
164
97
|
delete this.records[name];
|
|
165
98
|
};
|
|
166
99
|
_proto.moveLayer = function moveLayer(name, param) {
|
|
167
|
-
var x = param.x, y = param.y;
|
|
100
|
+
var x = param.x, y = param.y, b = param.beta, g = param.gamma;
|
|
168
101
|
var _this_records_name;
|
|
169
102
|
var layer = (_this_records_name = this.records[name]) == null ? void 0 : _this_records_name.item;
|
|
170
103
|
if (layer) {
|
|
@@ -173,14 +106,15 @@ var CompositionTransformerAcceler = /*#__PURE__*/ function() {
|
|
|
173
106
|
var target = this.targets[name];
|
|
174
107
|
var beta = clamp(x, this.betaRange), gamma = clamp(y, this.gammaRange);
|
|
175
108
|
if (target) {
|
|
176
|
-
var
|
|
109
|
+
var // console.log(y, initY, y - initY);
|
|
110
|
+
_layer_transform, _layer_transform1;
|
|
177
111
|
var position = [
|
|
178
|
-
initPosition[0] + 1.2 * mapRange((beta
|
|
179
|
-
initPosition[1] + 1.2 * mapRange((gamma
|
|
112
|
+
initPosition[0] + 1.2 * mapRange(normalize(beta, this.gammaRange[0], this.gammaRange[1]), target.xMin, target.xMax),
|
|
113
|
+
initPosition[1] + 1.2 * mapRange(normalize(gamma, this.betaRange[0], this.betaRange[1]), target.yMin, target.yMax),
|
|
180
114
|
initPosition[2]
|
|
181
115
|
];
|
|
182
|
-
var br = (clamp(
|
|
183
|
-
var gr = (clamp(
|
|
116
|
+
var br = normalize(clamp(g * 0.8, this.gammaRange), this.gammaRange[0], this.gammaRange[1]);
|
|
117
|
+
var gr = normalize(clamp(b * 0.8, this.betaRange), this.betaRange[0], this.betaRange[1]);
|
|
184
118
|
var rotation = [
|
|
185
119
|
initRotation[0] + mapRange(gr, target.hMin, target.hMax),
|
|
186
120
|
initRotation[1] + mapRange(br, target.vMin, target.vMax),
|
|
@@ -206,6 +140,9 @@ function clamp(x, range) {
|
|
|
206
140
|
function mapRange(t, min, max) {
|
|
207
141
|
return min + (max - min) * t;
|
|
208
142
|
}
|
|
143
|
+
function normalize(a, min, max) {
|
|
144
|
+
return (a - min) / (max - min);
|
|
145
|
+
}
|
|
209
146
|
|
|
210
147
|
function getObjectType(obj) {
|
|
211
148
|
return Object.prototype.toString.call(obj);
|
|
@@ -468,13 +405,11 @@ var DeviceOrientation = /*#__PURE__*/ function() {
|
|
|
468
405
|
}
|
|
469
406
|
var timefragment = 0; // 时间片计时
|
|
470
407
|
var nowts = 0; // 当前时间
|
|
471
|
-
|
|
472
|
-
var referBeta =
|
|
408
|
+
// 初始化角度,作为单独一个用户的空间旋转的参照
|
|
409
|
+
var referGamma = NaN, referBeta = NaN;
|
|
473
410
|
var alpha;
|
|
474
411
|
var beta;
|
|
475
412
|
var gamma;
|
|
476
|
-
var gammaFixed;
|
|
477
|
-
var betaFixed;
|
|
478
413
|
var isInValidDegRange;
|
|
479
414
|
var x; // 最终输出的 x
|
|
480
415
|
var y; // 最终输出的 y
|
|
@@ -485,23 +420,23 @@ var DeviceOrientation = /*#__PURE__*/ function() {
|
|
|
485
420
|
alpha = e.alpha; // 垂直于屏幕的轴 0 ~ 360
|
|
486
421
|
beta = e.beta; // 横向 X 轴 -180 ~ 180
|
|
487
422
|
gamma = e.gamma; // 纵向 Y 轴 -90 ~ 90
|
|
488
|
-
if (!referBeta) {
|
|
489
|
-
referBeta = beta || 0;
|
|
490
|
-
}
|
|
491
|
-
if (!referGamma) {
|
|
492
|
-
referGamma = gamma || 0;
|
|
493
|
-
}
|
|
494
|
-
//
|
|
495
423
|
isInValidDegRange = angleLimit.call(_this, {
|
|
496
424
|
alpha: alpha,
|
|
497
425
|
beta: beta,
|
|
498
426
|
gamma: gamma
|
|
499
427
|
}, _this.options.validRange);
|
|
428
|
+
if (isNaN(referGamma)) {
|
|
429
|
+
referGamma = gamma;
|
|
430
|
+
_this.filterX.lastValue = gamma;
|
|
431
|
+
}
|
|
432
|
+
if (isNaN(referBeta)) {
|
|
433
|
+
referBeta = beta;
|
|
434
|
+
_this.filterY.lastValue = beta;
|
|
435
|
+
}
|
|
500
436
|
if (isInValidDegRange) {
|
|
501
437
|
// 最终结果值
|
|
502
438
|
if (_this.options.X) {
|
|
503
|
-
|
|
504
|
-
x = _this.options.relativeGamma ? gammaFixed : gamma;
|
|
439
|
+
x = _this.options.relativeGamma ? gamma - referGamma : gamma;
|
|
505
440
|
x = _this.filterX.stableFix(x);
|
|
506
441
|
x = _this.filterX.changeLimit(x);
|
|
507
442
|
x = _this.filterX.linearRegressionMedian(+x);
|
|
@@ -509,9 +444,7 @@ var DeviceOrientation = /*#__PURE__*/ function() {
|
|
|
509
444
|
x = 0;
|
|
510
445
|
}
|
|
511
446
|
if (_this.options.Y) {
|
|
512
|
-
|
|
513
|
-
betaFixed = beta - referBeta;
|
|
514
|
-
y = _this.options.relativeBeta ? betaFixed : beta;
|
|
447
|
+
y = _this.options.relativeBeta ? beta - referBeta : beta;
|
|
515
448
|
y = _this.filterY.stableFix(y);
|
|
516
449
|
y = _this.filterY.changeLimit(y);
|
|
517
450
|
y = _this.filterY.linearRegressionMedian(+y);
|
|
@@ -523,15 +456,15 @@ var DeviceOrientation = /*#__PURE__*/ function() {
|
|
|
523
456
|
window.requestAnimationFrame(function() {
|
|
524
457
|
callback(x, y, {
|
|
525
458
|
alpha: alpha,
|
|
526
|
-
beta:
|
|
527
|
-
gamma:
|
|
459
|
+
beta: y - referBeta,
|
|
460
|
+
gamma: x - referGamma
|
|
528
461
|
});
|
|
529
462
|
});
|
|
530
463
|
} else {
|
|
531
464
|
callback(x, y, {
|
|
532
465
|
alpha: alpha,
|
|
533
|
-
beta:
|
|
534
|
-
gamma:
|
|
466
|
+
beta: y - referBeta,
|
|
467
|
+
gamma: x - referGamma
|
|
535
468
|
});
|
|
536
469
|
}
|
|
537
470
|
_this.lastX = x;
|
|
@@ -689,10 +622,13 @@ function switchWindVane(open, interval) {
|
|
|
689
622
|
validRange: this.validRange,
|
|
690
623
|
stableRange: 3
|
|
691
624
|
});
|
|
692
|
-
this.accelerMotion.watch(function(x, y) {
|
|
625
|
+
this.accelerMotion.watch(function(x, y, param) {
|
|
626
|
+
var beta = param.beta, gamma = param.gamma;
|
|
693
627
|
var motion = {
|
|
694
628
|
x: x,
|
|
695
|
-
y: y
|
|
629
|
+
y: y,
|
|
630
|
+
beta: beta,
|
|
631
|
+
gamma: gamma
|
|
696
632
|
};
|
|
697
633
|
_this.dispatchMotion(motion);
|
|
698
634
|
});
|
|
@@ -815,8 +751,74 @@ function openDeviceMotion() {
|
|
|
815
751
|
getAdapter().connect();
|
|
816
752
|
}
|
|
817
753
|
|
|
754
|
+
var OrientationComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
755
|
+
_inherits(OrientationComponent, ItemBehaviour);
|
|
756
|
+
function OrientationComponent() {
|
|
757
|
+
return ItemBehaviour.apply(this, arguments);
|
|
758
|
+
}
|
|
759
|
+
var _proto = OrientationComponent.prototype;
|
|
760
|
+
_proto.fromData = function fromData(data) {
|
|
761
|
+
ItemBehaviour.prototype.fromData.call(this, data);
|
|
762
|
+
var targets = data.content.options.targets;
|
|
763
|
+
if (targets) {
|
|
764
|
+
this.targets = targets.map(function(t) {
|
|
765
|
+
return {
|
|
766
|
+
name: t.name,
|
|
767
|
+
xMin: +t.xMin || 0,
|
|
768
|
+
yMin: +t.yMin || 0,
|
|
769
|
+
xMax: +t.xMax || 0,
|
|
770
|
+
yMax: +t.yMax || 0,
|
|
771
|
+
vMin: +t.vMin || 0,
|
|
772
|
+
hMin: +t.hMin || 0,
|
|
773
|
+
vMax: +t.vMax || 0,
|
|
774
|
+
hMax: +t.hMax || 0
|
|
775
|
+
};
|
|
776
|
+
});
|
|
777
|
+
}
|
|
778
|
+
};
|
|
779
|
+
_proto.start = function start() {
|
|
780
|
+
var _this_item_composition;
|
|
781
|
+
var transformer = (_this_item_composition = this.item.composition) == null ? void 0 : _this_item_composition.loaderData.deviceTransformer;
|
|
782
|
+
if (transformer) {
|
|
783
|
+
var _this_targets;
|
|
784
|
+
(_this_targets = this.targets) == null ? void 0 : _this_targets.forEach(function(target) {
|
|
785
|
+
return transformer.addTarget(target);
|
|
786
|
+
});
|
|
787
|
+
transformer.initComposition();
|
|
788
|
+
}
|
|
789
|
+
};
|
|
790
|
+
_proto.update = function update(dt) {
|
|
791
|
+
var _this_item_composition;
|
|
792
|
+
var transformer = (_this_item_composition = this.item.composition) == null ? void 0 : _this_item_composition.loaderData.deviceTransformer;
|
|
793
|
+
if (transformer) {
|
|
794
|
+
transformer.updateOrientation();
|
|
795
|
+
}
|
|
796
|
+
};
|
|
797
|
+
_proto.onDestroy = function onDestroy() {
|
|
798
|
+
var _this = this;
|
|
799
|
+
var _this_targets;
|
|
800
|
+
(_this_targets = this.targets) == null ? void 0 : _this_targets.forEach(function(target) {
|
|
801
|
+
var _this_item_composition_loaderData_deviceTransformer, _this_item_composition;
|
|
802
|
+
return (_this_item_composition = _this.item.composition) == null ? void 0 : (_this_item_composition_loaderData_deviceTransformer = _this_item_composition.loaderData.deviceTransformer) == null ? void 0 : _this_item_composition_loaderData_deviceTransformer.removeTarget(target.name);
|
|
803
|
+
});
|
|
804
|
+
};
|
|
805
|
+
return OrientationComponent;
|
|
806
|
+
}(ItemBehaviour);
|
|
807
|
+
|
|
808
|
+
var TransformVFXItem = /*#__PURE__*/ function(VFXItem) {
|
|
809
|
+
_inherits(TransformVFXItem, VFXItem);
|
|
810
|
+
function TransformVFXItem(engine, props) {
|
|
811
|
+
var _this;
|
|
812
|
+
_this = VFXItem.call(this, engine, props) || this;
|
|
813
|
+
var component = _this.addComponent(OrientationComponent);
|
|
814
|
+
component.fromData(props);
|
|
815
|
+
return _this;
|
|
816
|
+
}
|
|
817
|
+
return TransformVFXItem;
|
|
818
|
+
}(VFXItem);
|
|
819
|
+
|
|
818
820
|
registerPlugin("orientation-transformer", OrientationPluginLoader, TransformVFXItem);
|
|
819
|
-
var version = "2.0.0-alpha.
|
|
821
|
+
var version = "2.0.0-alpha.12";
|
|
820
822
|
logger.info("plugin orientation transformer version: " + version);
|
|
821
823
|
|
|
822
824
|
export { OrientationAdapterAcceler, closeDeviceMotion, getAdapter, openDeviceMotion, version };
|