@onerjs/core 8.45.2 → 8.45.4
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/Materials/Textures/Filtering/hdrFiltering.js +3 -0
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/index.d.ts +1 -0
- package/Materials/Textures/index.js +1 -0
- package/Materials/Textures/index.js.map +1 -1
- package/Materials/Textures/reflectionProbeTexture.d.ts +98 -0
- package/Materials/Textures/reflectionProbeTexture.js +217 -0
- package/Materials/Textures/reflectionProbeTexture.js.map +1 -0
- package/Materials/Textures/texture.d.ts +5 -0
- package/Materials/Textures/texture.js +10 -0
- package/Materials/Textures/texture.js.map +1 -1
- package/Misc/sceneSerializer.js +3 -1
- package/Misc/sceneSerializer.js.map +1 -1
- package/Physics/v2/characterController.d.ts +38 -0
- package/Physics/v2/characterController.js +131 -1
- package/Physics/v2/characterController.js.map +1 -1
- package/Probes/reflectionProbe.d.ts +4 -0
- package/Probes/reflectionProbe.js +4 -0
- package/Probes/reflectionProbe.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sceneSerializer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/sceneSerializer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Geometry } from \"../Meshes/geometry\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { MultiMaterial } from \"../Materials/multiMaterial\";\r\nimport type { Material } from \"../Materials/material\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Light } from \"../Lights/light\";\r\nimport { SerializationHelper } from \"./decorators.serialization\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { CubeTexture } from \"../Materials/Textures/cubeTexture\";\r\nimport type { Node } from \"../node\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\n\r\nlet SerializedGeometries: Geometry[] = [];\r\nconst SerializeGeometry = (geometry: Geometry, serializationGeometries: any): any => {\r\n if (geometry.doNotSerialize) {\r\n return;\r\n }\r\n\r\n serializationGeometries.vertexData.push(geometry.serializeVerticeData());\r\n\r\n (<any>SerializedGeometries)[geometry.id] = true;\r\n};\r\n\r\nconst SerializeMesh = (mesh: Mesh, serializationScene: any): any => {\r\n const serializationObject: any = {};\r\n\r\n // Geometry\r\n const geometry = mesh._geometry;\r\n if (geometry) {\r\n if (!mesh.getScene().getGeometryById(geometry.id)) {\r\n // Geometry was in the memory but not added to the scene, nevertheless it's better to serialize to be able to reload the mesh with its geometry\r\n SerializeGeometry(geometry, serializationScene.geometries);\r\n }\r\n }\r\n\r\n // Custom\r\n if (mesh.serialize) {\r\n mesh.serialize(serializationObject);\r\n }\r\n\r\n return serializationObject;\r\n};\r\n\r\nconst FinalizeSingleNode = (node: Node, serializationObject: any) => {\r\n if ((node as Mesh)._isMesh) {\r\n const mesh = node as Mesh;\r\n //only works if the mesh is already loaded\r\n if (mesh.delayLoadState === Constants.DELAYLOADSTATE_LOADED || mesh.delayLoadState === Constants.DELAYLOADSTATE_NONE) {\r\n const serializeMaterial = (material: Material) => {\r\n serializationObject.materials = serializationObject.materials || [];\r\n if (mesh.material && !serializationObject.materials.some((mat: Material) => mat.id === (<Material>mesh.material).id)) {\r\n serializationObject.materials.push(material.serialize());\r\n }\r\n };\r\n\r\n //serialize material\r\n if (mesh.material && !mesh.material.doNotSerialize) {\r\n if (mesh.material instanceof MultiMaterial) {\r\n serializationObject.multiMaterials = serializationObject.multiMaterials || [];\r\n if (!serializationObject.multiMaterials.some((mat: Material) => mat.id === (<Material>mesh.material).id)) {\r\n serializationObject.multiMaterials.push(mesh.material.serialize());\r\n for (const submaterial of mesh.material.subMaterials) {\r\n if (submaterial) {\r\n serializeMaterial(submaterial);\r\n }\r\n }\r\n }\r\n } else {\r\n serializeMaterial(mesh.material);\r\n }\r\n } else if (!mesh.material) {\r\n serializeMaterial(mesh.getScene().defaultMaterial);\r\n }\r\n\r\n //serialize geometry\r\n const geometry = mesh._geometry;\r\n if (geometry) {\r\n if (!serializationObject.geometries) {\r\n serializationObject.geometries = {};\r\n\r\n serializationObject.geometries.boxes = [];\r\n serializationObject.geometries.spheres = [];\r\n serializationObject.geometries.cylinders = [];\r\n serializationObject.geometries.toruses = [];\r\n serializationObject.geometries.grounds = [];\r\n serializationObject.geometries.planes = [];\r\n serializationObject.geometries.torusKnots = [];\r\n serializationObject.geometries.vertexData = [];\r\n }\r\n\r\n SerializeGeometry(geometry, serializationObject.geometries);\r\n }\r\n // Skeletons\r\n if (mesh.skeleton && !mesh.skeleton.doNotSerialize) {\r\n serializationObject.skeletons = serializationObject.skeletons || [];\r\n serializationObject.skeletons.push(mesh.skeleton.serialize());\r\n }\r\n\r\n //serialize the actual mesh\r\n serializationObject.meshes = serializationObject.meshes || [];\r\n serializationObject.meshes.push(SerializeMesh(mesh, serializationObject));\r\n }\r\n } else if (node.getClassName() === \"TransformNode\") {\r\n const transformNode = node as TransformNode;\r\n serializationObject.transformNodes.push(transformNode.serialize());\r\n } else if (node.getClassName().indexOf(\"Camera\") !== -1) {\r\n const camera = node as Camera;\r\n serializationObject.cameras.push(camera.serialize());\r\n } else if (node.getClassName().indexOf(\"Light\") !== -1) {\r\n const light = node as Light;\r\n serializationObject.lights.push(light.serialize());\r\n }\r\n};\r\n\r\n/**\r\n *SceneSerializerOptions\r\n */\r\nexport interface ISceneSerializerOptions {\r\n /**\r\n * User side serialization\r\n * @param serializationObject\r\n */\r\n customExtraSerialize?: (serializationObject: Record<string, any>) => void;\r\n /**\r\n * Decide if the mesh should be exported\r\n * @param mesh\r\n */\r\n shouldExportMesh?: (mesh: AbstractMesh) => boolean | void;\r\n /**\r\n * Decide if the geometry should be exported\r\n * @param geometry\r\n */\r\n shouldExportGeometry?: (geometry: Geometry) => boolean | void;\r\n /**\r\n * Decide if the transformNode should be exported\r\n * @param transformNode\r\n */\r\n shouldExportTransformNode?: (transformNode: TransformNode) => boolean | void;\r\n}\r\n\r\n/**\r\n * Class used to serialize a scene into a string\r\n */\r\nexport class SceneSerializer {\r\n /**\r\n * Clear cache used by a previous serialization\r\n */\r\n public static ClearCache(): void {\r\n SerializedGeometries = [];\r\n }\r\n\r\n /**\r\n * Serialize a scene into a JSON compatible object\r\n * Note that if the current engine does not support synchronous texture reading (like WebGPU), you should use SerializeAsync instead\r\n * as else you may not retrieve the proper base64 encoded texture data (when using the Texture.ForceSerializeBuffers flag)\r\n * @param scene defines the scene to serialize\r\n * @param options define the serializer options\r\n * @returns a JSON compatible object\r\n */\r\n public static Serialize(scene: Scene, options?: ISceneSerializerOptions): any {\r\n return SceneSerializer._Serialize(scene, true, options);\r\n }\r\n\r\n private static _Serialize(scene: Scene, checkSyncReadSupported = true, options?: ISceneSerializerOptions): any {\r\n const serializationObject: any = {};\r\n\r\n if (checkSyncReadSupported && !scene.getEngine()._features.supportSyncTextureRead && Texture.ForceSerializeBuffers) {\r\n Logger.Warn(\"The serialization object may not contain the proper base64 encoded texture data! You should use the SerializeAsync method instead.\");\r\n }\r\n\r\n SceneSerializer.ClearCache();\r\n\r\n // Scene\r\n serializationObject.useDelayedTextureLoading = scene.useDelayedTextureLoading;\r\n serializationObject.autoClear = scene.autoClear;\r\n serializationObject.clearColor = scene.clearColor.asArray();\r\n serializationObject.ambientColor = scene.ambientColor.asArray();\r\n serializationObject.gravity = scene.gravity.asArray();\r\n serializationObject.collisionsEnabled = scene.collisionsEnabled;\r\n serializationObject.useRightHandedSystem = scene.useRightHandedSystem;\r\n\r\n // Fog\r\n if (scene.fogMode !== undefined && scene.fogMode !== null) {\r\n serializationObject.fogMode = scene.fogMode;\r\n }\r\n if (scene.fogColor !== undefined && scene.fogColor !== null) {\r\n serializationObject.fogColor = scene.fogColor.asArray();\r\n }\r\n if (scene.fogStart !== undefined && scene.fogStart !== null) {\r\n serializationObject.fogStart = scene.fogStart;\r\n }\r\n if (scene.fogEnd !== undefined && scene.fogEnd !== null) {\r\n serializationObject.fogEnd = scene.fogEnd;\r\n }\r\n if (scene.fogDensity !== undefined && scene.fogDensity !== null) {\r\n serializationObject.fogDensity = scene.fogDensity;\r\n }\r\n\r\n //Physics\r\n if (scene.isPhysicsEnabled && scene.isPhysicsEnabled()) {\r\n const physicEngine = scene.getPhysicsEngine();\r\n\r\n if (physicEngine) {\r\n serializationObject.physicsEnabled = true;\r\n serializationObject.physicsGravity = physicEngine.gravity.asArray();\r\n serializationObject.physicsEngine = physicEngine.getPhysicsPluginName();\r\n }\r\n }\r\n\r\n // Metadata\r\n if (scene.metadata) {\r\n serializationObject.metadata = scene.metadata;\r\n }\r\n\r\n // Morph targets\r\n serializationObject.morphTargetManagers = [];\r\n for (const abstractMesh of scene.meshes) {\r\n const manager = (<Mesh>abstractMesh).morphTargetManager;\r\n\r\n if (manager) {\r\n serializationObject.morphTargetManagers.push(manager.serialize());\r\n }\r\n }\r\n\r\n // Lights\r\n serializationObject.lights = [];\r\n let index: number;\r\n let light: Light;\r\n for (index = 0; index < scene.lights.length; index++) {\r\n light = scene.lights[index];\r\n\r\n if (!light.doNotSerialize) {\r\n serializationObject.lights.push(light.serialize());\r\n }\r\n }\r\n\r\n // Cameras\r\n serializationObject.cameras = [];\r\n for (index = 0; index < scene.cameras.length; index++) {\r\n const camera = scene.cameras[index];\r\n\r\n if (!camera.doNotSerialize) {\r\n serializationObject.cameras.push(camera.serialize());\r\n }\r\n }\r\n\r\n if (scene.activeCamera) {\r\n serializationObject.activeCameraID = scene.activeCamera.id;\r\n }\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(scene, serializationObject);\r\n\r\n // Animation Groups\r\n if (scene.animationGroups && scene.animationGroups.length > 0) {\r\n serializationObject.animationGroups = [];\r\n for (let animationGroupIndex = 0; animationGroupIndex < scene.animationGroups.length; animationGroupIndex++) {\r\n const animationGroup = scene.animationGroups[animationGroupIndex];\r\n if (!animationGroup.doNotSerialize) {\r\n serializationObject.animationGroups.push(animationGroup.serialize());\r\n }\r\n }\r\n }\r\n\r\n // Reflection probes\r\n if (scene.reflectionProbes && scene.reflectionProbes.length > 0) {\r\n serializationObject.reflectionProbes = [];\r\n\r\n for (index = 0; index < scene.reflectionProbes.length; index++) {\r\n const reflectionProbe = scene.reflectionProbes[index];\r\n serializationObject.reflectionProbes.push(reflectionProbe.serialize());\r\n }\r\n }\r\n\r\n // Materials\r\n serializationObject.materials = [];\r\n serializationObject.multiMaterials = [];\r\n let material: Material;\r\n for (index = 0; index < scene.materials.length; index++) {\r\n material = scene.materials[index];\r\n if (!material.doNotSerialize) {\r\n serializationObject.materials.push(material.serialize());\r\n }\r\n }\r\n\r\n // MultiMaterials\r\n serializationObject.multiMaterials = [];\r\n for (index = 0; index < scene.multiMaterials.length; index++) {\r\n const multiMaterial = scene.multiMaterials[index];\r\n if (!multiMaterial.doNotSerialize) {\r\n serializationObject.multiMaterials.push(multiMaterial.serialize());\r\n }\r\n }\r\n\r\n // Environment texture\r\n if (scene.environmentTexture) {\r\n if ((scene.environmentTexture as CubeTexture)._files) {\r\n serializationObject.environmentTexture = scene.environmentTexture.serialize();\r\n } else {\r\n serializationObject.environmentTexture = scene.environmentTexture.name;\r\n serializationObject.environmentTextureRotationY = (scene.environmentTexture as CubeTexture).rotationY;\r\n }\r\n }\r\n\r\n // Environment Intensity\r\n serializationObject.environmentIntensity = scene.environmentIntensity;\r\n\r\n // IBL Intensity\r\n serializationObject.iblIntensity = scene.iblIntensity;\r\n\r\n // Skeletons\r\n serializationObject.skeletons = [];\r\n for (index = 0; index < scene.skeletons.length; index++) {\r\n const skeleton = scene.skeletons[index];\r\n if (!skeleton.doNotSerialize) {\r\n serializationObject.skeletons.push(skeleton.serialize());\r\n }\r\n }\r\n\r\n // Transform nodes\r\n serializationObject.transformNodes = [];\r\n for (index = 0; index < scene.transformNodes.length; index++) {\r\n if (!scene.transformNodes[index].doNotSerialize) {\r\n if (options?.shouldExportTransformNode && !options.shouldExportTransformNode(scene.transformNodes[index])) {\r\n continue;\r\n }\r\n serializationObject.transformNodes.push(scene.transformNodes[index].serialize());\r\n }\r\n }\r\n\r\n // Geometries\r\n serializationObject.geometries = {};\r\n\r\n serializationObject.geometries.boxes = [];\r\n serializationObject.geometries.spheres = [];\r\n serializationObject.geometries.cylinders = [];\r\n serializationObject.geometries.toruses = [];\r\n serializationObject.geometries.grounds = [];\r\n serializationObject.geometries.planes = [];\r\n serializationObject.geometries.torusKnots = [];\r\n serializationObject.geometries.vertexData = [];\r\n\r\n SerializedGeometries = [];\r\n const geometries = scene.getGeometries();\r\n for (index = 0; index < geometries.length; index++) {\r\n const geometry = geometries[index];\r\n\r\n if (geometry.isReady()) {\r\n if (options?.shouldExportGeometry && !options.shouldExportGeometry(geometry)) {\r\n continue;\r\n }\r\n SerializeGeometry(geometry, serializationObject.geometries);\r\n }\r\n }\r\n\r\n // Meshes\r\n serializationObject.meshes = [];\r\n for (index = 0; index < scene.meshes.length; index++) {\r\n const abstractMesh = scene.meshes[index];\r\n\r\n if (abstractMesh instanceof Mesh) {\r\n const mesh = abstractMesh;\r\n if (!mesh.doNotSerialize) {\r\n if (mesh.delayLoadState === Constants.DELAYLOADSTATE_LOADED || mesh.delayLoadState === Constants.DELAYLOADSTATE_NONE) {\r\n if (options?.shouldExportMesh && !options.shouldExportMesh(mesh)) {\r\n continue;\r\n }\r\n serializationObject.meshes.push(SerializeMesh(mesh, serializationObject));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Particles Systems\r\n serializationObject.particleSystems = [];\r\n for (index = 0; index < scene.particleSystems.length; index++) {\r\n const particleSystem = scene.particleSystems[index];\r\n if (!particleSystem.doNotSerialize) {\r\n serializationObject.particleSystems.push(particleSystem.serialize(false));\r\n }\r\n }\r\n\r\n // Post processes\r\n serializationObject.postProcesses = [];\r\n for (index = 0; index < scene.postProcesses.length; index++) {\r\n const postProcess = scene.postProcesses[index];\r\n if (!postProcess.doNotSerialize) {\r\n serializationObject.postProcesses.push(postProcess.serialize());\r\n }\r\n }\r\n\r\n // Action Manager\r\n if (scene.actionManager) {\r\n serializationObject.actions = scene.actionManager.serialize(\"scene\");\r\n }\r\n\r\n // Components\r\n for (const component of scene._serializableComponents) {\r\n component.serialize(serializationObject);\r\n }\r\n\r\n // Sprites\r\n if (scene.spriteManagers) {\r\n serializationObject.spriteManagers = [];\r\n for (index = 0; index < scene.spriteManagers.length; index++) {\r\n const spriteManager = scene.spriteManagers[index];\r\n if (!spriteManager.doNotSerialize) {\r\n serializationObject.spriteManagers.push(spriteManager.serialize(true));\r\n }\r\n }\r\n }\r\n\r\n if (options?.customExtraSerialize) {\r\n options.customExtraSerialize(serializationObject);\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Serialize a scene into a JSON compatible object\r\n * @param scene defines the scene to serialize\r\n * @param options define the serializer options\r\n * @returns a JSON promise compatible object\r\n */\r\n public static async SerializeAsync(scene: Scene, options?: ISceneSerializerOptions): Promise<any> {\r\n const serializationObject = SceneSerializer._Serialize(scene, false, options);\r\n\r\n const promises: Array<Promise<any>> = [];\r\n\r\n this._CollectPromises(serializationObject, promises);\r\n\r\n await Promise.all(promises);\r\n return serializationObject;\r\n }\r\n\r\n private static _CollectPromises(obj: any, promises: Array<Promise<any>>): void {\r\n if (Array.isArray(obj)) {\r\n for (let i = 0; i < obj.length; ++i) {\r\n const o = obj[i];\r\n if (o instanceof Promise) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, github/no-then\r\n promises.push(o.then((res: any) => (obj[i] = res)));\r\n } else if (o instanceof Object || Array.isArray(o)) {\r\n this._CollectPromises(o, promises);\r\n }\r\n }\r\n } else if (obj instanceof Object) {\r\n for (const name in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, name)) {\r\n const o = obj[name];\r\n if (o instanceof Promise) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, github/no-then\r\n promises.push(o.then((res: any) => (obj[name] = res)));\r\n } else if (o instanceof Object || Array.isArray(o)) {\r\n this._CollectPromises(o, promises);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Serialize a mesh into a JSON compatible object\r\n * @param toSerialize defines the mesh to serialize\r\n * @param withParents defines if parents must be serialized as well\r\n * @param withChildren defines if children must be serialized as well\r\n * @returns a JSON compatible object\r\n */\r\n public static SerializeMesh(toSerialize: any /* Mesh || Mesh[] */, withParents: boolean = false, withChildren: boolean = false): any {\r\n const serializationObject: any = {};\r\n serializationObject.meshes = [];\r\n serializationObject.transformNodes = [];\r\n serializationObject.cameras = [];\r\n serializationObject.lights = [];\r\n\r\n SceneSerializer.ClearCache();\r\n\r\n toSerialize = toSerialize instanceof Array ? toSerialize : [toSerialize];\r\n\r\n if (withParents || withChildren) {\r\n //deliberate for loop! not for each, appended should be processed as well.\r\n for (let i = 0; i < toSerialize.length; ++i) {\r\n if (withChildren) {\r\n const descendants = toSerialize[i].getDescendants();\r\n for (const node of descendants) {\r\n if (toSerialize.indexOf(node) < 0 && !node.doNotSerialize) {\r\n toSerialize.push(node);\r\n }\r\n }\r\n }\r\n //make sure the array doesn't contain the object already\r\n if (withParents && toSerialize[i].parent && toSerialize.indexOf(toSerialize[i].parent) < 0 && !toSerialize[i].parent.doNotSerialize) {\r\n toSerialize.push(toSerialize[i].parent);\r\n }\r\n }\r\n }\r\n\r\n for (const mesh of toSerialize) {\r\n FinalizeSingleNode(mesh, serializationObject);\r\n }\r\n\r\n return serializationObject;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"sceneSerializer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/sceneSerializer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Geometry } from \"../Meshes/geometry\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { MultiMaterial } from \"../Materials/multiMaterial\";\r\nimport type { Material } from \"../Materials/material\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Light } from \"../Lights/light\";\r\nimport { SerializationHelper } from \"./decorators.serialization\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { CubeTexture } from \"../Materials/Textures/cubeTexture\";\r\nimport type { Node } from \"../node\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\n\r\nlet SerializedGeometries: Geometry[] = [];\r\nconst SerializeGeometry = (geometry: Geometry, serializationGeometries: any): any => {\r\n if (geometry.doNotSerialize) {\r\n return;\r\n }\r\n\r\n serializationGeometries.vertexData.push(geometry.serializeVerticeData());\r\n\r\n (<any>SerializedGeometries)[geometry.id] = true;\r\n};\r\n\r\nconst SerializeMesh = (mesh: Mesh, serializationScene: any): any => {\r\n const serializationObject: any = {};\r\n\r\n // Geometry\r\n const geometry = mesh._geometry;\r\n if (geometry) {\r\n if (!mesh.getScene().getGeometryById(geometry.id)) {\r\n // Geometry was in the memory but not added to the scene, nevertheless it's better to serialize to be able to reload the mesh with its geometry\r\n SerializeGeometry(geometry, serializationScene.geometries);\r\n }\r\n }\r\n\r\n // Custom\r\n if (mesh.serialize) {\r\n mesh.serialize(serializationObject);\r\n }\r\n\r\n return serializationObject;\r\n};\r\n\r\nconst FinalizeSingleNode = (node: Node, serializationObject: any) => {\r\n if ((node as Mesh)._isMesh) {\r\n const mesh = node as Mesh;\r\n //only works if the mesh is already loaded\r\n if (mesh.delayLoadState === Constants.DELAYLOADSTATE_LOADED || mesh.delayLoadState === Constants.DELAYLOADSTATE_NONE) {\r\n const serializeMaterial = (material: Material) => {\r\n serializationObject.materials = serializationObject.materials || [];\r\n if (mesh.material && !serializationObject.materials.some((mat: Material) => mat.id === (<Material>mesh.material).id)) {\r\n serializationObject.materials.push(material.serialize());\r\n }\r\n };\r\n\r\n //serialize material\r\n if (mesh.material && !mesh.material.doNotSerialize) {\r\n if (mesh.material instanceof MultiMaterial) {\r\n serializationObject.multiMaterials = serializationObject.multiMaterials || [];\r\n if (!serializationObject.multiMaterials.some((mat: Material) => mat.id === (<Material>mesh.material).id)) {\r\n serializationObject.multiMaterials.push(mesh.material.serialize());\r\n for (const submaterial of mesh.material.subMaterials) {\r\n if (submaterial) {\r\n serializeMaterial(submaterial);\r\n }\r\n }\r\n }\r\n } else {\r\n serializeMaterial(mesh.material);\r\n }\r\n } else if (!mesh.material) {\r\n serializeMaterial(mesh.getScene().defaultMaterial);\r\n }\r\n\r\n //serialize geometry\r\n const geometry = mesh._geometry;\r\n if (geometry) {\r\n if (!serializationObject.geometries) {\r\n serializationObject.geometries = {};\r\n\r\n serializationObject.geometries.boxes = [];\r\n serializationObject.geometries.spheres = [];\r\n serializationObject.geometries.cylinders = [];\r\n serializationObject.geometries.toruses = [];\r\n serializationObject.geometries.grounds = [];\r\n serializationObject.geometries.planes = [];\r\n serializationObject.geometries.torusKnots = [];\r\n serializationObject.geometries.vertexData = [];\r\n }\r\n\r\n SerializeGeometry(geometry, serializationObject.geometries);\r\n }\r\n // Skeletons\r\n if (mesh.skeleton && !mesh.skeleton.doNotSerialize) {\r\n serializationObject.skeletons = serializationObject.skeletons || [];\r\n serializationObject.skeletons.push(mesh.skeleton.serialize());\r\n }\r\n\r\n //serialize the actual mesh\r\n serializationObject.meshes = serializationObject.meshes || [];\r\n serializationObject.meshes.push(SerializeMesh(mesh, serializationObject));\r\n }\r\n } else if (node.getClassName() === \"TransformNode\") {\r\n const transformNode = node as TransformNode;\r\n serializationObject.transformNodes.push(transformNode.serialize());\r\n } else if (node.getClassName().indexOf(\"Camera\") !== -1) {\r\n const camera = node as Camera;\r\n serializationObject.cameras.push(camera.serialize());\r\n } else if (node.getClassName().indexOf(\"Light\") !== -1) {\r\n const light = node as Light;\r\n serializationObject.lights.push(light.serialize());\r\n }\r\n};\r\n\r\n/**\r\n *SceneSerializerOptions\r\n */\r\nexport interface ISceneSerializerOptions {\r\n /**\r\n * User side serialization\r\n * @param serializationObject\r\n */\r\n customExtraSerialize?: (serializationObject: Record<string, any>) => void;\r\n /**\r\n * Decide if the mesh should be exported\r\n * @param mesh\r\n */\r\n shouldExportMesh?: (mesh: AbstractMesh) => boolean | void;\r\n /**\r\n * Decide if the geometry should be exported\r\n * @param geometry\r\n */\r\n shouldExportGeometry?: (geometry: Geometry) => boolean | void;\r\n /**\r\n * Decide if the transformNode should be exported\r\n * @param transformNode\r\n */\r\n shouldExportTransformNode?: (transformNode: TransformNode) => boolean | void;\r\n}\r\n\r\n/**\r\n * Class used to serialize a scene into a string\r\n */\r\nexport class SceneSerializer {\r\n /**\r\n * Clear cache used by a previous serialization\r\n */\r\n public static ClearCache(): void {\r\n SerializedGeometries = [];\r\n }\r\n\r\n /**\r\n * Serialize a scene into a JSON compatible object\r\n * Note that if the current engine does not support synchronous texture reading (like WebGPU), you should use SerializeAsync instead\r\n * as else you may not retrieve the proper base64 encoded texture data (when using the Texture.ForceSerializeBuffers flag)\r\n * @param scene defines the scene to serialize\r\n * @param options define the serializer options\r\n * @returns a JSON compatible object\r\n */\r\n public static Serialize(scene: Scene, options?: ISceneSerializerOptions): any {\r\n return SceneSerializer._Serialize(scene, true, options);\r\n }\r\n\r\n private static _Serialize(scene: Scene, checkSyncReadSupported = true, options?: ISceneSerializerOptions): any {\r\n const serializationObject: any = {};\r\n\r\n if (checkSyncReadSupported && !scene.getEngine()._features.supportSyncTextureRead && Texture.ForceSerializeBuffers) {\r\n Logger.Warn(\"The serialization object may not contain the proper base64 encoded texture data! You should use the SerializeAsync method instead.\");\r\n }\r\n\r\n SceneSerializer.ClearCache();\r\n\r\n // Scene\r\n serializationObject.useDelayedTextureLoading = scene.useDelayedTextureLoading;\r\n serializationObject.autoClear = scene.autoClear;\r\n serializationObject.clearColor = scene.clearColor.asArray();\r\n serializationObject.ambientColor = scene.ambientColor.asArray();\r\n serializationObject.gravity = scene.gravity.asArray();\r\n serializationObject.collisionsEnabled = scene.collisionsEnabled;\r\n serializationObject.useRightHandedSystem = scene.useRightHandedSystem;\r\n\r\n // Fog\r\n if (scene.fogMode !== undefined && scene.fogMode !== null) {\r\n serializationObject.fogMode = scene.fogMode;\r\n }\r\n if (scene.fogColor !== undefined && scene.fogColor !== null) {\r\n serializationObject.fogColor = scene.fogColor.asArray();\r\n }\r\n if (scene.fogStart !== undefined && scene.fogStart !== null) {\r\n serializationObject.fogStart = scene.fogStart;\r\n }\r\n if (scene.fogEnd !== undefined && scene.fogEnd !== null) {\r\n serializationObject.fogEnd = scene.fogEnd;\r\n }\r\n if (scene.fogDensity !== undefined && scene.fogDensity !== null) {\r\n serializationObject.fogDensity = scene.fogDensity;\r\n }\r\n\r\n //Physics\r\n if (scene.isPhysicsEnabled && scene.isPhysicsEnabled()) {\r\n const physicEngine = scene.getPhysicsEngine();\r\n\r\n if (physicEngine) {\r\n serializationObject.physicsEnabled = true;\r\n serializationObject.physicsGravity = physicEngine.gravity.asArray();\r\n serializationObject.physicsEngine = physicEngine.getPhysicsPluginName();\r\n }\r\n }\r\n\r\n // Metadata\r\n if (scene.metadata) {\r\n serializationObject.metadata = scene.metadata;\r\n }\r\n\r\n // Morph targets\r\n serializationObject.morphTargetManagers = [];\r\n for (const abstractMesh of scene.meshes) {\r\n const manager = (<Mesh>abstractMesh).morphTargetManager;\r\n\r\n if (manager) {\r\n serializationObject.morphTargetManagers.push(manager.serialize());\r\n }\r\n }\r\n\r\n // Lights\r\n serializationObject.lights = [];\r\n let index: number;\r\n let light: Light;\r\n for (index = 0; index < scene.lights.length; index++) {\r\n light = scene.lights[index];\r\n\r\n if (!light.doNotSerialize) {\r\n serializationObject.lights.push(light.serialize());\r\n }\r\n }\r\n\r\n // Cameras\r\n serializationObject.cameras = [];\r\n for (index = 0; index < scene.cameras.length; index++) {\r\n const camera = scene.cameras[index];\r\n\r\n if (!camera.doNotSerialize) {\r\n serializationObject.cameras.push(camera.serialize());\r\n }\r\n }\r\n\r\n if (scene.activeCamera) {\r\n serializationObject.activeCameraID = scene.activeCamera.id;\r\n }\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(scene, serializationObject);\r\n\r\n // Animation Groups\r\n if (scene.animationGroups && scene.animationGroups.length > 0) {\r\n serializationObject.animationGroups = [];\r\n for (let animationGroupIndex = 0; animationGroupIndex < scene.animationGroups.length; animationGroupIndex++) {\r\n const animationGroup = scene.animationGroups[animationGroupIndex];\r\n if (!animationGroup.doNotSerialize) {\r\n serializationObject.animationGroups.push(animationGroup.serialize());\r\n }\r\n }\r\n }\r\n\r\n // Reflection probes\r\n if (scene.reflectionProbes && scene.reflectionProbes.length > 0) {\r\n serializationObject.reflectionProbes = [];\r\n\r\n for (index = 0; index < scene.reflectionProbes.length; index++) {\r\n const reflectionProbe = scene.reflectionProbes[index];\r\n if (!reflectionProbe.doNotSerialize) {\r\n serializationObject.reflectionProbes.push(reflectionProbe.serialize());\r\n }\r\n }\r\n }\r\n\r\n // Materials\r\n serializationObject.materials = [];\r\n serializationObject.multiMaterials = [];\r\n let material: Material;\r\n for (index = 0; index < scene.materials.length; index++) {\r\n material = scene.materials[index];\r\n if (!material.doNotSerialize) {\r\n serializationObject.materials.push(material.serialize());\r\n }\r\n }\r\n\r\n // MultiMaterials\r\n serializationObject.multiMaterials = [];\r\n for (index = 0; index < scene.multiMaterials.length; index++) {\r\n const multiMaterial = scene.multiMaterials[index];\r\n if (!multiMaterial.doNotSerialize) {\r\n serializationObject.multiMaterials.push(multiMaterial.serialize());\r\n }\r\n }\r\n\r\n // Environment texture\r\n if (scene.environmentTexture) {\r\n if ((scene.environmentTexture as CubeTexture)._files) {\r\n serializationObject.environmentTexture = scene.environmentTexture.serialize();\r\n } else {\r\n serializationObject.environmentTexture = scene.environmentTexture.name;\r\n serializationObject.environmentTextureRotationY = (scene.environmentTexture as CubeTexture).rotationY;\r\n }\r\n }\r\n\r\n // Environment Intensity\r\n serializationObject.environmentIntensity = scene.environmentIntensity;\r\n\r\n // IBL Intensity\r\n serializationObject.iblIntensity = scene.iblIntensity;\r\n\r\n // Skeletons\r\n serializationObject.skeletons = [];\r\n for (index = 0; index < scene.skeletons.length; index++) {\r\n const skeleton = scene.skeletons[index];\r\n if (!skeleton.doNotSerialize) {\r\n serializationObject.skeletons.push(skeleton.serialize());\r\n }\r\n }\r\n\r\n // Transform nodes\r\n serializationObject.transformNodes = [];\r\n for (index = 0; index < scene.transformNodes.length; index++) {\r\n if (!scene.transformNodes[index].doNotSerialize) {\r\n if (options?.shouldExportTransformNode && !options.shouldExportTransformNode(scene.transformNodes[index])) {\r\n continue;\r\n }\r\n serializationObject.transformNodes.push(scene.transformNodes[index].serialize());\r\n }\r\n }\r\n\r\n // Geometries\r\n serializationObject.geometries = {};\r\n\r\n serializationObject.geometries.boxes = [];\r\n serializationObject.geometries.spheres = [];\r\n serializationObject.geometries.cylinders = [];\r\n serializationObject.geometries.toruses = [];\r\n serializationObject.geometries.grounds = [];\r\n serializationObject.geometries.planes = [];\r\n serializationObject.geometries.torusKnots = [];\r\n serializationObject.geometries.vertexData = [];\r\n\r\n SerializedGeometries = [];\r\n const geometries = scene.getGeometries();\r\n for (index = 0; index < geometries.length; index++) {\r\n const geometry = geometries[index];\r\n\r\n if (geometry.isReady()) {\r\n if (options?.shouldExportGeometry && !options.shouldExportGeometry(geometry)) {\r\n continue;\r\n }\r\n SerializeGeometry(geometry, serializationObject.geometries);\r\n }\r\n }\r\n\r\n // Meshes\r\n serializationObject.meshes = [];\r\n for (index = 0; index < scene.meshes.length; index++) {\r\n const abstractMesh = scene.meshes[index];\r\n\r\n if (abstractMesh instanceof Mesh) {\r\n const mesh = abstractMesh;\r\n if (!mesh.doNotSerialize) {\r\n if (mesh.delayLoadState === Constants.DELAYLOADSTATE_LOADED || mesh.delayLoadState === Constants.DELAYLOADSTATE_NONE) {\r\n if (options?.shouldExportMesh && !options.shouldExportMesh(mesh)) {\r\n continue;\r\n }\r\n serializationObject.meshes.push(SerializeMesh(mesh, serializationObject));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Particles Systems\r\n serializationObject.particleSystems = [];\r\n for (index = 0; index < scene.particleSystems.length; index++) {\r\n const particleSystem = scene.particleSystems[index];\r\n if (!particleSystem.doNotSerialize) {\r\n serializationObject.particleSystems.push(particleSystem.serialize(false));\r\n }\r\n }\r\n\r\n // Post processes\r\n serializationObject.postProcesses = [];\r\n for (index = 0; index < scene.postProcesses.length; index++) {\r\n const postProcess = scene.postProcesses[index];\r\n if (!postProcess.doNotSerialize) {\r\n serializationObject.postProcesses.push(postProcess.serialize());\r\n }\r\n }\r\n\r\n // Action Manager\r\n if (scene.actionManager) {\r\n serializationObject.actions = scene.actionManager.serialize(\"scene\");\r\n }\r\n\r\n // Components\r\n for (const component of scene._serializableComponents) {\r\n component.serialize(serializationObject);\r\n }\r\n\r\n // Sprites\r\n if (scene.spriteManagers) {\r\n serializationObject.spriteManagers = [];\r\n for (index = 0; index < scene.spriteManagers.length; index++) {\r\n const spriteManager = scene.spriteManagers[index];\r\n if (!spriteManager.doNotSerialize) {\r\n serializationObject.spriteManagers.push(spriteManager.serialize(true));\r\n }\r\n }\r\n }\r\n\r\n if (options?.customExtraSerialize) {\r\n options.customExtraSerialize(serializationObject);\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Serialize a scene into a JSON compatible object\r\n * @param scene defines the scene to serialize\r\n * @param options define the serializer options\r\n * @returns a JSON promise compatible object\r\n */\r\n public static async SerializeAsync(scene: Scene, options?: ISceneSerializerOptions): Promise<any> {\r\n const serializationObject = SceneSerializer._Serialize(scene, false, options);\r\n\r\n const promises: Array<Promise<any>> = [];\r\n\r\n this._CollectPromises(serializationObject, promises);\r\n\r\n await Promise.all(promises);\r\n return serializationObject;\r\n }\r\n\r\n private static _CollectPromises(obj: any, promises: Array<Promise<any>>): void {\r\n if (Array.isArray(obj)) {\r\n for (let i = 0; i < obj.length; ++i) {\r\n const o = obj[i];\r\n if (o instanceof Promise) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, github/no-then\r\n promises.push(o.then((res: any) => (obj[i] = res)));\r\n } else if (o instanceof Object || Array.isArray(o)) {\r\n this._CollectPromises(o, promises);\r\n }\r\n }\r\n } else if (obj instanceof Object) {\r\n for (const name in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, name)) {\r\n const o = obj[name];\r\n if (o instanceof Promise) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, github/no-then\r\n promises.push(o.then((res: any) => (obj[name] = res)));\r\n } else if (o instanceof Object || Array.isArray(o)) {\r\n this._CollectPromises(o, promises);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Serialize a mesh into a JSON compatible object\r\n * @param toSerialize defines the mesh to serialize\r\n * @param withParents defines if parents must be serialized as well\r\n * @param withChildren defines if children must be serialized as well\r\n * @returns a JSON compatible object\r\n */\r\n public static SerializeMesh(toSerialize: any /* Mesh || Mesh[] */, withParents: boolean = false, withChildren: boolean = false): any {\r\n const serializationObject: any = {};\r\n serializationObject.meshes = [];\r\n serializationObject.transformNodes = [];\r\n serializationObject.cameras = [];\r\n serializationObject.lights = [];\r\n\r\n SceneSerializer.ClearCache();\r\n\r\n toSerialize = toSerialize instanceof Array ? toSerialize : [toSerialize];\r\n\r\n if (withParents || withChildren) {\r\n //deliberate for loop! not for each, appended should be processed as well.\r\n for (let i = 0; i < toSerialize.length; ++i) {\r\n if (withChildren) {\r\n const descendants = toSerialize[i].getDescendants();\r\n for (const node of descendants) {\r\n if (toSerialize.indexOf(node) < 0 && !node.doNotSerialize) {\r\n toSerialize.push(node);\r\n }\r\n }\r\n }\r\n //make sure the array doesn't contain the object already\r\n if (withParents && toSerialize[i].parent && toSerialize.indexOf(toSerialize[i].parent) < 0 && !toSerialize[i].parent.doNotSerialize) {\r\n toSerialize.push(toSerialize[i].parent);\r\n }\r\n }\r\n }\r\n\r\n for (const mesh of toSerialize) {\r\n FinalizeSingleNode(mesh, serializationObject);\r\n }\r\n\r\n return serializationObject;\r\n }\r\n}\r\n"]}
|
|
@@ -253,12 +253,48 @@ export declare class PhysicsCharacterController {
|
|
|
253
253
|
* default 0
|
|
254
254
|
*/
|
|
255
255
|
characterMass: number;
|
|
256
|
+
/**
|
|
257
|
+
* The height of the character's step.
|
|
258
|
+
* The character will automatically step up onto stairs and obstacles that are below this height.
|
|
259
|
+
* default 0.5
|
|
260
|
+
*/
|
|
261
|
+
stepHeight: number;
|
|
262
|
+
/**
|
|
263
|
+
* The normal threshold for ground detection during step up.
|
|
264
|
+
* Used to determine if a contact surface is ground-like (facing upward).
|
|
265
|
+
* Value is the cosine of the maximum angle from vertical.
|
|
266
|
+
* For example, 0.5 means surfaces with angle less than 60 degrees from vertical are considered ground.
|
|
267
|
+
* default 0.5
|
|
268
|
+
*/
|
|
269
|
+
stepGroundNormalThreshold: number;
|
|
270
|
+
/**
|
|
271
|
+
* The ratio of stepHeight used for checking height during step up.
|
|
272
|
+
* Determines at what fraction of the step height to perform the obstruction check.
|
|
273
|
+
* For example, 0.5 means check at half the step height.
|
|
274
|
+
* default 0.5
|
|
275
|
+
*/
|
|
276
|
+
stepUpCheckHeightRatio: number;
|
|
277
|
+
/**
|
|
278
|
+
* The minimum distance to check for step up obstruction.
|
|
279
|
+
* This prevents the character from trying to step up when the obstruction is too close.
|
|
280
|
+
* default 0.1
|
|
281
|
+
*/
|
|
282
|
+
stepUpCheckDistance: number;
|
|
283
|
+
/**
|
|
284
|
+
* The ratio of horizontal displacement to check after stepping up.
|
|
285
|
+
* Determines how far forward to check for clearance after stepping up.
|
|
286
|
+
* For example, 0.5 means check half the step check distance forward.
|
|
287
|
+
* default 0.5
|
|
288
|
+
*/
|
|
289
|
+
stepUpCheckHorizontalRatio: number;
|
|
256
290
|
/**
|
|
257
291
|
* Observable for trigger entered and trigger exited events
|
|
258
292
|
*/
|
|
259
293
|
onTriggerCollisionObservable: Observable<ICharacterControllerCollisionEvent>;
|
|
260
294
|
private _startCollector;
|
|
261
295
|
private _castCollector;
|
|
296
|
+
private _stepCollector;
|
|
297
|
+
private _stepUpCollector;
|
|
262
298
|
private _displacementEps;
|
|
263
299
|
/**
|
|
264
300
|
* instanciate a new characterController
|
|
@@ -344,6 +380,8 @@ export declare class PhysicsCharacterController {
|
|
|
344
380
|
body: PhysicsBody;
|
|
345
381
|
index: number;
|
|
346
382
|
}): number;
|
|
383
|
+
protected _hasGroundContact(): boolean;
|
|
384
|
+
protected _tryStepUp(deltaTime: number, displacement: Vector3, stepOffset: number): boolean;
|
|
347
385
|
protected _integrateManifolds(deltaTime: number, gravity: Vector3): void;
|
|
348
386
|
/**
|
|
349
387
|
* Move the character with collisions
|
|
@@ -139,6 +139,40 @@ export class PhysicsCharacterController {
|
|
|
139
139
|
* default 0
|
|
140
140
|
*/
|
|
141
141
|
this.characterMass = 0;
|
|
142
|
+
/**
|
|
143
|
+
* The height of the character's step.
|
|
144
|
+
* The character will automatically step up onto stairs and obstacles that are below this height.
|
|
145
|
+
* default 0.5
|
|
146
|
+
*/
|
|
147
|
+
this.stepHeight = 0.5;
|
|
148
|
+
/**
|
|
149
|
+
* The normal threshold for ground detection during step up.
|
|
150
|
+
* Used to determine if a contact surface is ground-like (facing upward).
|
|
151
|
+
* Value is the cosine of the maximum angle from vertical.
|
|
152
|
+
* For example, 0.5 means surfaces with angle less than 60 degrees from vertical are considered ground.
|
|
153
|
+
* default 0.5
|
|
154
|
+
*/
|
|
155
|
+
this.stepGroundNormalThreshold = 0.5;
|
|
156
|
+
/**
|
|
157
|
+
* The ratio of stepHeight used for checking height during step up.
|
|
158
|
+
* Determines at what fraction of the step height to perform the obstruction check.
|
|
159
|
+
* For example, 0.5 means check at half the step height.
|
|
160
|
+
* default 0.5
|
|
161
|
+
*/
|
|
162
|
+
this.stepUpCheckHeightRatio = 0.5;
|
|
163
|
+
/**
|
|
164
|
+
* The minimum distance to check for step up obstruction.
|
|
165
|
+
* This prevents the character from trying to step up when the obstruction is too close.
|
|
166
|
+
* default 0.1
|
|
167
|
+
*/
|
|
168
|
+
this.stepUpCheckDistance = 0.1;
|
|
169
|
+
/**
|
|
170
|
+
* The ratio of horizontal displacement to check after stepping up.
|
|
171
|
+
* Determines how far forward to check for clearance after stepping up.
|
|
172
|
+
* For example, 0.5 means check half the step check distance forward.
|
|
173
|
+
* default 0.5
|
|
174
|
+
*/
|
|
175
|
+
this.stepUpCheckHorizontalRatio = 0.5;
|
|
142
176
|
/**
|
|
143
177
|
* Observable for trigger entered and trigger exited events
|
|
144
178
|
*/
|
|
@@ -170,6 +204,8 @@ export class PhysicsCharacterController {
|
|
|
170
204
|
const hknp = hk._hknp;
|
|
171
205
|
this._startCollector = hknp.HP_QueryCollector_Create(16)[1];
|
|
172
206
|
this._castCollector = hknp.HP_QueryCollector_Create(16)[1];
|
|
207
|
+
this._stepCollector = hknp.HP_QueryCollector_Create(16)[1];
|
|
208
|
+
this._stepUpCollector = hknp.HP_QueryCollector_Create(16)[1];
|
|
173
209
|
}
|
|
174
210
|
/**
|
|
175
211
|
* Dispose the character controller
|
|
@@ -184,6 +220,8 @@ export class PhysicsCharacterController {
|
|
|
184
220
|
const hknp = hk._hknp;
|
|
185
221
|
hknp.HP_QueryCollector_Release(this._startCollector);
|
|
186
222
|
hknp.HP_QueryCollector_Release(this._castCollector);
|
|
223
|
+
hknp.HP_QueryCollector_Release(this._stepCollector);
|
|
224
|
+
hknp.HP_QueryCollector_Release(this._stepUpCollector);
|
|
187
225
|
}
|
|
188
226
|
/**
|
|
189
227
|
* Get shape used for collision
|
|
@@ -1168,6 +1206,85 @@ export class PhysicsCharacterController {
|
|
|
1168
1206
|
_getInvMass(body) {
|
|
1169
1207
|
return 1 / body.body.getMassProperties(body.index).mass;
|
|
1170
1208
|
}
|
|
1209
|
+
_hasGroundContact() {
|
|
1210
|
+
if (this._manifold.length === 0) {
|
|
1211
|
+
return false;
|
|
1212
|
+
}
|
|
1213
|
+
for (let i = 0; i < this._manifold.length; i++) {
|
|
1214
|
+
const contact = this._manifold[i];
|
|
1215
|
+
if (contact.normal.dot(this.up) > this.stepGroundNormalThreshold) {
|
|
1216
|
+
return true;
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
return false;
|
|
1220
|
+
}
|
|
1221
|
+
_tryStepUp(deltaTime, displacement, stepOffset) {
|
|
1222
|
+
if (stepOffset <= 0 || displacement.lengthSquared() < 1e-6) {
|
|
1223
|
+
return false;
|
|
1224
|
+
}
|
|
1225
|
+
const horizontalDisp = this._tmpVecs[30];
|
|
1226
|
+
horizontalDisp.copyFrom(displacement);
|
|
1227
|
+
horizontalDisp.y = 0;
|
|
1228
|
+
if (horizontalDisp.lengthSquared() < 1e-6) {
|
|
1229
|
+
return false;
|
|
1230
|
+
}
|
|
1231
|
+
horizontalDisp.normalizeToRef(horizontalDisp);
|
|
1232
|
+
const hk = this._scene.getPhysicsEngine().getPhysicsPlugin();
|
|
1233
|
+
const hknp = hk._hknp;
|
|
1234
|
+
const stepUpHeight = stepOffset * this.stepUpCheckHeightRatio;
|
|
1235
|
+
const checkPos = this._tmpVecs[31];
|
|
1236
|
+
checkPos.copyFrom(this._position);
|
|
1237
|
+
const scaledVec = this._tmpVecs[26];
|
|
1238
|
+
this.up.scaleToRef(stepUpHeight, scaledVec);
|
|
1239
|
+
checkPos.addInPlace(scaledVec);
|
|
1240
|
+
const stepCheckDist = Math.max(this.stepUpCheckDistance, stepOffset);
|
|
1241
|
+
const checkNative = [checkPos.x, checkPos.y, checkPos.z];
|
|
1242
|
+
const orientation = [this._orientation.x, this._orientation.y, this._orientation.z, this._orientation.w];
|
|
1243
|
+
const castPath = this._tmpVecs[29];
|
|
1244
|
+
horizontalDisp.scaleToRef(stepCheckDist, castPath);
|
|
1245
|
+
const endNative = [checkPos.x + castPath.x, checkPos.y + castPath.y, checkPos.z + castPath.z];
|
|
1246
|
+
const query = [this._shape._pluginData, orientation, checkNative, endNative, false, [this._body._pluginData.hpBodyId[0]]];
|
|
1247
|
+
hknp.HP_World_ShapeCastWithCollector(hk.world, this._stepCollector, query);
|
|
1248
|
+
const numHits = hknp.HP_QueryCollector_GetNumHits(this._stepCollector)[1];
|
|
1249
|
+
if (numHits > 0) {
|
|
1250
|
+
for (let i = 0; i < numHits; i++) {
|
|
1251
|
+
const [fraction, , hitWorld] = hknp.HP_QueryCollector_GetShapeCastResult(this._stepCollector, i)[1];
|
|
1252
|
+
if (fraction >= 1.0) {
|
|
1253
|
+
continue;
|
|
1254
|
+
}
|
|
1255
|
+
const normal = this._tmpVecs[28];
|
|
1256
|
+
normal.set(hitWorld[4][0], hitWorld[4][1], hitWorld[4][2]);
|
|
1257
|
+
const verticalComponent = normal.dot(this.up);
|
|
1258
|
+
if (verticalComponent < this.stepGroundNormalThreshold) {
|
|
1259
|
+
continue;
|
|
1260
|
+
}
|
|
1261
|
+
const stepUpPos = this._tmpVecs[27];
|
|
1262
|
+
stepUpPos.copyFrom(this._position);
|
|
1263
|
+
this.up.scaleToRef(stepOffset, scaledVec);
|
|
1264
|
+
stepUpPos.addInPlace(scaledVec);
|
|
1265
|
+
const stepUpCheck = [
|
|
1266
|
+
this._shape._pluginData,
|
|
1267
|
+
orientation,
|
|
1268
|
+
[stepUpPos.x, stepUpPos.y, stepUpPos.z],
|
|
1269
|
+
[
|
|
1270
|
+
stepUpPos.x + castPath.x * this.stepUpCheckHorizontalRatio,
|
|
1271
|
+
stepUpPos.y + castPath.y * this.stepUpCheckHorizontalRatio,
|
|
1272
|
+
stepUpPos.z + castPath.z * this.stepUpCheckHorizontalRatio,
|
|
1273
|
+
],
|
|
1274
|
+
false,
|
|
1275
|
+
[this._body._pluginData.hpBodyId[0]],
|
|
1276
|
+
];
|
|
1277
|
+
hknp.HP_World_ShapeCastWithCollector(hk.world, this._stepUpCollector, stepUpCheck);
|
|
1278
|
+
const numStepUpHits = hknp.HP_QueryCollector_GetNumHits(this._stepUpCollector)[1];
|
|
1279
|
+
if (numStepUpHits === 0) {
|
|
1280
|
+
this.up.scaleToRef(stepOffset, scaledVec);
|
|
1281
|
+
this._position.addInPlace(scaledVec);
|
|
1282
|
+
return true;
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1286
|
+
return false;
|
|
1287
|
+
}
|
|
1171
1288
|
_integrateManifolds(deltaTime, gravity) {
|
|
1172
1289
|
const hk = this._scene.getPhysicsEngine().getPhysicsPlugin();
|
|
1173
1290
|
const epsSqrd = 1e-8;
|
|
@@ -1189,6 +1306,19 @@ export class PhysicsCharacterController {
|
|
|
1189
1306
|
const solverDeltaTime = solveResults.deltaTime;
|
|
1190
1307
|
newVelocity = solveResults.velocity;
|
|
1191
1308
|
this._resolveContacts(deltaTime, gravity);
|
|
1309
|
+
const displacement = this._tmpVecs[25];
|
|
1310
|
+
if (this._hasGroundContact() && newDisplacement.lengthSquared() > epsSqrd && this.stepHeight > 0) {
|
|
1311
|
+
const horizontalVel = this._tmpVecs[26];
|
|
1312
|
+
horizontalVel.copyFrom(this._velocity);
|
|
1313
|
+
horizontalVel.y = 0;
|
|
1314
|
+
if (horizontalVel.lengthSquared() > epsSqrd) {
|
|
1315
|
+
if (this._tryStepUp(deltaTime, this._lastDisplacement, this.stepHeight)) {
|
|
1316
|
+
remainingTime -= solverDeltaTime;
|
|
1317
|
+
this._lastDisplacement.copyFrom(newDisplacement);
|
|
1318
|
+
continue;
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1192
1322
|
let newContactIndex = -1;
|
|
1193
1323
|
// todo if (updateResult == hit multiple bodies) ... cast again
|
|
1194
1324
|
// If castCollector had hits on different bodies (so we're not sure if some non-closest body could be in our way) OR
|
|
@@ -1223,7 +1353,7 @@ export class PhysicsCharacterController {
|
|
|
1223
1353
|
const distance = newContact.fraction;
|
|
1224
1354
|
let fraction = distance - keepDistanceAlongMovement * displacementLengthInv;
|
|
1225
1355
|
fraction = Math.min(Math.max(fraction, 0.0), 1.0);
|
|
1226
|
-
|
|
1356
|
+
newDisplacement.scaleToRef(fraction, displacement);
|
|
1227
1357
|
this._position.addInPlace(displacement);
|
|
1228
1358
|
remainingTime -= solverDeltaTime * fraction;
|
|
1229
1359
|
}
|