@woosh/meep-engine 2.56.1 → 2.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/editor/Editor.js +4 -4
- package/editor/ecs/component/editors/ColorEditor.js +1 -1
- package/editor/ecs/component/editors/ImagePathEditor.js +2 -2
- package/editor/ecs/component/editors/{LargeStrongEditor.js → LargeStringEditor.js} +1 -1
- package/editor/process/symbolic/buildThreeJSHelperEntity.js +3 -3
- package/editor/process/symbolic/makeGridPositionSymbolDisplay.js +3 -3
- package/editor/process/symbolic/makePositionedIconDisplaySymbol.js +3 -3
- package/editor/tools/GridPaintTool.js +3 -3
- package/editor/tools/TopDownCameraControlTool.js +1 -1
- package/editor/tools/TransformTool.js +1 -1
- package/editor/tools/engine/Tool.js +9 -23
- package/editor/tools/engine/ToolEngine.js +5 -7
- package/editor/tools/paint/TerrainHeightPaintTool.js +2 -2
- package/editor/tools/paint/TerrainPaintTool.js +2 -2
- package/editor/tools/paint/TerrainTexturePaintTool.js +2 -2
- package/editor/tools/v2/prototypeTransformControls.js +3 -3
- package/editor/view/ecs/ComponentControlView.js +2 -1
- package/package.json +1 -1
- package/samples/generation/main.js +2 -2
- package/samples/terrain/from_image.js +2 -2
- package/samples/terrain/from_image_2.js +4 -4
- package/src/core/binary/byteArrayToString.js +28 -0
- package/src/core/binary/downloadAsFile.js +28 -0
- package/src/core/binary/downloadUrlAsFile.js +14 -0
- package/src/core/binary/jsonToStringToByteArray.js +27 -0
- package/src/core/binary/stringToByteArray.js +24 -0
- package/src/core/bvh2/BinaryNode.spec.js +2 -1
- package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.js +1 -1
- package/src/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +1 -1
- package/src/core/bvh2/traversal/__process_point_if_within_planes.js +1 -1
- package/src/core/cache/LoadingCache.js +3 -2
- package/src/core/collection/array/arraySetSortingDiff.spec.js +12 -12
- package/src/core/collection/array/weightedRandomFromArray.js +2 -2
- package/src/core/color/Color.js +6 -6
- package/src/core/color/Color.spec.js +27 -1
- package/src/core/color/YCbCr/YCbCr.spec.js +16 -0
- package/src/core/color/{YCbCr_to_rgb_uint24.js → YCbCr/YCbCr_to_rgb_uint24.js} +6 -6
- package/src/core/color/YCbCr/rgb_to_YCbCr_uint24.js +16 -0
- package/src/core/color/{hex2rgb.js → hex/hex2rgb.js} +1 -1
- package/src/core/color/{rgb2hex.js → hex/rgb2hex.js} +1 -1
- package/src/core/color/{hsv2rgb.js → hsv/hsv2rgb.js} +3 -3
- package/src/core/color/hsv/rgb2hsv.js +49 -0
- package/src/core/color/{kelvin_to_rgb.js → kelvin/kelvin_to_rgb.js} +1 -1
- package/src/core/color/{kelvin_to_rgb.spec.js → kelvin/kelvin_to_rgb.spec.js} +2 -2
- package/src/core/color/{prototype_kelvin_to_rgb.js → kelvin/prototype_kelvin_to_rgb.js} +5 -5
- package/src/core/color/{rgb_to_kelvin.spec.js → kelvin/rgb_to_kelvin.spec.js} +1 -1
- package/src/core/color/{parseColor.js → parse_color.js} +5 -5
- package/src/core/color/parse_color.spec.js +18 -0
- package/src/core/color/rgb2uint24.js +3 -3
- package/src/core/color/sRGB/sRGB.spec.js +16 -0
- package/src/core/color/xyz/XYZ.spec.js +16 -0
- package/src/core/color/xyz/rgb_to_xyz.js +15 -0
- package/src/core/color/xyz/xyz_to_rgb.js +14 -0
- package/src/core/events/signal/Signal.js +5 -0
- package/src/core/events/signal/{signalAggregateByTimeWindow.js → signal_aggregate_by_time_window.js} +1 -1
- package/src/core/events/signal/{SignalUtils.js → signal_filter.js} +1 -2
- package/src/core/fsm/simple/SimpleStateMachine.spec.js +34 -2
- package/src/core/geom/2d/spline_bezier2_2d.js +26 -0
- package/src/core/geom/2d/spline_bezier2_2d.spec.js +16 -0
- package/src/core/geom/3d/SurfacePoint3.js +1 -1
- package/src/core/geom/3d/aabb/aabb3_compute_plane_side.js +1 -1
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +1 -1
- package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js +1 -1
- package/src/core/geom/3d/compute_circle_bounding_box.js +1 -1
- package/src/core/geom/3d/cone/computeConeBoundingBox.js +1 -1
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
- package/src/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +1 -1
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.js +1 -1
- package/src/core/geom/3d/matrix/m4_multiply.js +2 -2
- package/src/core/geom/3d/matrix/m4_multiply.spec.js +11 -0
- package/src/core/geom/3d/matrix/m4_multiply_alphatensor.spec.js +11 -0
- package/src/core/geom/3d/morton/split_by_2.js +1 -1
- package/src/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
- package/src/core/geom/3d/normal/spherical/sphere_map_transform.js +1 -1
- package/src/core/geom/3d/plane/is_point_within_planes.js +1 -1
- package/src/core/geom/3d/plane/lerp_planes_to_array.js +1 -1
- package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.js +1 -1
- package/src/core/geom/3d/plane/plane3_compute_line_segment_intersection.js +1 -1
- package/src/core/geom/3d/plane/plane3_compute_ray_intersection.js +1 -1
- package/src/core/geom/3d/plane/plane3_lerp.js +2 -2
- package/src/core/geom/3d/plane/plane3_projectPoint.js +1 -1
- package/src/core/geom/3d/plane/plane3_slerp.js +3 -3
- package/src/core/geom/3d/ray/ray_computeNearestPointToPoint.js +1 -1
- package/src/core/geom/3d/ray/ray_distance_to_point.js +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +3 -3
- package/src/core/geom/3d/shape/UnitCubeShape3D.js +1 -1
- package/src/core/geom/3d/shape/UnitSphereShape3D.js +1 -1
- package/src/core/geom/3d/shape/util/shape_to_visual_entity.js +10 -10
- package/src/core/geom/3d/sphere/sphere_intersects_ray.js +1 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +6 -0
- package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.js +1 -1
- package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.spec.js +1 -1
- package/src/core/geom/3d/tetrahedra/compute_circumsphere.js +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.js +1 -0
- package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.spec.js +10 -2
- package/src/core/geom/3d/tetrahedra/prototypeTetrahedraBuilder.js +2 -2
- package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.js +1 -1
- package/src/core/geom/3d/topology/samples/sampleFloodFill.js +4 -4
- package/src/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +1 -1
- package/src/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +1 -1
- package/src/core/geom/3d/topology/simplify/tm_edge_collapse_is_degenerate_flip.js +2 -2
- package/src/core/geom/3d/topology/struct/TopoVertex.js +1 -1
- package/src/core/geom/3d/topology/util/compute_face_connection_weight.js +2 -2
- package/src/core/geom/3d/triangle/computeTrianglePlaneSide.js +1 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersection.js +1 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.js +1 -1
- package/src/core/geom/3d/v3_compute_triangle_normal.js +1 -1
- package/src/core/geom/Quaternion.js +1 -1
- package/src/core/geom/Vector3.js +7 -7
- package/src/core/geom/Vector3.spec.js +68 -1
- package/src/core/geom/mat2/m2_add.js +17 -0
- package/src/core/geom/mat2/m2_determinant.js +8 -0
- package/src/core/geom/mat2/m2_multiply.js +17 -0
- package/src/core/geom/mat2/m2_multiply_scalar.js +18 -0
- package/src/core/geom/mat2/m2_multiply_transposed.js +18 -0
- package/src/core/geom/mat2/m2_sub_transposed.js +17 -0
- package/src/{view → core/geom/mat3}/m3_cm_compose_transform.js +0 -29
- package/src/core/geom/mat3/m3_cm_extract_rotation.js +8 -0
- package/src/core/geom/mat3/m3_cm_from_translation.js +19 -0
- package/src/{view/multiplyMatrices3.js → core/geom/mat3/m3_multiply.js} +2 -2
- package/src/{view → core/geom/mat3}/m3_rm_compose_transform.js +0 -9
- package/src/core/geom/mat3/m3_rm_extract_scale.js +7 -0
- package/src/core/geom/{3d/vector/allocate_v3.js → vec3/v3_allocate.js} +1 -1
- package/src/core/geom/{v3_angle_between.js → vec3/v3_angle_between.js} +1 -1
- package/src/core/geom/vec3/v3_dot_array_array.js +20 -0
- package/src/core/geom/{v3_lerp.js → vec3/v3_lerp.js} +1 -1
- package/src/core/graph/SquareMatrix.js +26 -3
- package/src/core/graph/SquareMatrix.spec.js +52 -2
- package/src/core/math/clamp01.js +1 -0
- package/src/core/math/fract.js +3 -1
- package/src/core/math/inverseLerp.js +7 -5
- package/src/core/math/lerp.js +5 -5
- package/src/core/math/physics/spring/computeHookeForce.js +9 -0
- package/src/core/math/remap.js +19 -0
- package/src/core/math/remap.spec.js +15 -0
- package/src/core/math/smoothStep.spec.js +16 -0
- package/src/core/math/spline/spline_bezier2.js +13 -0
- package/src/core/math/spline/spline_bezier2.spec.js +13 -0
- package/src/core/model/object/compareValues.js +2 -2
- package/src/core/model/object/read_property.js +10 -2
- package/src/core/model/object/write_property.js +3 -23
- package/src/core/model/object/write_property.spec.js +26 -0
- package/src/core/primitives/numbers/number_pretty_print.spec.js +19 -0
- package/src/core/process/action/AsynchronousDelayAction.js +2 -2
- package/src/core/process/executor/profile/ConcurrentExecutorProfiler.js +1 -1
- package/src/engine/EngineHarness.js +7 -7
- package/src/engine/EntityCreator.js +5 -5
- package/src/engine/__module.js +1 -1
- package/src/engine/achievements/AchievementManager.js +2 -2
- package/src/engine/animation/AnimationUtils.js +4 -4
- package/src/engine/animation/behavior/animateProperty.js +2 -2
- package/src/engine/animation/curve/draw/build_plot_entity_from_array.js +3 -3
- package/src/engine/animation/playAnimationTrack.js +3 -3
- package/src/engine/animation/playTrackRealTime.js +3 -3
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +2 -2
- package/src/engine/control/ControlContext.js +7 -7
- package/src/engine/ecs/{EntityBuilder.d.ts → Entity.d.ts} +5 -5
- package/src/engine/ecs/{EntityBuilder.js → Entity.js} +29 -29
- package/src/engine/ecs/{EntityBuilder.spec.js → Entity.spec.js} +17 -17
- package/src/engine/ecs/EntityBlueprint.d.ts +2 -2
- package/src/engine/ecs/EntityBlueprint.js +3 -3
- package/src/engine/ecs/EntityBlueprint.spec.js +2 -2
- package/src/engine/ecs/{EntityBuilderFlags.js → EntityFlags.js} +1 -1
- package/src/engine/ecs/EntityObserver.spec.js +8 -8
- package/src/engine/ecs/dynamic_actions/DynamicActorSystem.js +5 -5
- package/src/engine/ecs/foliage/ecs/InstancedMeshUtils.js +3 -3
- package/src/engine/ecs/gui/menu/radial/RadialContextMenu.d.ts +2 -2
- package/src/engine/ecs/gui/menu/radial/RadialContextMenu.js +5 -5
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
- package/src/engine/ecs/parent/EntityNode.d.ts +3 -3
- package/src/engine/ecs/parent/EntityNode.js +5 -5
- package/src/engine/ecs/parent/testHuDPerf.js +2 -2
- package/src/engine/ecs/speaker/VoiceSystem.js +5 -5
- package/src/engine/ecs/systems/SteeringSystem.js +1 -1
- package/src/engine/ecs/terrain/ecs/splat/SplatMapOptimizerDebugger.js +1 -1
- package/src/engine/ecs/tooltip/testTooltipComponentSystem.js +3 -3
- package/src/engine/graphics/camera/makeOrbitalCameraController.js +3 -3
- package/src/engine/graphics/camera/testClippingPlaneComputation.js +3 -3
- package/src/engine/graphics/debug/createDebugLabel.js +3 -3
- package/src/engine/graphics/ecs/camera/Camera.js +1 -1
- package/src/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
- package/src/engine/graphics/ecs/camera/filter/setup_filtered_camera_controller.js +3 -3
- package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +3 -11
- package/src/engine/graphics/ecs/decal/v2/prototypeDecalEditor.js +3 -3
- package/src/engine/graphics/ecs/decal/v2/prototypeDecalSystem.js +14 -14
- package/src/engine/graphics/ecs/highlight/Highlight.js +20 -102
- package/src/engine/graphics/ecs/mesh/Mesh.js +12 -18
- package/src/engine/graphics/ecs/mesh/MeshSystem.js +41 -26
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +3 -3
- package/src/engine/graphics/ecs/mesh-v2/sample/prototypeShadedGeometry.js +5 -5
- package/src/engine/graphics/ecs/mesh-v2/sample/prototype_sg_raycast.js +6 -6
- package/src/engine/graphics/ecs/path/ribbon/RibbonPathBuilder.js +3 -3
- package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +3 -3
- package/src/engine/graphics/ecs/path/tube/build/TubePathBuilder.js +4 -4
- package/src/engine/graphics/ecs/path/tube/build/makeTubeGeometry.js +1 -1
- package/src/engine/graphics/ecs/path/tube/build/make_cap.js +3 -3
- package/src/engine/graphics/ecs/path/tube/build/make_ring_vertices.js +1 -1
- package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +3 -3
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +2 -2
- package/src/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +2 -2
- package/src/engine/graphics/geometry/MikkT/InitTriInfo.js +5 -6
- package/src/engine/graphics/geometry/MikkT/MikkTSpace.js +3 -3
- package/src/engine/graphics/geometry/MikkT/NormalizeSafe.js +1 -2
- package/src/engine/graphics/geometry/MikkT/STSpace.js +3 -3
- package/src/engine/graphics/geometry/MikkT/v3_scale_dot_sub_normalize.js +2 -2
- package/src/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +1 -1
- package/src/engine/graphics/geometry/clipping/ClippedGeometry.js +1 -1
- package/src/engine/graphics/geometry/optimization/merge/prototypeGeometryMerge.js +4 -4
- package/src/engine/graphics/impostors/octahedral/prototypeBaker.js +7 -7
- package/src/engine/graphics/particles/node-based/editor/ParticleSpecificationEditorView.js +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +102 -95
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.spec.js +25 -0
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +0 -35
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +39 -2
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +2 -2
- package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +22 -6
- package/src/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.d.ts +2 -2
- package/src/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +3 -3
- package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +10 -10
- package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
- package/src/engine/graphics/render/buffer/simple-fx/taa/prototypeTAA.js +2 -2
- package/src/engine/graphics/render/forward_plus/LightManager.js +1 -1
- package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +13 -13
- package/src/engine/graphics/render/forward_plus/prototype/prototypeLightManager.js +3 -3
- package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +1 -1
- package/src/engine/graphics/render/layers/RenderLayerUtils.js +1 -1
- package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +8 -7
- package/src/engine/graphics/sh3/LightProbeVolume.js +3 -3
- package/src/engine/graphics/sh3/path_tracer/PathTracer.js +2 -2
- package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +2 -2
- package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/ray_reflect.js +1 -1
- package/src/engine/graphics/sh3/prototypeSH3Probe.js +3 -3
- package/src/engine/graphics/sh3/sky/hosek/data.js +3744 -0
- package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +10 -3786
- package/src/engine/graphics/sh3/visualise_probe.js +3 -3
- package/src/engine/graphics/shadows/testShadowMapRendering.js +3 -3
- package/src/engine/graphics/texture/atlas/AbstractTextureAtlas.js +1 -1
- package/src/engine/graphics/texture/atlas/AtlasPatch.js +0 -1
- package/src/engine/graphics/texture/atlas/AtlasPatchFlag.js +8 -1
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +25 -0
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.spec.js +54 -0
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +101 -160
- package/src/engine/graphics/texture/atlas/TextureAtlas.js +18 -1
- package/src/engine/graphics/texture/sampler/downloadSamplerAsPNG.js +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_ensure_uint8_RGBA.js +22 -0
- package/src/engine/graphics/texture/sprite/prototypeSpriteCutoutGeometry.js +2 -2
- package/src/engine/graphics/util/projectSphere.js +1 -1
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +2 -2
- package/src/engine/input/ecs/util/TopDownCameraControllerHelper.js +2 -2
- package/src/engine/intelligence/behavior/composite/ParallelBehavior.spec.js +13 -12
- package/src/engine/navigation/ecs/components/Path.js +1 -1
- package/src/engine/physics/fluid/prototype.js +3 -3
- package/src/engine/physics/mls-mpm/MLS_MPM.js +11 -106
- package/src/engine/reference/v2/Reference.js +6 -2
- package/src/engine/save/storage/JsonStringCodec.js +1 -1
- package/src/engine/save/storage/LocalStorage.js +2 -1
- package/src/engine/sound/ecs/emitter/SoundEmitter.js +7 -7
- package/src/engine/sound/ecs/emitter/SoundTrack.js +6 -6
- package/src/engine/ui/GUIEngine.js +4 -4
- package/src/engine/ui/notification/NotificationManager.js +3 -3
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +1 -1
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +2 -4
- package/src/generation/markers/debug/visualizeMarkers.js +2 -2
- package/src/generation/markers/prototypeGridCellActionPlaceMarker.js +2 -2
- package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +2 -2
- package/src/generation/theme/ThemeEngine.js +2 -2
- package/src/generation/theme/ThemeEngine.spec.js +7 -0
- package/src/view/View.js +21 -13
- package/src/view/elements/ColorPickerView.js +2 -2
- package/src/view/minimap/gl/MarkerGL.js +20 -18
- package/src/view/minimap/gl/MinimapMarkersGL.js +2 -1
- package/editor/tools/FoliagePaintTool.js +0 -168
- package/editor/tools/engine/ToolStateMachine.js +0 -53
- package/src/core/NumberFormat.js +0 -4
- package/src/core/binary/ByteArrayTools.js +0 -137
- package/src/core/binary/NaiveBitSet.js +0 -69
- package/src/core/binary/objects/StandardTypeBuilder.js +0 -126
- package/src/core/binary/serde/JsonSerializer.js +0 -113
- package/src/core/color/rgb2hsv.js +0 -47
- package/src/core/color/rgb_to_YCbCr_uint24.js +0 -16
- package/src/core/fsm/StateMachine.js +0 -440
- package/src/core/fsm/Transition.js +0 -65
- package/src/core/geom/Bezier.js +0 -24
- package/src/core/geom/Bezier.spec.js +0 -16
- package/src/core/math/spline/quadraticCurve.js +0 -11
- package/src/core/math/spline/quadraticCurve.spec.js +0 -13
- package/src/core/primitives/numbers/compareNumbers.js +0 -9
- package/src/engine/graphics/ecs/decal/Decal.js +0 -10
- package/src/engine/graphics/ecs/decal/DecalSystem.js +0 -99
- package/src/engine/graphics/ecs/decal/threejs/DecalGeometry.js +0 -298
- package/src/engine/graphics/ecs/trail/Trail.js +0 -83
- package/src/engine/graphics/ecs/trail/TrailMaterial.js +0 -67
- package/src/engine/graphics/ecs/trail/TrailMaterial2.js +0 -73
- package/src/engine/graphics/ecs/trail/TrailSystem.js +0 -162
- package/src/engine/graphics/ecs/water2/NodeWaterShader1.js +0 -213
- package/src/engine/graphics/ecs/water2/shader/JBWaterShader.js +0 -315
- package/src/engine/graphics/geometry/MikkT/Length.js +0 -10
- package/src/engine/graphics/texture/ImageLoader.js +0 -33
- package/src/engine/graphics/three/DDSLoader.js +0 -286
- package/src/engine/graphics/three/Water2.js +0 -343
- package/src/engine/physics/spring/computeHookeForce.js +0 -9
- package/src/engine/reference/v1/ReferenceManager.js +0 -124
- /package/src/core/color/{hex2rgb.spec.js → hex/hex2rgb.spec.js} +0 -0
- /package/src/core/color/{rgb2hex.spec.js → hex/rgb2hex.spec.js} +0 -0
- /package/src/core/color/{hsv2rgb.spec.js → hsv/hsv2rgb.spec.js} +0 -0
- /package/src/core/color/{rgb_to_kelvin.js → kelvin/rgb_to_kelvin.js} +0 -0
- /package/src/core/color/{linear_to_sRGB.js → sRGB/linear_to_sRGB.js} +0 -0
- /package/src/core/color/{sRGB_to_linear.js → sRGB/sRGB_to_linear.js} +0 -0
- /package/src/core/geom/{m3_determinant.js → mat3/m3_determinant.js} +0 -0
- /package/src/core/geom/{v3_distance.js → vec3/v3_distance.js} +0 -0
- /package/src/core/geom/{v3_distance_above_plane.js → vec3/v3_distance_above_plane.js} +0 -0
- /package/src/core/geom/{v3_distance_above_plane.spec.js → vec3/v3_distance_above_plane.spec.js} +0 -0
- /package/src/core/geom/{v3_distance_sqr.d.ts → vec3/v3_distance_sqr.d.ts} +0 -0
- /package/src/core/geom/{v3_distance_sqr.js → vec3/v3_distance_sqr.js} +0 -0
- /package/src/core/geom/{v3_dot.js → vec3/v3_dot.js} +0 -0
- /package/src/core/geom/{v3_length.js → vec3/v3_length.js} +0 -0
- /package/src/core/geom/{v3_length_sqr.js → vec3/v3_length_sqr.js} +0 -0
- /package/src/core/geom/{v3_slerp.js → vec3/v3_slerp.js} +0 -0
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import LineBuilder from "../../codegen/LineBuilder.js";
|
|
2
|
-
import SchemeRegistry from "../../model/scheme/SchemeRegistry.js";
|
|
3
|
-
|
|
4
|
-
function JsonSerializer(registry = new SchemeRegistry()) {
|
|
5
|
-
this.registry = registry;
|
|
6
|
-
this.serializers = {};
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
* @param value
|
|
12
|
-
* @param {Type} type
|
|
13
|
-
* @param {Map} visitedObjects
|
|
14
|
-
* @private
|
|
15
|
-
*/
|
|
16
|
-
JsonSerializer.prototype.__serialize = function (value, type, visitedObjects) {
|
|
17
|
-
const existing = visitedObjects.get(value);
|
|
18
|
-
if (existing !== undefined) {
|
|
19
|
-
//cycle detected
|
|
20
|
-
return existing;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const serializer = this.getSerializer(typeName);
|
|
24
|
-
|
|
25
|
-
const result = serializer(value);
|
|
26
|
-
|
|
27
|
-
visitedObjects.put(value, result);
|
|
28
|
-
|
|
29
|
-
return result;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
JsonSerializer.prototype.serialize = function (value) {
|
|
33
|
-
const type = value.constructor.@schema;
|
|
34
|
-
|
|
35
|
-
return this.__serialize(value, type, new Map());
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
JsonSerializer.prototype.addSerializer = function (name, serializer) {
|
|
39
|
-
this.serializers[name] = serializer;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
*
|
|
44
|
-
* @param {String} typeName
|
|
45
|
-
* @returns {function}
|
|
46
|
-
*/
|
|
47
|
-
JsonSerializer.prototype.getSerializer = function (typeName) {
|
|
48
|
-
let serializer = this.serializers[typeName];
|
|
49
|
-
|
|
50
|
-
if (serializer === undefined) {
|
|
51
|
-
const schema = this.registry.get(typeName);
|
|
52
|
-
serializer = this.buildSerializer(schema);
|
|
53
|
-
this.addSerializer(typeName, serializer);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return serializer;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
*
|
|
61
|
-
* @param {Type} type
|
|
62
|
-
*/
|
|
63
|
-
JsonSerializer.prototype.buildSerializer = function (type) {
|
|
64
|
-
|
|
65
|
-
const fields = type.fields;
|
|
66
|
-
|
|
67
|
-
const fieldSerializers = [];
|
|
68
|
-
const fieldCount = fields.length;
|
|
69
|
-
|
|
70
|
-
const serializerNames = [];
|
|
71
|
-
|
|
72
|
-
for (let i = 0; i < fieldCount; i++) {
|
|
73
|
-
const field = fields[i];
|
|
74
|
-
|
|
75
|
-
const fieldType = field.type;
|
|
76
|
-
|
|
77
|
-
serializerNames[i] = "$" + field.name;
|
|
78
|
-
|
|
79
|
-
fieldSerializers[i] = this.getSerializer(fieldType.name);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const lb = new LineBuilder();
|
|
83
|
-
|
|
84
|
-
lb.add("return function(value){")
|
|
85
|
-
.indent()
|
|
86
|
-
.add("return {")
|
|
87
|
-
.indent();
|
|
88
|
-
|
|
89
|
-
for (let i = 0; i < fieldCount; i++) {
|
|
90
|
-
const field = fields[i];
|
|
91
|
-
|
|
92
|
-
const serializerName = serializerNames[i];
|
|
93
|
-
|
|
94
|
-
const lastLine = i + 1 >= fieldCount;
|
|
95
|
-
|
|
96
|
-
const accessorSnippet = "value." + field.name + (field.observed ? ".get()" : "");
|
|
97
|
-
const serializedValueSnippet = serializerName + "(" + accessorSnippet + ")";
|
|
98
|
-
|
|
99
|
-
lb.add(field.name + " : " + serializedValueSnippet + (lastLine ? "" : ","));
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
lb.dedent()
|
|
103
|
-
.add("};")
|
|
104
|
-
.dedent()
|
|
105
|
-
.add("};");
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
const builder = new Function(serializerNames, lb.build());
|
|
109
|
-
|
|
110
|
-
return builder(fieldSerializers);
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
export default JsonSerializer;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* @param {number} r 0 to 255
|
|
4
|
-
* @param {number} g 0 to 255
|
|
5
|
-
* @param {number} b 0 to 255
|
|
6
|
-
* @returns {{h: number, s: number, v: number}}
|
|
7
|
-
*/
|
|
8
|
-
export function rgb2hsv(r, g, b) {
|
|
9
|
-
|
|
10
|
-
r /= 255;
|
|
11
|
-
g /= 255;
|
|
12
|
-
b /= 255;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const max = Math.max(r, g, b);
|
|
16
|
-
const min = Math.min(r, g, b);
|
|
17
|
-
|
|
18
|
-
var h, s, v = max;
|
|
19
|
-
|
|
20
|
-
var d = max - min;
|
|
21
|
-
|
|
22
|
-
s = max === 0 ? 0 : d / max;
|
|
23
|
-
|
|
24
|
-
if (max === min) {
|
|
25
|
-
h = 0; // achromatic
|
|
26
|
-
} else {
|
|
27
|
-
switch (max) {
|
|
28
|
-
case r:
|
|
29
|
-
h = (g - b) / d + (g < b ? 6 : 0);
|
|
30
|
-
break;
|
|
31
|
-
case g:
|
|
32
|
-
h = (b - r) / d + 2;
|
|
33
|
-
break;
|
|
34
|
-
case b:
|
|
35
|
-
h = (r - g) / d + 4;
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
h /= 6;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return {
|
|
43
|
-
h,
|
|
44
|
-
s,
|
|
45
|
-
v
|
|
46
|
-
};
|
|
47
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { rgb2uint24 } from "./rgb2uint24.js";
|
|
2
|
-
|
|
3
|
-
export function rgb_to_YCbCr_uint24(r, g, b) {
|
|
4
|
-
const Y = 0.299 * r + 0.587 * g + 0.114 * b;
|
|
5
|
-
const Cb = -0.169 * r - 0.331 * g + 0.499 * b + 128;
|
|
6
|
-
const Cr = 0.499 * g - 0.418 * g - 0.0813 * b + 128;
|
|
7
|
-
/**
|
|
8
|
-
*
|
|
9
|
-
* @see https://en.wikipedia.org/wiki/YUV
|
|
10
|
-
* @param {number} r
|
|
11
|
-
* @param {number} g
|
|
12
|
-
* @param {number} b
|
|
13
|
-
* @returns {number}
|
|
14
|
-
*/
|
|
15
|
-
return rgb2uint24(Y,Cb,Cr);
|
|
16
|
-
}
|
|
@@ -1,440 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Created by Alex on 01/09/2014.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { assert } from "../assert.js";
|
|
7
|
-
import { dispatchViaProxy } from "../events/signal/Signal.js";
|
|
8
|
-
import Graph from "../graph/Graph.js";
|
|
9
|
-
import Future from "../process/Future.js";
|
|
10
|
-
import Transition from "./Transition.js";
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
* @enum {number}
|
|
15
|
-
*/
|
|
16
|
-
export const StateMachineEventType = {
|
|
17
|
-
StateEntered: 0,
|
|
18
|
-
StateExited: 1
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @template {T}
|
|
23
|
-
* @constructor
|
|
24
|
-
*/
|
|
25
|
-
function StateMachine() {
|
|
26
|
-
this.graph = new Graph();
|
|
27
|
-
this.state = null;
|
|
28
|
-
this.isLocked = false;
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
*
|
|
32
|
-
* @type {Map<any, Array>}
|
|
33
|
-
*/
|
|
34
|
-
this.stateProcessorMap = new Map();
|
|
35
|
-
|
|
36
|
-
this.stateEntryHandlers = new Map();
|
|
37
|
-
this.stateExitHandlers = new Map();
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Used for debug mainly
|
|
41
|
-
* @type {Array<T>}
|
|
42
|
-
* @private
|
|
43
|
-
*/
|
|
44
|
-
this.__history = [];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
*
|
|
49
|
-
* @param {T} source
|
|
50
|
-
* @param {T} target
|
|
51
|
-
* @param {Transition~action} action
|
|
52
|
-
* @param {Transition~condition} [condition]
|
|
53
|
-
* @returns {Transition}
|
|
54
|
-
*/
|
|
55
|
-
StateMachine.prototype.createTransition = function (source, target, action, condition) {
|
|
56
|
-
const transition = new Transition(source, target, action, condition);
|
|
57
|
-
this.addTransition(transition);
|
|
58
|
-
return transition;
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
*
|
|
63
|
-
* @param {T} state
|
|
64
|
-
* @param {StateMachineEventType} type
|
|
65
|
-
* @param {function} handler
|
|
66
|
-
*/
|
|
67
|
-
StateMachine.prototype.addEventHandler = function (state, type, handler) {
|
|
68
|
-
let eventMap;
|
|
69
|
-
|
|
70
|
-
if (type === StateMachineEventType.StateEntered) {
|
|
71
|
-
eventMap = this.stateEntryHandlers;
|
|
72
|
-
} else if (type === StateMachineEventType.StateExited) {
|
|
73
|
-
eventMap = this.stateExitHandlers;
|
|
74
|
-
} else {
|
|
75
|
-
throw new Error(`Unknown event type '${type}'`);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const handlers = eventMap.get(state);
|
|
79
|
-
if (handlers === undefined) {
|
|
80
|
-
eventMap.set(state, [handler]);
|
|
81
|
-
} else {
|
|
82
|
-
handlers.push(handler);
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
*
|
|
88
|
-
* @param {T} state
|
|
89
|
-
* @param {StateMachineEventType} type
|
|
90
|
-
* @param {function} handler
|
|
91
|
-
*/
|
|
92
|
-
StateMachine.prototype.removeEventHandler = function (state, type, handler) {
|
|
93
|
-
let eventMap;
|
|
94
|
-
|
|
95
|
-
if (type === StateMachineEventType.StateEntered) {
|
|
96
|
-
eventMap = this.stateEntryHandlers;
|
|
97
|
-
} else if (type === StateMachineEventType.StateExited) {
|
|
98
|
-
eventMap = this.stateExitHandlers;
|
|
99
|
-
} else {
|
|
100
|
-
throw new Error(`Unknown event type '${type}'`);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const handlers = eventMap.get(state);
|
|
105
|
-
if (handlers === undefined) {
|
|
106
|
-
//no handlers, clearly handler was not registered
|
|
107
|
-
console.warn('No listeners registered');
|
|
108
|
-
} else {
|
|
109
|
-
const i = handlers.indexOf(handler);
|
|
110
|
-
|
|
111
|
-
if (i === -1) {
|
|
112
|
-
console.warn('Listener not found');
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
handlers.splice(i, 1);
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
*
|
|
122
|
-
* @param {Transition} t
|
|
123
|
-
*/
|
|
124
|
-
StateMachine.prototype.addTransition = function (t) {
|
|
125
|
-
this.graph.addEdge(t);
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
*
|
|
130
|
-
* @param {T} s
|
|
131
|
-
*/
|
|
132
|
-
StateMachine.prototype.addState = function (s) {
|
|
133
|
-
this.graph.addNode(s);
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
*
|
|
138
|
-
* @param {T} state
|
|
139
|
-
* @param {function():Promise<T>} processor
|
|
140
|
-
*/
|
|
141
|
-
StateMachine.prototype.addStateProcessor = function (state, processor) {
|
|
142
|
-
assert.notEqual(state, undefined, 'state was undefined');
|
|
143
|
-
assert.equal(typeof processor, 'function', `processor must be a function, instead was '${typeof processor}'`)
|
|
144
|
-
|
|
145
|
-
if (!this.graph.containsNode(state)) {
|
|
146
|
-
throw new Error(`State ${state} is not found in the graph`);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
const processors = this.stateProcessorMap.get(state);
|
|
150
|
-
|
|
151
|
-
if (processors === undefined) {
|
|
152
|
-
this.stateProcessorMap.set(state, [processor]);
|
|
153
|
-
} else {
|
|
154
|
-
processors.push(state);
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
*
|
|
160
|
-
* @param {Array.<*>} states
|
|
161
|
-
*/
|
|
162
|
-
StateMachine.prototype.addAllStates = function (states) {
|
|
163
|
-
let i = 0;
|
|
164
|
-
const l = states.length;
|
|
165
|
-
for (; i < l; i++) {
|
|
166
|
-
this.addState(states[i]);
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
*
|
|
173
|
-
* @param {T} s
|
|
174
|
-
*/
|
|
175
|
-
StateMachine.prototype.setState = function (s) {
|
|
176
|
-
// console.warn('setState', s);
|
|
177
|
-
|
|
178
|
-
const oldState = this.state;
|
|
179
|
-
|
|
180
|
-
this.state = s;
|
|
181
|
-
|
|
182
|
-
const exitHandlers = this.stateExitHandlers.get(oldState);
|
|
183
|
-
|
|
184
|
-
if (exitHandlers !== undefined) {
|
|
185
|
-
dispatchViaProxy(exitHandlers, [oldState, s]);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
const entryHandlers = this.stateEntryHandlers.get(s);
|
|
189
|
-
|
|
190
|
-
if (entryHandlers !== undefined) {
|
|
191
|
-
dispatchViaProxy(entryHandlers, [s, oldState]);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
this.__history.push(s);
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
*
|
|
199
|
-
* @returns {T}
|
|
200
|
-
*/
|
|
201
|
-
StateMachine.prototype.getState = function () {
|
|
202
|
-
return this.state;
|
|
203
|
-
};
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Causes the state machine to enter a given state
|
|
207
|
-
* @param {T} s
|
|
208
|
-
*/
|
|
209
|
-
StateMachine.prototype.enterState = function (s) {
|
|
210
|
-
if (this.isLocked) {
|
|
211
|
-
throw new Error(`State Machine is locked, unable to set state from '${this.state}' to '${s}'`);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
this.setState(s);
|
|
215
|
-
|
|
216
|
-
//try all state processors in turn until all have been tried and failed or one has succeeded
|
|
217
|
-
const processors = this.stateProcessorMap.get(s);
|
|
218
|
-
|
|
219
|
-
const self = this;
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
function executeStateProcessors(sm, processors) {
|
|
223
|
-
|
|
224
|
-
let i = 0;
|
|
225
|
-
const numProcessors = processors.length;
|
|
226
|
-
|
|
227
|
-
function lockSM() {
|
|
228
|
-
sm.isLocked = true;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
function unlockSM() {
|
|
232
|
-
sm.isLocked = false;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
function executeNext() {
|
|
236
|
-
|
|
237
|
-
const processor = processors[i];
|
|
238
|
-
|
|
239
|
-
i++;
|
|
240
|
-
|
|
241
|
-
let pendingProcess;
|
|
242
|
-
|
|
243
|
-
try {
|
|
244
|
-
pendingProcess = processor();
|
|
245
|
-
} catch (e) {
|
|
246
|
-
console.warn('Exception in state processor function, treating as failure and continuing.', e);
|
|
247
|
-
handleTaskFailure();
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
assert.ok((pendingProcess instanceof Promise || pendingProcess instanceof Future), `processor must return a promise or a future, instead returned something else (${pendingProcess})`);
|
|
252
|
-
|
|
253
|
-
self.__pendingProcess = pendingProcess;
|
|
254
|
-
|
|
255
|
-
pendingProcess.then(handleTaskCompletion, handleTaskFailure);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
function handleTaskCompletion(newState) {
|
|
259
|
-
if (!self.graph.containsNode(newState)) {
|
|
260
|
-
//produced state is not contained in the graph, treat as failure
|
|
261
|
-
console.error(`Processor produced state that is not present in the graph, treating as failure.`);
|
|
262
|
-
|
|
263
|
-
handleTaskFailure();
|
|
264
|
-
} else {
|
|
265
|
-
let foundTraversableEdge = false;
|
|
266
|
-
|
|
267
|
-
self.graph.findTraversableEdges(s, newState, function (edge) {
|
|
268
|
-
foundTraversableEdge = true;
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
if (!foundTraversableEdge) {
|
|
272
|
-
console.error(`Processor requests an illegal move from state '${s}' to '${newState}', no valid transition exists. Treating as failure`);
|
|
273
|
-
handleTaskFailure();
|
|
274
|
-
} else {
|
|
275
|
-
//unlock
|
|
276
|
-
unlockSM();
|
|
277
|
-
//transition
|
|
278
|
-
self.enterState(newState);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
function handleTaskFailure() {
|
|
284
|
-
if (i === numProcessors) {
|
|
285
|
-
//we're done
|
|
286
|
-
unlockSM();
|
|
287
|
-
} else {
|
|
288
|
-
executeNext();
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
lockSM();
|
|
293
|
-
|
|
294
|
-
executeNext();
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
if (processors === undefined || processors.length === 0) {
|
|
298
|
-
//no state processors
|
|
299
|
-
} else {
|
|
300
|
-
executeStateProcessors(this, processors);
|
|
301
|
-
}
|
|
302
|
-
};
|
|
303
|
-
|
|
304
|
-
StateMachine.prototype.canTransitionTo = function (nextState) {
|
|
305
|
-
const source = this.state;
|
|
306
|
-
let result = false;
|
|
307
|
-
this.traverseValidTransitions(function (node, edge) {
|
|
308
|
-
if (node === nextState && edge.condition(source, node)) {
|
|
309
|
-
result = true;
|
|
310
|
-
//stop traversal
|
|
311
|
-
return false;
|
|
312
|
-
}
|
|
313
|
-
});
|
|
314
|
-
return result;
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
*
|
|
319
|
-
* @param {Graph~visitor} visitor
|
|
320
|
-
*/
|
|
321
|
-
StateMachine.prototype.traverseValidTransitions = function (visitor) {
|
|
322
|
-
const source = this.state;
|
|
323
|
-
this.graph.traverseSuccessors(source, function (node, edge) {
|
|
324
|
-
if (edge.condition(source, node)) {
|
|
325
|
-
return visitor(node, edge);
|
|
326
|
-
}
|
|
327
|
-
});
|
|
328
|
-
};
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
/**
|
|
332
|
-
*
|
|
333
|
-
* @param {Transition} transition
|
|
334
|
-
* @param {T} targetState
|
|
335
|
-
* @returns {Promise}
|
|
336
|
-
*/
|
|
337
|
-
StateMachine.prototype.transitionOn = function (transition, targetState) {
|
|
338
|
-
assert.equal(transition.second, targetState, `transition destination is not equal to targetState`);
|
|
339
|
-
|
|
340
|
-
const sm = this;
|
|
341
|
-
return new Promise(function (resolve, reject) {
|
|
342
|
-
if (transition === null) {
|
|
343
|
-
//no transition was found
|
|
344
|
-
reject("no transition found");
|
|
345
|
-
}
|
|
346
|
-
//check lock on state machine
|
|
347
|
-
if (sm.isLocked) {
|
|
348
|
-
reject("state machine is locked, can not execute transition");
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
const stateFrom = sm.state;
|
|
352
|
-
|
|
353
|
-
//lock state machine
|
|
354
|
-
sm.isLocked = true;
|
|
355
|
-
|
|
356
|
-
let promise;
|
|
357
|
-
|
|
358
|
-
try {
|
|
359
|
-
promise = transition.action(stateFrom, targetState);
|
|
360
|
-
} catch (e) {
|
|
361
|
-
//failed to perform transition
|
|
362
|
-
promise = Promise.reject(e);
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
function handleTransitionSuccess() {
|
|
366
|
-
sm.isLocked = false;
|
|
367
|
-
sm.enterState(targetState);
|
|
368
|
-
resolve();
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
function handleTransitionFailed(e) {
|
|
372
|
-
sm.isLocked = false;
|
|
373
|
-
reject(e);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
promise.then(handleTransitionSuccess, handleTransitionFailed);
|
|
377
|
-
});
|
|
378
|
-
};
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
*
|
|
382
|
-
* @param {T} nextState Adjacent state
|
|
383
|
-
* @returns {Promise}
|
|
384
|
-
*/
|
|
385
|
-
StateMachine.prototype.transitionTo = function (nextState) {
|
|
386
|
-
const sm = this;
|
|
387
|
-
const state = sm.state;
|
|
388
|
-
|
|
389
|
-
return new Promise(function (resolve, reject) {
|
|
390
|
-
if (state === nextState) {
|
|
391
|
-
//already there
|
|
392
|
-
resolve();
|
|
393
|
-
}
|
|
394
|
-
let transition = null;
|
|
395
|
-
|
|
396
|
-
sm.traverseValidTransitions(function (target, t) {
|
|
397
|
-
if (t.second !== nextState) {
|
|
398
|
-
//wrong target
|
|
399
|
-
return;
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
transition = t;
|
|
403
|
-
//stop traversal
|
|
404
|
-
return false;
|
|
405
|
-
});
|
|
406
|
-
|
|
407
|
-
sm.transitionOn(transition, nextState).then(resolve, reject);
|
|
408
|
-
});
|
|
409
|
-
};
|
|
410
|
-
|
|
411
|
-
/**
|
|
412
|
-
*
|
|
413
|
-
* @param {*} targetState
|
|
414
|
-
* @returns {Promise}
|
|
415
|
-
*/
|
|
416
|
-
StateMachine.prototype.navigateTo = function (targetState) {
|
|
417
|
-
//find path
|
|
418
|
-
const graph = this.graph;
|
|
419
|
-
|
|
420
|
-
const start = this.state;
|
|
421
|
-
|
|
422
|
-
const path = graph.findPath(start, targetState);
|
|
423
|
-
|
|
424
|
-
if (path === null) {
|
|
425
|
-
return Promise.reject(`no path found from ${start} to '${targetState}'`);
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
let result = Promise.resolve();
|
|
429
|
-
|
|
430
|
-
let i = 1;
|
|
431
|
-
const l = path.length;
|
|
432
|
-
for (; i < l; i++) {
|
|
433
|
-
const next = path[i];
|
|
434
|
-
result = result.then(this.transitionTo(next));
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
return result;
|
|
438
|
-
};
|
|
439
|
-
|
|
440
|
-
export { StateMachine };
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Created by Alex on 24/03/2016.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { Edge, EdgeDirectionType } from "../graph/Edge.js";
|
|
7
|
-
|
|
8
|
-
const TransitionExecutionMode = {
|
|
9
|
-
Synchronous: 0,
|
|
10
|
-
Asynchronous: 1
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @callback Transition~action
|
|
15
|
-
* @param {*} source Node of transition origin
|
|
16
|
-
* @param {*} target Node of destination
|
|
17
|
-
* @returns {Promise} Promise is evaluated to perform transition, and transition is not finished until promise is resolved
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @callback Transition~condition
|
|
22
|
-
* @param {*} source
|
|
23
|
-
* @param {*} target
|
|
24
|
-
* @returns {boolean} judgement on validity of transition from source to target
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
*
|
|
29
|
-
* @param {*} source
|
|
30
|
-
* @param {*} target
|
|
31
|
-
* @returns {boolean}
|
|
32
|
-
*/
|
|
33
|
-
function fTrue(source, target) {
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
class Transition extends Edge {
|
|
38
|
-
/**
|
|
39
|
-
*
|
|
40
|
-
* @param {*} source
|
|
41
|
-
* @param {*} target
|
|
42
|
-
* @param {Transition~action} action
|
|
43
|
-
* @param {Transition~condition} condition
|
|
44
|
-
* @constructor
|
|
45
|
-
* @extends Edge
|
|
46
|
-
*/
|
|
47
|
-
constructor(source, target, action, condition) {
|
|
48
|
-
super(source, target);
|
|
49
|
-
//make it a directed edge
|
|
50
|
-
this.direction = EdgeDirectionType.Forward;
|
|
51
|
-
|
|
52
|
-
this.action = action;
|
|
53
|
-
this.condition = (typeof condition === "function") ? condition : fTrue;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* @inheritDoc Transition~action
|
|
58
|
-
*/
|
|
59
|
-
static EmptyAction(source, target) {
|
|
60
|
-
return Promise.resolve();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
export default Transition;
|
package/src/core/geom/Bezier.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* @param {Vector2} result
|
|
4
|
-
* @param {number} p0x
|
|
5
|
-
* @param {number} p0y
|
|
6
|
-
* @param {number} p1x
|
|
7
|
-
* @param {number} p1y
|
|
8
|
-
* @param {number} p2x
|
|
9
|
-
* @param {number} p2y
|
|
10
|
-
* @param {number} t
|
|
11
|
-
*/
|
|
12
|
-
export function computeQuadraticBezier2D(result, p0x, p0y, p1x, p1y, p2x, p2y, t) {
|
|
13
|
-
const minus = 1 - t;
|
|
14
|
-
const minus2 = minus * minus;
|
|
15
|
-
|
|
16
|
-
const f = minus * 2 * t;
|
|
17
|
-
const t2 = t * t;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const x0 = p0x * minus2 + p1x * f + p2x * t2;
|
|
21
|
-
const y0 = p0y * minus2 + p1y * f + p2y * t2;
|
|
22
|
-
|
|
23
|
-
result.set(x0, y0);
|
|
24
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { computeQuadraticBezier2D } from "./Bezier.js";
|
|
2
|
-
import Vector2 from "./Vector2.js";
|
|
3
|
-
|
|
4
|
-
test("computeQuadraticBezier2D hits knots",()=>{
|
|
5
|
-
const v2 = new Vector2();
|
|
6
|
-
|
|
7
|
-
computeQuadraticBezier2D(v2,1,3,5,7,11,13,0);
|
|
8
|
-
|
|
9
|
-
expect(v2.x).toBeCloseTo(1);
|
|
10
|
-
expect(v2.y).toBeCloseTo(3);
|
|
11
|
-
|
|
12
|
-
computeQuadraticBezier2D(v2,1,3,5,7,11,13,1);
|
|
13
|
-
|
|
14
|
-
expect(v2.x).toBeCloseTo(11);
|
|
15
|
-
expect(v2.y).toBeCloseTo(13);
|
|
16
|
-
});
|