1 |
- {"ast":null,"code":"import { Vector3, Vector4 } from \"../Maths/math.vector.js\";\nimport { Color3, Color4 } from \"../Maths/math.color.js\";\nimport { Condition, ValueCondition } from \"./condition.js\";\nimport { Action } from \"./action.js\";\nimport { DoNothingAction } from \"./directActions.js\";\nimport { EngineStore } from \"../Engines/engineStore.js\";\nimport { Logger } from \"../Misc/logger.js\";\nimport { DeepCopier } from \"../Misc/deepCopier.js\";\nimport { GetClass } from \"../Misc/typeStore.js\";\nimport { AbstractActionManager } from \"./abstractActionManager.js\";\n\n/**\n * Action Manager manages all events to be triggered on a given mesh or the global scene.\n * A single scene can have many Action Managers to handle predefined actions on specific meshes.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions\n */\nexport class ActionManager extends AbstractActionManager {\n /**\n * Creates a new action manager\n * @param scene defines the hosting scene\n */\n constructor(scene) {\n super();\n scene = scene || EngineStore.LastCreatedScene;\n if (!scene) {\n return;\n }\n this._scene = scene;\n scene.actionManagers.push(this);\n }\n // Methods\n /**\n * Releases all associated resources\n */\n dispose() {\n const sceneIndex = this._scene.actionManagers.indexOf(this);\n for (let i = 0; i < this.actions.length; i++) {\n const action = this.actions[i];\n ActionManager.Triggers[action.trigger]--;\n if (ActionManager.Triggers[action.trigger] === 0) {\n delete ActionManager.Triggers[action.trigger];\n }\n }\n this.actions.length = 0;\n if (sceneIndex > -1) {\n this._scene.actionManagers.splice(sceneIndex, 1);\n }\n const ownerMeshes = this._scene.meshes.filter(m => m.actionManager === this);\n for (const ownerMesh of ownerMeshes) {\n ownerMesh.actionManager = null;\n }\n }\n /**\n * Gets hosting scene\n * @returns the hosting scene\n */\n getScene() {\n return this._scene;\n }\n /**\n * Does this action manager handles actions of any of the given triggers\n * @param triggers defines the triggers to be tested\n * @returns a boolean indicating whether one (or more) of the triggers is handled\n */\n hasSpecificTriggers(triggers) {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (triggers.indexOf(action.trigger) > -1) {\n return true;\n }\n }\n return false;\n }\n /**\n * Does this action manager handles actions of any of the given triggers. This function takes two arguments for\n * speed.\n * @param triggerA defines the trigger to be tested\n * @param triggerB defines the trigger to be tested\n * @returns a boolean indicating whether one (or more) of the triggers is handled\n */\n hasSpecificTriggers2(triggerA, triggerB) {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (triggerA == action.trigger || triggerB == action.trigger) {\n return true;\n }\n }\n return false;\n }\n /**\n * Does this action manager handles actions of a given trigger\n * @param trigger defines the trigger to be tested\n * @param parameterPredicate defines an optional predicate to filter triggers by parameter\n * @returns whether the trigger is handled\n */\n hasSpecificTrigger(trigger, parameterPredicate) {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (action.trigger === trigger) {\n if (parameterPredicate) {\n if (parameterPredicate(action.getTriggerParameter())) {\n return true;\n }\n } else {\n return true;\n }\n }\n }\n return false;\n }\n /**\n * Does this action manager has pointer triggers\n */\n get hasPointerTriggers() {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (action.trigger >= ActionManager.OnPickTrigger && action.trigger <= ActionManager.OnPointerOutTrigger) {\n return true;\n }\n }\n return false;\n }\n /**\n * Does this action manager has pick triggers\n */\n get hasPickTriggers() {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (action.trigger >= ActionManager.OnPickTrigger && action.trigger <= ActionManager.OnPickUpTrigger) {\n return true;\n }\n }\n return false;\n }\n /**\n * Registers an action to this action manager\n * @param action defines the action to be registered\n * @returns the action amended (prepared) after registration\n */\n registerAction(action) {\n if (action.trigger === ActionManager.OnEveryFrameTrigger) {\n if (this.getScene().actionManager !== this) {\n Logger.Warn(\"OnEveryFrameTrigger can only be used with scene.actionManager\");\n return null;\n }\n }\n this.actions.push(action);\n this.getScene()._registeredActions++;\n if (ActionManager.Triggers[action.trigger]) {\n ActionManager.Triggers[action.trigger]++;\n } else {\n ActionManager.Triggers[action.trigger] = 1;\n }\n action._actionManager = this;\n action._prepare();\n return action;\n }\n /**\n * Unregisters an action to this action manager\n * @param action defines the action to be unregistered\n * @returns a boolean indicating whether the action has been unregistered\n */\n unregisterAction(action) {\n const index = this.actions.indexOf(action);\n if (index !== -1) {\n this.actions.splice(index, 1);\n ActionManager.Triggers[action.trigger] -= 1;\n if (ActionManager.Triggers[action.trigger] === 0) {\n delete ActionManager.Triggers[action.trigger];\n }\n action._actionManager = null;\n this.getScene()._registeredActions--;\n return true;\n }\n return false;\n }\n /**\n * Process a specific trigger\n * @param trigger defines the trigger to process\n * @param evt defines the event details to be processed\n */\n processTrigger(trigger, evt) {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (action.trigger === trigger) {\n if (evt) {\n if (trigger === ActionManager.OnKeyUpTrigger || trigger === ActionManager.OnKeyDownTrigger) {\n const parameter = action.getTriggerParameter();\n if (typeof parameter === \"function\") {\n if (!parameter(evt)) {\n continue;\n }\n } else if (parameter && parameter !== evt.sourceEvent.keyCode) {\n if (!parameter.toLowerCase) {\n continue;\n }\n const lowerCase = parameter.toLowerCase();\n if (lowerCase !== evt.sourceEvent.key) {\n const unicode = evt.sourceEvent.charCode ? evt.sourceEvent.charCode : evt.sourceEvent.keyCode;\n const actualkey = String.fromCharCode(unicode).toLowerCase();\n if (actualkey !== lowerCase) {\n continue;\n }\n }\n }\n }\n }\n action._executeCurrent(evt);\n }\n }\n }\n /**\n * @internal\n */\n _getEffectiveTarget(target, propertyPath) {\n const properties = propertyPath.split(\".\");\n for (let index = 0; index < properties.length - 1; index++) {\n target = target[properties[index]];\n }\n return target;\n }\n /**\n * @internal\n */\n _getProperty(propertyPath) {\n const properties = propertyPath.split(\".\");\n return properties[properties.length - 1];\n }\n /**\n * Serialize this manager to a JSON object\n * @param name defines the property name to store this manager\n * @returns a JSON representation of this manager\n */\n serialize(name) {\n const root = {\n children: new Array(),\n name: name,\n type: 3,\n // Root node\n properties: new Array() // Empty for root but required\n };\n for (let i = 0; i < this.actions.length; i++) {\n const triggerObject = {\n type: 0,\n // Trigger\n children: new Array(),\n name: ActionManager.GetTriggerName(this.actions[i].trigger),\n properties: new Array()\n };\n const triggerOptions = this.actions[i].triggerOptions;\n if (triggerOptions && typeof triggerOptions !== \"number\") {\n if (triggerOptions.parameter instanceof Node) {\n triggerObject.properties.push(Action._GetTargetProperty(triggerOptions.parameter));\n } else if (typeof triggerOptions.parameter === \"object\") {\n const parameter = {};\n DeepCopier.DeepCopy(triggerOptions.parameter, parameter, [\"mesh\"]);\n if (triggerOptions.parameter && triggerOptions.parameter.mesh) {\n parameter._meshId = triggerOptions.parameter.mesh.id;\n }\n triggerObject.properties.push({\n name: \"parameter\",\n targetType: null,\n value: parameter\n });\n } else {\n triggerObject.properties.push({\n name: \"parameter\",\n targetType: null,\n value: triggerOptions.parameter\n });\n }\n }\n // Serialize child action, recursively\n this.actions[i].serialize(triggerObject);\n // Add serialized trigger\n root.children.push(triggerObject);\n }\n return root;\n }\n /**\n * Creates a new ActionManager from a JSON data\n * @param parsedActions defines the JSON data to read from\n * @param object defines the hosting mesh\n * @param scene defines the hosting scene\n */\n static Parse(parsedActions, object, scene) {\n const actionManager = new ActionManager(scene);\n if (object === null) {\n scene.actionManager = actionManager;\n } else {\n object.actionManager = actionManager;\n }\n // instantiate a new object\n const instantiate = (name, params) => {\n const internalClassType = GetClass(\"BABYLON.\" + name);\n return internalClassType && new internalClassType(...params);\n };\n const parseParameter = (name, value, target, propertyPath) => {\n if (propertyPath === null) {\n // String, boolean or float\n const floatValue = parseFloat(value);\n if (value === \"true\" || value === \"false\") {\n return value === \"true\";\n } else {\n return isNaN(floatValue) ? value : floatValue;\n }\n }\n const effectiveTarget = propertyPath.split(\".\");\n const values = value.split(\",\");\n // Get effective Target\n for (let i = 0; i < effectiveTarget.length; i++) {\n target = target[effectiveTarget[i]];\n }\n // Return appropriate value with its type\n if (typeof target === \"boolean\") {\n return values[0] === \"true\";\n }\n if (typeof target === \"string\") {\n return values[0];\n }\n // Parameters with multiple values such as Vector3 etc.\n const split = [];\n for (let i = 0; i < values.length; i++) {\n split.push(parseFloat(values[i]));\n }\n if (target instanceof Vector3) {\n return Vector3.FromArray(split);\n }\n if (target instanceof Vector4) {\n return Vector4.FromArray(split);\n }\n if (target instanceof Color3) {\n return Color3.FromArray(split);\n }\n if (target instanceof Color4) {\n return Color4.FromArray(split);\n }\n return parseFloat(values[0]);\n };\n // traverse graph per trigger\n const traverse = (parsedAction, trigger, condition, action, combineArray = null) => {\n if (parsedAction.detached) {\n return;\n }\n const parameters = [];\n let target = null;\n let propertyPath = null;\n const combine = parsedAction.combine && parsedAction.combine.length > 0;\n // Parameters\n if (parsedAction.type === 2) {\n parameters.push(actionManager);\n } else {\n parameters.push(trigger);\n }\n if (combine) {\n const actions = [];\n for (let j = 0; j < parsedAction.combine.length; j++) {\n traverse(parsedAction.combine[j], ActionManager.NothingTrigger, condition, action, actions);\n }\n parameters.push(actions);\n } else {\n for (let i = 0; i < parsedAction.properties.length; i++) {\n let value = parsedAction.properties[i].value;\n const name = parsedAction.properties[i].name;\n const targetType = parsedAction.properties[i].targetType;\n if (name === \"target\") {\n if (targetType === \"SceneProperties\") {\n value = target = scene;\n } else if (targetType === \"MaterialProperties\") {\n value = target = scene.getMaterialByName(value);\n } else {\n value = target = scene.getNodeByName(value);\n }\n } else if (name === \"parent\") {\n value = scene.getNodeByName(value);\n } else if (name === \"sound\") {\n // Can not externalize to component, so only checks for the presence off the API.\n if (scene.getSoundByName) {\n value = scene.getSoundByName(value);\n }\n } else if (name !== \"propertyPath\") {\n if (parsedAction.type === 2 && name === \"operator\") {\n value = ValueCondition[value];\n } else {\n value = parseParameter(name, value, target, name === \"value\" ? propertyPath : null);\n }\n } else {\n propertyPath = value;\n }\n parameters.push(value);\n }\n }\n if (combineArray === null) {\n parameters.push(condition);\n } else {\n parameters.push(null);\n }\n // If interpolate value action\n if (parsedAction.name === \"InterpolateValueAction\") {\n const param = parameters[parameters.length - 2];\n parameters[parameters.length - 1] = param;\n parameters[parameters.length - 2] = condition;\n }\n // Action or condition(s) and not CombineAction\n let newAction = instantiate(parsedAction.name, parameters);\n if (newAction instanceof Condition && condition !== null) {\n const nothing = new DoNothingAction(trigger, condition);\n if (action) {\n action.then(nothing);\n } else {\n actionManager.registerAction(nothing);\n }\n action = nothing;\n }\n if (combineArray === null) {\n if (newAction instanceof Condition) {\n condition = newAction;\n newAction = action;\n } else {\n condition = null;\n if (action) {\n action.then(newAction);\n } else {\n actionManager.registerAction(newAction);\n }\n }\n } else {\n combineArray.push(newAction);\n }\n for (let i = 0; i < parsedAction.children.length; i++) {\n traverse(parsedAction.children[i], trigger, condition, newAction, null);\n }\n };\n // triggers\n for (let i = 0; i < parsedActions.children.length; i++) {\n let triggerParams;\n const trigger = parsedActions.children[i];\n if (trigger.properties.length > 0) {\n const param = trigger.properties[0].value;\n const value = trigger.properties[0].targetType === null ? param : scene.getMeshByName(param);\n if (value._meshId) {\n value.mesh = scene.getMeshById(value._meshId);\n }\n triggerParams = {\n trigger: ActionManager[trigger.name],\n parameter: value\n };\n } else {\n triggerParams = ActionManager[trigger.name];\n }\n for (let j = 0; j < trigger.children.length; j++) {\n if (!trigger.detached) {\n traverse(trigger.children[j], triggerParams, null, null);\n }\n }\n }\n }\n /**\n * Get a trigger name by index\n * @param trigger defines the trigger index\n * @returns a trigger name\n */\n static GetTriggerName(trigger) {\n switch (trigger) {\n case 0:\n return \"NothingTrigger\";\n case 1:\n return \"OnPickTrigger\";\n case 2:\n return \"OnLeftPickTrigger\";\n case 3:\n return \"OnRightPickTrigger\";\n case 4:\n return \"OnCenterPickTrigger\";\n case 5:\n return \"OnPickDownTrigger\";\n case 6:\n return \"OnDoublePickTrigger\";\n // start;\n case 7:\n return \"OnPickUpTrigger\";\n case 8:\n return \"OnLongPressTrigger\";\n case 9:\n return \"OnPointerOverTrigger\";\n case 10:\n return \"OnPointerOutTrigger\";\n case 11:\n return \"OnEveryFrameTrigger\";\n case 12:\n return \"OnIntersectionEnterTrigger\";\n case 13:\n return \"OnIntersectionExitTrigger\";\n case 14:\n return \"OnKeyDownTrigger\";\n case 15:\n return \"OnKeyUpTrigger\";\n case 16:\n return \"OnPickOutTrigger\";\n default:\n return \"\";\n }\n }\n}\n/**\n * Nothing\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.NothingTrigger = 0;\n/**\n * On pick\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPickTrigger = 1;\n/**\n * On left pick\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnLeftPickTrigger = 2;\n/**\n * On right pick\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnRightPickTrigger = 3;\n/**\n * On center pick\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnCenterPickTrigger = 4;\n/**\n * On pick down\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPickDownTrigger = 5;\n/**\n * On double pick\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnDoublePickTrigger = 6;\n/**\n * On pick up\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPickUpTrigger = 7;\n/**\n * On pick out.\n * This trigger will only be raised if you also declared a OnPickDown\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPickOutTrigger = 16;\n/**\n * On long press\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnLongPressTrigger = 8;\n/**\n * On pointer over\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPointerOverTrigger = 9;\n/**\n * On pointer out\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPointerOutTrigger = 10;\n/**\n * On every frame\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnEveryFrameTrigger = 11;\n/**\n * On intersection enter\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnIntersectionEnterTrigger = 12;\n/**\n * On intersection exit\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnIntersectionExitTrigger = 13;\n/**\n * On key down\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnKeyDownTrigger = 14;\n/**\n * On key up\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnKeyUpTrigger = 15;","map":{"version":3,"names":["Vector3","Vector4","Color3","Color4","Condition","ValueCondition","Action","DoNothingAction","EngineStore","Logger","DeepCopier","GetClass","AbstractActionManager","ActionManager","constructor","scene","LastCreatedScene","_scene","actionManagers","push","dispose","sceneIndex","indexOf","i","actions","length","action","Triggers","trigger","splice","ownerMeshes","meshes","filter","m","actionManager","ownerMesh","getScene","hasSpecificTriggers","triggers","index","hasSpecificTriggers2","triggerA","triggerB","hasSpecificTrigger","parameterPredicate","getTriggerParameter","hasPointerTriggers","OnPickTrigger","OnPointerOutTrigger","hasPickTriggers","OnPickUpTrigger","registerAction","OnEveryFrameTrigger","Warn","_registeredActions","_actionManager","_prepare","unregisterAction","processTrigger","evt","OnKeyUpTrigger","OnKeyDownTrigger","parameter","sourceEvent","keyCode","toLowerCase","lowerCase","key","unicode","charCode","actualkey","String","fromCharCode","_executeCurrent","_getEffectiveTarget","target","propertyPath","properties","split","_getProperty","serialize","name","root","children","Array","type","triggerObject","GetTriggerName","triggerOptions","Node","_GetTargetProperty","DeepCopy","mesh","_meshId","id","targetType","value","Parse","parsedActions","object","instantiate","params","internalClassType","parseParameter","floatValue","parseFloat","isNaN","effectiveTarget","values","FromArray","traverse","parsedAction","condition","combineArray","detached","parameters","combine","j","NothingTrigger","getMaterialByName","getNodeByName","getSoundByName","param","newAction","nothing","then","triggerParams","getMeshByName","getMeshById","OnLeftPickTrigger","OnRightPickTrigger","OnCenterPickTrigger","OnPickDownTrigger","OnDoublePickTrigger","OnPickOutTrigger","OnLongPressTrigger","OnPointerOverTrigger","OnIntersectionEnterTrigger","OnIntersectionExitTrigger"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Actions/actionManager.js"],"sourcesContent":["import { Vector3, Vector4 } from \"../Maths/math.vector.js\";\nimport { Color3, Color4 } from \"../Maths/math.color.js\";\nimport { Condition, ValueCondition } from \"./condition.js\";\nimport { Action } from \"./action.js\";\nimport { DoNothingAction } from \"./directActions.js\";\nimport { EngineStore } from \"../Engines/engineStore.js\";\nimport { Logger } from \"../Misc/logger.js\";\nimport { DeepCopier } from \"../Misc/deepCopier.js\";\nimport { GetClass } from \"../Misc/typeStore.js\";\nimport { AbstractActionManager } from \"./abstractActionManager.js\";\n\n/**\n * Action Manager manages all events to be triggered on a given mesh or the global scene.\n * A single scene can have many Action Managers to handle predefined actions on specific meshes.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions\n */\nexport class ActionManager extends AbstractActionManager {\n /**\n * Creates a new action manager\n * @param scene defines the hosting scene\n */\n constructor(scene) {\n super();\n scene = scene || EngineStore.LastCreatedScene;\n if (!scene) {\n return;\n }\n this._scene = scene;\n scene.actionManagers.push(this);\n }\n // Methods\n /**\n * Releases all associated resources\n */\n dispose() {\n const sceneIndex = this._scene.actionManagers.indexOf(this);\n for (let i = 0; i < this.actions.length; i++) {\n const action = this.actions[i];\n ActionManager.Triggers[action.trigger]--;\n if (ActionManager.Triggers[action.trigger] === 0) {\n delete ActionManager.Triggers[action.trigger];\n }\n }\n this.actions.length = 0;\n if (sceneIndex > -1) {\n this._scene.actionManagers.splice(sceneIndex, 1);\n }\n const ownerMeshes = this._scene.meshes.filter((m) => m.actionManager === this);\n for (const ownerMesh of ownerMeshes) {\n ownerMesh.actionManager = null;\n }\n }\n /**\n * Gets hosting scene\n * @returns the hosting scene\n */\n getScene() {\n return this._scene;\n }\n /**\n * Does this action manager handles actions of any of the given triggers\n * @param triggers defines the triggers to be tested\n * @returns a boolean indicating whether one (or more) of the triggers is handled\n */\n hasSpecificTriggers(triggers) {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (triggers.indexOf(action.trigger) > -1) {\n return true;\n }\n }\n return false;\n }\n /**\n * Does this action manager handles actions of any of the given triggers. This function takes two arguments for\n * speed.\n * @param triggerA defines the trigger to be tested\n * @param triggerB defines the trigger to be tested\n * @returns a boolean indicating whether one (or more) of the triggers is handled\n */\n hasSpecificTriggers2(triggerA, triggerB) {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (triggerA == action.trigger || triggerB == action.trigger) {\n return true;\n }\n }\n return false;\n }\n /**\n * Does this action manager handles actions of a given trigger\n * @param trigger defines the trigger to be tested\n * @param parameterPredicate defines an optional predicate to filter triggers by parameter\n * @returns whether the trigger is handled\n */\n hasSpecificTrigger(trigger, parameterPredicate) {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (action.trigger === trigger) {\n if (parameterPredicate) {\n if (parameterPredicate(action.getTriggerParameter())) {\n return true;\n }\n }\n else {\n return true;\n }\n }\n }\n return false;\n }\n /**\n * Does this action manager has pointer triggers\n */\n get hasPointerTriggers() {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (action.trigger >= ActionManager.OnPickTrigger && action.trigger <= ActionManager.OnPointerOutTrigger) {\n return true;\n }\n }\n return false;\n }\n /**\n * Does this action manager has pick triggers\n */\n get hasPickTriggers() {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (action.trigger >= ActionManager.OnPickTrigger && action.trigger <= ActionManager.OnPickUpTrigger) {\n return true;\n }\n }\n return false;\n }\n /**\n * Registers an action to this action manager\n * @param action defines the action to be registered\n * @returns the action amended (prepared) after registration\n */\n registerAction(action) {\n if (action.trigger === ActionManager.OnEveryFrameTrigger) {\n if (this.getScene().actionManager !== this) {\n Logger.Warn(\"OnEveryFrameTrigger can only be used with scene.actionManager\");\n return null;\n }\n }\n this.actions.push(action);\n this.getScene()._registeredActions++;\n if (ActionManager.Triggers[action.trigger]) {\n ActionManager.Triggers[action.trigger]++;\n }\n else {\n ActionManager.Triggers[action.trigger] = 1;\n }\n action._actionManager = this;\n action._prepare();\n return action;\n }\n /**\n * Unregisters an action to this action manager\n * @param action defines the action to be unregistered\n * @returns a boolean indicating whether the action has been unregistered\n */\n unregisterAction(action) {\n const index = this.actions.indexOf(action);\n if (index !== -1) {\n this.actions.splice(index, 1);\n ActionManager.Triggers[action.trigger] -= 1;\n if (ActionManager.Triggers[action.trigger] === 0) {\n delete ActionManager.Triggers[action.trigger];\n }\n action._actionManager = null;\n this.getScene()._registeredActions--;\n return true;\n }\n return false;\n }\n /**\n * Process a specific trigger\n * @param trigger defines the trigger to process\n * @param evt defines the event details to be processed\n */\n processTrigger(trigger, evt) {\n for (let index = 0; index < this.actions.length; index++) {\n const action = this.actions[index];\n if (action.trigger === trigger) {\n if (evt) {\n if (trigger === ActionManager.OnKeyUpTrigger || trigger === ActionManager.OnKeyDownTrigger) {\n const parameter = action.getTriggerParameter();\n if (typeof parameter === \"function\") {\n if (!parameter(evt)) {\n continue;\n }\n }\n else if (parameter && parameter !== evt.sourceEvent.keyCode) {\n if (!parameter.toLowerCase) {\n continue;\n }\n const lowerCase = parameter.toLowerCase();\n if (lowerCase !== evt.sourceEvent.key) {\n const unicode = evt.sourceEvent.charCode ? evt.sourceEvent.charCode : evt.sourceEvent.keyCode;\n const actualkey = String.fromCharCode(unicode).toLowerCase();\n if (actualkey !== lowerCase) {\n continue;\n }\n }\n }\n }\n }\n action._executeCurrent(evt);\n }\n }\n }\n /**\n * @internal\n */\n _getEffectiveTarget(target, propertyPath) {\n const properties = propertyPath.split(\".\");\n for (let index = 0; index < properties.length - 1; index++) {\n target = target[properties[index]];\n }\n return target;\n }\n /**\n * @internal\n */\n _getProperty(propertyPath) {\n const properties = propertyPath.split(\".\");\n return properties[properties.length - 1];\n }\n /**\n * Serialize this manager to a JSON object\n * @param name defines the property name to store this manager\n * @returns a JSON representation of this manager\n */\n serialize(name) {\n const root = {\n children: new Array(),\n name: name,\n type: 3, // Root node\n properties: new Array(), // Empty for root but required\n };\n for (let i = 0; i < this.actions.length; i++) {\n const triggerObject = {\n type: 0, // Trigger\n children: new Array(),\n name: ActionManager.GetTriggerName(this.actions[i].trigger),\n properties: new Array(),\n };\n const triggerOptions = this.actions[i].triggerOptions;\n if (triggerOptions && typeof triggerOptions !== \"number\") {\n if (triggerOptions.parameter instanceof Node) {\n triggerObject.properties.push(Action._GetTargetProperty(triggerOptions.parameter));\n }\n else if (typeof triggerOptions.parameter === \"object\") {\n const parameter = {};\n DeepCopier.DeepCopy(triggerOptions.parameter, parameter, [\"mesh\"]);\n if (triggerOptions.parameter && triggerOptions.parameter.mesh) {\n parameter._meshId = triggerOptions.parameter.mesh.id;\n }\n triggerObject.properties.push({ name: \"parameter\", targetType: null, value: parameter });\n }\n else {\n triggerObject.properties.push({ name: \"parameter\", targetType: null, value: triggerOptions.parameter });\n }\n }\n // Serialize child action, recursively\n this.actions[i].serialize(triggerObject);\n // Add serialized trigger\n root.children.push(triggerObject);\n }\n return root;\n }\n /**\n * Creates a new ActionManager from a JSON data\n * @param parsedActions defines the JSON data to read from\n * @param object defines the hosting mesh\n * @param scene defines the hosting scene\n */\n static Parse(parsedActions, object, scene) {\n const actionManager = new ActionManager(scene);\n if (object === null) {\n scene.actionManager = actionManager;\n }\n else {\n object.actionManager = actionManager;\n }\n // instantiate a new object\n const instantiate = (name, params) => {\n const internalClassType = GetClass(\"BABYLON.\" + name);\n return internalClassType && new internalClassType(...params);\n };\n const parseParameter = (name, value, target, propertyPath) => {\n if (propertyPath === null) {\n // String, boolean or float\n const floatValue = parseFloat(value);\n if (value === \"true\" || value === \"false\") {\n return value === \"true\";\n }\n else {\n return isNaN(floatValue) ? value : floatValue;\n }\n }\n const effectiveTarget = propertyPath.split(\".\");\n const values = value.split(\",\");\n // Get effective Target\n for (let i = 0; i < effectiveTarget.length; i++) {\n target = target[effectiveTarget[i]];\n }\n // Return appropriate value with its type\n if (typeof target === \"boolean\") {\n return values[0] === \"true\";\n }\n if (typeof target === \"string\") {\n return values[0];\n }\n // Parameters with multiple values such as Vector3 etc.\n const split = [];\n for (let i = 0; i < values.length; i++) {\n split.push(parseFloat(values[i]));\n }\n if (target instanceof Vector3) {\n return Vector3.FromArray(split);\n }\n if (target instanceof Vector4) {\n return Vector4.FromArray(split);\n }\n if (target instanceof Color3) {\n return Color3.FromArray(split);\n }\n if (target instanceof Color4) {\n return Color4.FromArray(split);\n }\n return parseFloat(values[0]);\n };\n // traverse graph per trigger\n const traverse = (parsedAction, trigger, condition, action, combineArray = null) => {\n if (parsedAction.detached) {\n return;\n }\n const parameters = [];\n let target = null;\n let propertyPath = null;\n const combine = parsedAction.combine && parsedAction.combine.length > 0;\n // Parameters\n if (parsedAction.type === 2) {\n parameters.push(actionManager);\n }\n else {\n parameters.push(trigger);\n }\n if (combine) {\n const actions = [];\n for (let j = 0; j < parsedAction.combine.length; j++) {\n traverse(parsedAction.combine[j], ActionManager.NothingTrigger, condition, action, actions);\n }\n parameters.push(actions);\n }\n else {\n for (let i = 0; i < parsedAction.properties.length; i++) {\n let value = parsedAction.properties[i].value;\n const name = parsedAction.properties[i].name;\n const targetType = parsedAction.properties[i].targetType;\n if (name === \"target\") {\n if (targetType === \"SceneProperties\") {\n value = target = scene;\n }\n else if (targetType === \"MaterialProperties\") {\n value = target = scene.getMaterialByName(value);\n }\n else {\n value = target = scene.getNodeByName(value);\n }\n }\n else if (name === \"parent\") {\n value = scene.getNodeByName(value);\n }\n else if (name === \"sound\") {\n // Can not externalize to component, so only checks for the presence off the API.\n if (scene.getSoundByName) {\n value = scene.getSoundByName(value);\n }\n }\n else if (name !== \"propertyPath\") {\n if (parsedAction.type === 2 && name === \"operator\") {\n value = ValueCondition[value];\n }\n else {\n value = parseParameter(name, value, target, name === \"value\" ? propertyPath : null);\n }\n }\n else {\n propertyPath = value;\n }\n parameters.push(value);\n }\n }\n if (combineArray === null) {\n parameters.push(condition);\n }\n else {\n parameters.push(null);\n }\n // If interpolate value action\n if (parsedAction.name === \"InterpolateValueAction\") {\n const param = parameters[parameters.length - 2];\n parameters[parameters.length - 1] = param;\n parameters[parameters.length - 2] = condition;\n }\n // Action or condition(s) and not CombineAction\n let newAction = instantiate(parsedAction.name, parameters);\n if (newAction instanceof Condition && condition !== null) {\n const nothing = new DoNothingAction(trigger, condition);\n if (action) {\n action.then(nothing);\n }\n else {\n actionManager.registerAction(nothing);\n }\n action = nothing;\n }\n if (combineArray === null) {\n if (newAction instanceof Condition) {\n condition = newAction;\n newAction = action;\n }\n else {\n condition = null;\n if (action) {\n action.then(newAction);\n }\n else {\n actionManager.registerAction(newAction);\n }\n }\n }\n else {\n combineArray.push(newAction);\n }\n for (let i = 0; i < parsedAction.children.length; i++) {\n traverse(parsedAction.children[i], trigger, condition, newAction, null);\n }\n };\n // triggers\n for (let i = 0; i < parsedActions.children.length; i++) {\n let triggerParams;\n const trigger = parsedActions.children[i];\n if (trigger.properties.length > 0) {\n const param = trigger.properties[0].value;\n const value = trigger.properties[0].targetType === null ? param : scene.getMeshByName(param);\n if (value._meshId) {\n value.mesh = scene.getMeshById(value._meshId);\n }\n triggerParams = { trigger: ActionManager[trigger.name], parameter: value };\n }\n else {\n triggerParams = ActionManager[trigger.name];\n }\n for (let j = 0; j < trigger.children.length; j++) {\n if (!trigger.detached) {\n traverse(trigger.children[j], triggerParams, null, null);\n }\n }\n }\n }\n /**\n * Get a trigger name by index\n * @param trigger defines the trigger index\n * @returns a trigger name\n */\n static GetTriggerName(trigger) {\n switch (trigger) {\n case 0:\n return \"NothingTrigger\";\n case 1:\n return \"OnPickTrigger\";\n case 2:\n return \"OnLeftPickTrigger\";\n case 3:\n return \"OnRightPickTrigger\";\n case 4:\n return \"OnCenterPickTrigger\";\n case 5:\n return \"OnPickDownTrigger\";\n case 6:\n return \"OnDoublePickTrigger\"; // start;\n case 7:\n return \"OnPickUpTrigger\";\n case 8:\n return \"OnLongPressTrigger\";\n case 9:\n return \"OnPointerOverTrigger\";\n case 10:\n return \"OnPointerOutTrigger\";\n case 11:\n return \"OnEveryFrameTrigger\";\n case 12:\n return \"OnIntersectionEnterTrigger\";\n case 13:\n return \"OnIntersectionExitTrigger\";\n case 14:\n return \"OnKeyDownTrigger\";\n case 15:\n return \"OnKeyUpTrigger\";\n case 16:\n return \"OnPickOutTrigger\";\n default:\n return \"\";\n }\n }\n}\n/**\n * Nothing\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.NothingTrigger = 0;\n/**\n * On pick\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPickTrigger = 1;\n/**\n * On left pick\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnLeftPickTrigger = 2;\n/**\n * On right pick\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnRightPickTrigger = 3;\n/**\n * On center pick\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnCenterPickTrigger = 4;\n/**\n * On pick down\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPickDownTrigger = 5;\n/**\n * On double pick\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnDoublePickTrigger = 6;\n/**\n * On pick up\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPickUpTrigger = 7;\n/**\n * On pick out.\n * This trigger will only be raised if you also declared a OnPickDown\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPickOutTrigger = 16;\n/**\n * On long press\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnLongPressTrigger = 8;\n/**\n * On pointer over\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPointerOverTrigger = 9;\n/**\n * On pointer out\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnPointerOutTrigger = 10;\n/**\n * On every frame\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnEveryFrameTrigger = 11;\n/**\n * On intersection enter\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnIntersectionEnterTrigger = 12;\n/**\n * On intersection exit\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnIntersectionExitTrigger = 13;\n/**\n * On key down\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnKeyDownTrigger = 14;\n/**\n * On key up\n * @see https://doc.babylonjs.com/features/featuresDeepDive/events/actions#triggers\n */\nActionManager.OnKeyUpTrigger = 15;\n"],"mappings":"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C,aAAa,CAACoH,iBAAiB,GAAG,CAAC;AACnC;AACA;AACA;AACA;AACApH,aAAa,CAACqH,kBAAkB,GAAG,CAAC;AACpC;AACA;AACA;AACA;AACArH,aAAa,CAACsH,mBAAmB,GAAG,CAAC;AACrC;AACA;AACA;AACA;AACAtH,aAAa,CAACuH,iBAAiB,GAAG,CAAC;AACnC;AACA;AACA;AACA;AACAvH,aAAa,CAACwH,mBAAmB,GAAG,CAAC;AACrC;AACA;AACA;AACA;AACAxH,aAAa,CAACqC,eAAe,GAAG,CAAC;AACjC;AACA;AACA;AACA;AACA;AACArC,aAAa,CAACyH,gBAAgB,GAAG,EAAE;AACnC;AACA;AACA;AACA;AACAzH,aAAa,CAAC0H,kBAAkB,GAAG,CAAC;AACpC;AACA;AACA;AACA;AACA1H,aAAa,CAAC2H,oBAAoB,GAAG,CAAC;AACtC;AACA;AACA;AACA;AACA3H,aAAa,CAACmC,mBAAmB,GAAG,EAAE;AACtC;AACA;AACA;AACA;AACAnC,aAAa,CAACuC,mBAAmB,GAAG,EAAE;AACtC;AACA;AACA;AACA;AACAvC,aAAa,CAAC4H,0BAA0B,GAAG,EAAE;AAC7C;AACA;AACA;AACA;AACA5H,aAAa,CAAC6H,yBAAyB,GAAG,EAAE;AAC5C;AACA;AACA;AACA;AACA7H,aAAa,CAACgD,gBAAgB,GAAG,EAAE;AACnC;AACA;AACA;AACA;AACAhD,aAAa,CAAC+C,cAAc,GAAG,EAAE","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|