@woosh/meep-engine 2.37.18 → 2.38.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/core/assert.js +1 -1
- package/core/binary/float2uint8.js +8 -0
- package/core/binary/uint82float.js +8 -0
- package/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +6 -4
- package/core/collection/array/array_get_index_in_range.js +16 -0
- package/core/collection/array/typed/isTypedArray.js +20 -0
- package/core/collection/array/typedArrayToDataType.js +1 -0
- package/{engine/navigation/grid → core/collection/heap}/BinaryHeap.js +6 -1
- package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.js +3 -2
- package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.spec.js +3 -3
- package/core/collection/heap/Uin32Heap.spec.js +59 -0
- package/core/collection/heap/Uint32Heap.js +385 -0
- package/core/collection/list/List.d.ts +1 -1
- package/core/collection/table/RowFirstTable.js +34 -0
- package/core/collection/table/RowFirstTable.spec.js +59 -1
- package/core/color/Color.js +83 -1
- package/core/color/YCbCr_to_rgb_uint24.js +3 -4
- package/core/color/hsv2rgb.js +4 -3
- package/core/color/linear_to_sRGB.js +4 -5
- package/core/color/rgb2hex.js +1 -1
- package/core/color/rgb2uint24.js +6 -4
- package/core/color/rgb_to_YCbCr_uint24.js +11 -13
- package/core/events/signal/Signal.d.ts +11 -9
- package/core/events/signal/Signal.spec.js +16 -0
- package/core/geom/2d/quad-tree/qt_collect_by_circle.js +67 -0
- package/core/geom/3d/topology/computeTopoMeshVertexDuplicates.js +9 -6
- package/core/geom/3d/topology/expandConnectivityByLocality.js +5 -5
- package/core/geom/3d/topology/query/query_edge_is_boundary.js +7 -0
- package/core/geom/3d/topology/query/query_edge_is_manifold.js +13 -0
- package/core/geom/3d/topology/query/query_edge_is_manifold_or_boundary.js +11 -0
- package/core/geom/3d/topology/query/query_edge_is_wire.js +13 -0
- package/core/geom/3d/topology/query/query_edge_other_vertex.js +20 -0
- package/core/geom/3d/topology/query/query_edge_share_vert.js +9 -0
- package/core/geom/3d/topology/query/query_face_get_other_edges.js +39 -0
- package/core/geom/3d/topology/query/query_face_next_vertex.js +19 -0
- package/core/geom/3d/topology/query/query_face_prev_vertex.js +18 -0
- package/core/geom/3d/topology/query/query_vertex_in_edge.js +14 -0
- package/core/geom/3d/topology/query/query_vertex_pair_share_face.js +24 -0
- package/core/geom/3d/topology/query/query_vertices_in_edge.js +19 -0
- package/core/geom/3d/topology/simplify/collapseEdge.spec.js +3 -5
- package/core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js +8 -10
- package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +12 -2
- package/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +277 -0
- package/core/geom/3d/topology/simplify/edge_collapse_quadratic.js +126 -0
- package/core/geom/3d/topology/simplify/prototypeMeshSimplification.js +502 -0
- package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +37 -5
- package/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js +86 -1
- package/core/geom/3d/topology/simplify/simplifyTopoMesh.js +4 -4
- package/core/geom/3d/topology/simplify/simplifyTopoMesh2.js +119 -0
- package/core/geom/3d/topology/simplify/tm_edge_collapse_is_degenerate_flip.js +81 -0
- package/core/geom/3d/topology/{TopoEdge.js → struct/TopoEdge.js} +47 -20
- package/core/geom/3d/topology/{TopoEdge.spec.js → struct/TopoEdge.spec.js} +0 -0
- package/core/geom/3d/topology/{TopoMesh.js → struct/TopoMesh.js} +20 -41
- package/core/geom/3d/topology/{TopoTriangle.js → struct/TopoTriangle.js} +15 -25
- package/core/geom/3d/topology/{TopoVertex.js → struct/TopoVertex.js} +21 -4
- package/core/geom/3d/topology/{TopoVertex.spec.js → struct/TopoVertex.spec.js} +0 -0
- package/core/geom/3d/topology/tm_edge_kill.js +24 -0
- package/core/geom/3d/topology/tm_edge_splice.js +42 -0
- package/core/geom/3d/topology/tm_face_area.js +18 -0
- package/core/geom/3d/topology/tm_face_kill.js +12 -0
- package/core/geom/3d/topology/tm_face_normal.js +14 -0
- package/core/geom/3d/topology/tm_kill_only_edge.js +35 -0
- package/core/geom/3d/topology/tm_kill_only_face.js +12 -0
- package/core/geom/3d/topology/tm_kill_only_vert.js +14 -0
- package/core/geom/3d/topology/tm_vert_kill.js +19 -0
- package/core/geom/3d/topology/tm_vert_splice.js +64 -0
- package/core/geom/3d/topology/tm_vertex_compute_normal.js +42 -0
- package/core/geom/3d/topology/topoMeshToBufferGeometry.js +18 -4
- package/core/geom/3d/topology/weld_duplicate_vertices.js +63 -0
- package/core/geom/Quaternion.d.ts +21 -1
- package/core/geom/Quaternion.js +279 -200
- package/core/geom/Quaternion.spec.js +71 -2
- package/core/geom/Vector2.js +3 -3
- package/core/geom/Vector3.d.ts +2 -0
- package/core/geom/Vector3.js +31 -7
- package/core/geom/Vector3.schema.json +16 -0
- package/core/geom/Vector4.js +16 -0
- package/core/geom/packing/MaxRectangles.js +1 -1
- package/core/graph/cluster_mesh_metis.js +16 -0
- package/core/graph/coarsen_graph.js +1 -1
- package/core/graph/graph_k_means_cluster.js +1 -1
- package/core/json/JsonUtils.js +2 -20
- package/core/math/bell_membership_function.js +19 -0
- package/core/math/exp2.js +8 -0
- package/core/math/interval/NumericInterval.js +17 -0
- package/core/math/physics/brdf/brdf_burley.js +25 -0
- package/core/math/physics/bsdf/bsdf_schlick.js +22 -0
- package/core/math/physics/irradiance/interpolate_irradiance_linear.js +18 -0
- package/{engine/sound/ecs/emitter/attenuate/attenuateSoundLogarithmic.js → core/math/physics/irradiance/interpolate_irradiance_lograrithmic.js} +2 -2
- package/{engine/sound/ecs/emitter/attenuate/attenuateSoundSmith.js → core/math/physics/irradiance/interpolate_irradiance_smith.js} +1 -1
- package/core/math/random/seededRandom.js +2 -31
- package/core/math/random/seededRandom_Mulberry32.js +31 -0
- package/core/math/random/seededRandom_sine.js +33 -0
- package/core/model/ObservedEnum.js +8 -0
- package/editor/Editor.js +97 -1
- package/editor/actions/concrete/ModifyPatchSampler2DAction.js +118 -0
- package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +30 -0
- package/editor/actions/concrete/PatchTerrainHeightAction.js +13 -105
- package/editor/ecs/component/FieldDescriptor.js +34 -0
- package/editor/ecs/component/FieldValueAdapter.js +20 -0
- package/editor/ecs/component/TypeEditor.js +33 -0
- package/editor/ecs/component/TypeSchema.d.ts +38 -0
- package/editor/ecs/component/createFieldEditor.js +90 -0
- package/editor/ecs/component/createObjectEditor.js +266 -60
- package/editor/ecs/component/editors/ColorEditor.js +39 -0
- package/editor/ecs/component/editors/HTMLElementEditor.js +17 -0
- package/editor/ecs/component/editors/ImagePathEditor.js +50 -0
- package/editor/ecs/component/editors/NumericIntervalEditor.js +86 -0
- package/editor/ecs/component/editors/ObservedBooleanEditor.js +13 -0
- package/editor/ecs/component/editors/ObservedEnumEditor.js +32 -0
- package/editor/ecs/component/editors/ObservedIntegerEditor.js +43 -0
- package/editor/ecs/component/editors/ObservedStringEditor.js +51 -0
- package/editor/ecs/component/editors/Sampler2DEditor.js +107 -0
- package/editor/ecs/component/editors/collection/ListEditor.js +83 -0
- package/editor/ecs/component/editors/common/BitFlagsEditor.js +80 -0
- package/editor/ecs/component/editors/common/EnumEditor.js +41 -0
- package/editor/ecs/component/editors/common/makeV3_editor.js +85 -0
- package/editor/ecs/component/editors/common/noEditor.js +9 -0
- package/editor/ecs/component/editors/ecs/GridObstacleEditor.js +17 -0
- package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.js +16 -0
- package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +44 -0
- package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +17 -0
- package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +58 -0
- package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +54 -0
- package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +21 -0
- package/editor/ecs/component/editors/ecs/Trail2DEditor.js +33 -0
- package/editor/ecs/component/editors/ecs/TransformEditor.js +23 -0
- package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.js +21 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +89 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.js +18 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.js +22 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.js +20 -0
- package/editor/ecs/component/editors/geom/QuaternionEditor.js +56 -0
- package/editor/ecs/component/editors/geom/Vector1Editor.js +57 -0
- package/editor/ecs/component/editors/geom/Vector2Editor.js +11 -0
- package/editor/ecs/component/editors/geom/Vector3Editor.js +13 -0
- package/editor/ecs/component/editors/geom/Vector4Editor.js +12 -0
- package/editor/ecs/component/editors/primitive/ArrayEditor.js +46 -0
- package/editor/ecs/component/editors/primitive/BooleanEditor.js +27 -0
- package/editor/ecs/component/editors/primitive/FunctionEditor.js +29 -0
- package/editor/ecs/component/editors/primitive/NumberEditor.js +60 -0
- package/editor/ecs/component/editors/primitive/ObjectEditor.js +12 -0
- package/editor/ecs/component/editors/primitive/StringEditor.js +31 -0
- package/editor/ecs/component/editors/three/BufferGeometryEditor.js +28 -0
- package/editor/ecs/component/editors/three/MaterialEditor.js +27 -0
- package/editor/ecs/component/editors/three/MeshEditor.js +35 -0
- package/editor/ecs/component/editors/three/TextureEditor.js +32 -0
- package/editor/ecs/component/findNearestRegisteredType.js +59 -0
- package/editor/ecs/component/prototypeObjectEditor.js +379 -0
- package/editor/tools/SelectionTool.js +1 -1
- package/editor/tools/paint/TerrainHeightPaintTool.js +88 -68
- package/editor/tools/paint/TerrainPaintTool.js +2 -1
- package/editor/tools/paint/TerrainTexturePaintTool.js +8 -73
- package/editor/view/EditorView.js +1 -1
- package/editor/view/ecs/ComponentControlView.js +2 -30
- package/editor/view/ecs/EntityEditor.js +61 -139
- package/editor/view/ecs/components/GridObstacleController.js +4 -4
- package/editor/view/ecs/components/TerrainController.js +1 -1
- package/editor/view/ecs/components/common/NumberController.js +19 -7
- package/editor/view/node-graph/NodeGraphView.js +2 -2
- package/editor/view/node-graph/NodeView.js +7 -9
- package/engine/animation/keyed2/AnimationTrack.js +1 -1
- package/engine/asset/AssetManager.d.ts +1 -1
- package/engine/asset/AssetManager.js +390 -388
- package/engine/asset/loaders/gltf/extensions/MSFT_texture_dds.js +14 -2
- package/engine/ecs/components/TagEditor.js +15 -0
- package/engine/ecs/fow/FogOfWarEditor.js +13 -0
- package/engine/ecs/parent/ParentEntitySystem.js +57 -0
- package/engine/ecs/terrain/ecs/OffsetScaleTransform2D.d.ts +6 -0
- package/engine/ecs/terrain/ecs/Terrain.js +44 -43
- package/engine/ecs/terrain/ecs/TerrainSystem.js +2 -2
- package/engine/ecs/terrain/ecs/layers/TerrainLayer.js +1 -1
- package/engine/ecs/terrain/ecs/splat/SplatMapping.js +26 -28
- package/engine/ecs/terrain/overlay/TerrainOverlay.js +71 -66
- package/engine/ecs/terrain/tiles/TerrainTileManager.js +23 -0
- package/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +1 -1
- package/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.js +13 -7
- package/engine/ecs/terrain/util/tensionOptimizeUV.js +1 -1
- package/engine/ecs/transform/Transform.d.ts +2 -0
- package/engine/ecs/transform/Transform.editor.schema.json +16 -0
- package/engine/ecs/transform/Transform.js +3 -0
- package/engine/graphics/ecs/highlight/HighlightEditor.js +17 -0
- package/engine/graphics/ecs/light/Light.js +0 -47
- package/engine/graphics/ecs/light/LightSerializationAdapter.js +50 -0
- package/engine/graphics/ecs/mesh/MeshEditor.js +28 -0
- package/engine/graphics/ecs/mesh-v2/DrawMode.js +2 -1
- package/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +3 -3
- package/engine/graphics/ecs/mesh-v2/build_three_object.js +3 -1
- package/engine/graphics/ecs/mesh-v2/sg_compute_hierarchy_bounding_box_by_parent_entity.js +31 -0
- package/engine/graphics/ecs/mesh-v2/sg_hierarchy_compute_bounding_box_via_parent_entity.d.ts +4 -0
- package/engine/graphics/ecs/sprite/Sprite.js +11 -0
- package/engine/graphics/ecs/sprite/SpriteSystemPE.js +133 -0
- package/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +1570 -0
- package/engine/graphics/micron/build/PatchRepresentation.js +7 -3
- package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +18 -8
- package/engine/graphics/micron/build/clustering/build_clustering_2.js +1 -1
- package/engine/graphics/micron/build/clustering/build_leaf_patches.js +2 -2
- package/engine/graphics/micron/build/clustering/build_leaf_patches_metis.js +1 -1
- package/engine/graphics/micron/build/hierarchy/buildAbstractPatchHierarchy.js +21 -3
- package/engine/graphics/micron/build/hierarchy/merge_patches.js +96 -43
- package/engine/graphics/micron/build/hierarchy/qvdr_build_simplified_clusters.js +11 -5
- package/engine/graphics/micron/format/VirtualGeometry.js +46 -3
- package/engine/graphics/micron/format/micron_build_proxy_geometry.js +4 -2
- package/engine/graphics/micron/prototypeVirtualGeometry.js +47 -10
- package/engine/graphics/micron/render/instanced/shader/shader_rewrite_standard.js +17 -17
- package/engine/graphics/micron/render/refinement/get_geometry_patch_cut.js +15 -3
- package/engine/graphics/micron/simplifyGeometry.js +1 -1
- package/engine/graphics/particles/particular/engine/ParticularEngine.js +5 -0
- package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +17 -9
- package/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +12 -10
- package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +7 -2
- package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +27 -0
- package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +80 -0
- package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +16 -4
- package/engine/graphics/shaders/TerrainShader.js +8 -8
- package/engine/graphics/texture/atlas/TextureAtlasDebugger.js +2 -1
- package/engine/graphics/texture/sampler/Sampler2D.js +206 -201
- package/engine/graphics/texture/sampler/Sampler2D.spec.js +34 -35
- package/engine/graphics/texture/sampler/bicubic.js +59 -0
- package/engine/graphics/texture/sampler/downsampleSample2D.spec.js +2 -2
- package/engine/graphics/texture/sampler/genericResampleSampler2D.js +0 -2
- package/engine/graphics/texture/sampler/prototypeSamplerFiltering.js +146 -0
- package/engine/graphics/texture/sampler/{downsampleSampler2D.js → sampler2D_scale_down_linear.js} +8 -4
- package/engine/graphics/texture/sampler/sampler2_d_scale_down_lanczos.js +140 -0
- package/engine/graphics/texture/sampler/scaleSampler2D.js +3 -3
- package/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js +1 -1
- package/engine/graphics/util/ScaleObject3ToBox.js +14 -1
- package/engine/graphics/util/makeMeshPreviewScene.js +2 -1
- package/engine/grid/components/GridObstacle.js +0 -44
- package/engine/grid/components/GridObstacleSerializationAdapter.js +46 -0
- package/engine/input/devices/PointerDevice.d.ts +1 -1
- package/engine/input/devices/PointerDevice.js +17 -2
- package/engine/input/ecs/util/TerrainCameraTargetSampler.js +2 -2
- package/engine/navigation/ecs/components/Path.d.ts +2 -0
- package/engine/navigation/ecs/components/Path.js +6 -1
- package/engine/navigation/ecs/components/computeNonuniformCatmullRomSplineSample.js +117 -0
- package/engine/navigation/grid/AStar.js +1 -1
- package/engine/navigation/grid/GridField.js +3 -2
- package/engine/platform/GetURLHash.js +27 -0
- package/engine/platform/WebEnginePlatform.js +1 -22
- package/engine/sound/ecs/emitter/SoundEmitter.js +10 -6
- package/engine/ui/DraggableAspect.js +2 -2
- package/generation/GridGenerator.js +7 -6
- package/generation/example/SampleGenerator0.js +39 -35
- package/generation/example/filters/SampleGroundMoistureFilter.js +58 -17
- package/generation/example/generators/interactive/mir_generator_place_buff_objects.js +7 -6
- package/generation/example/generators/mir_generator_place_bases.js +7 -3
- package/generation/example/generators/mir_generator_place_road_decorators.js +3 -3
- package/generation/example/generators/mir_generator_place_starting_point.js +3 -2
- package/generation/example/themes/SampleTheme0.js +11 -7
- package/generation/filtering/numeric/CellFilterLiteralFloat.js +5 -0
- package/generation/filtering/numeric/complex/CellFilterDilate.js +36 -0
- package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +15 -5
- package/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +53 -1
- package/generation/filtering/numeric/math/CellFilterMax2.js +3 -0
- package/generation/filtering/numeric/math/CellFilterMembershipGeneralizedBell.js +55 -0
- package/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +42 -0
- package/generation/filtering/numeric/sampling/CellFilterSampleLayerCubic.js +36 -0
- package/generation/filtering/numeric/sampling/CellFilterSampleLayerLinear.js +41 -0
- package/generation/grid/GridData.d.ts +5 -1
- package/generation/grid/GridData.js +35 -36
- package/generation/grid/MarkerMatchCounter.js +5 -3
- package/generation/grid/generation/discrete/GridTaskConnectRooms.js +1 -1
- package/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +1 -1
- package/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +1 -1
- package/generation/grid/generation/road/GridTaskGenerateRoads.js +1 -1
- package/generation/markers/GridActionRuleSet.js +15 -32
- package/generation/markers/GridCellActionPlaceMarker.js +12 -8
- package/generation/markers/debug/visualizeMarkers.js +56 -36
- package/generation/markers/emitter/MarkerNodeEmitterFromAction.js +8 -8
- package/generation/markers/prototypeGridCellActionPlaceMarker.js +209 -0
- package/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +1 -5
- package/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +2 -2
- package/generation/placement/GridCellPlacementRule.js +31 -25
- package/generation/theme/ThemeEngine.js +1 -1
- package/package.json +1 -1
- package/samples/terrain/from_image.js +7 -3
- package/samples/terrain/main.js +1 -1
- package/view/View.js +23 -1
- package/view/common/LabelView.js +1 -1
- package/view/compose3x3transform.js +32 -8
- package/view/controller/dat/DatGuiUtils.js +1 -1
- package/view/elements/DropDownSelectionView.js +11 -3
- package/view/elements/image/ImageView.js +3 -1
- package/core/model/ObservedReal.js +0 -55
- package/editor/ecs/component/ObjectEditor.js +0 -0
- package/engine/graphics/particles/particular/engine/renderers/SoftBillboardParticleRenderer.js +0 -7
- package/engine/sound/ecs/emitter/attenuate/attenuateSoundLinear.js +0 -11
- package/generation/filtering/numeric/CellFilterReadGridLayer.js +0 -73
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { REVISION } from 'three';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* DDS Texture Extension
|
|
3
5
|
*
|
|
@@ -28,7 +30,17 @@ export default class GLTFTextureDDSExtension {
|
|
|
28
30
|
return null;
|
|
29
31
|
}
|
|
30
32
|
const extensionDef = textureDef.extensions[this.name];
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
+
const source_index = extensionDef.source;
|
|
34
|
+
|
|
35
|
+
const source = json.images[source_index];
|
|
36
|
+
|
|
37
|
+
if (REVISION <= 137) {
|
|
38
|
+
|
|
39
|
+
return this.parser.loadTextureImage(textureIndex, source, this.ddsLoader);
|
|
40
|
+
|
|
41
|
+
} else {
|
|
42
|
+
// API of GLTFLoader has changed after 137
|
|
43
|
+
return this.parser.loadTextureImage(textureIndex, source_index, this.ddsLoader);
|
|
44
|
+
}
|
|
33
45
|
}
|
|
34
46
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ObjectEditor } from "../../../editor/ecs/component/editors/primitive/ObjectEditor.js";
|
|
2
|
+
|
|
3
|
+
export class TagEditor extends ObjectEditor {
|
|
4
|
+
get schema() {
|
|
5
|
+
return {
|
|
6
|
+
additionalProperties: false,
|
|
7
|
+
properties: {
|
|
8
|
+
values: {
|
|
9
|
+
type: Array,
|
|
10
|
+
type_parameters: [String]
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -162,4 +162,61 @@ export class ParentEntitySystem extends AbstractContextSystem {
|
|
|
162
162
|
|
|
163
163
|
return parent.entity;
|
|
164
164
|
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
*
|
|
168
|
+
* @param {number[]} result
|
|
169
|
+
* @param {number} result_offset
|
|
170
|
+
* @param {EntityComponentDataset} ecd
|
|
171
|
+
* @param {number} entity
|
|
172
|
+
* @returns {number}
|
|
173
|
+
*/
|
|
174
|
+
static findChildrenOf(result, result_offset, ecd, entity) {
|
|
175
|
+
let result_cursor = result_offset;
|
|
176
|
+
ecd.traverseComponents(ParentEntity, (p, e) => {
|
|
177
|
+
if (p.entity === entity) {
|
|
178
|
+
result[result_cursor++] = e;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
return result_cursor - result_offset;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
*
|
|
187
|
+
* @param {EntityComponentDataset} ecd
|
|
188
|
+
* @param {number} root_entity
|
|
189
|
+
* @param {function(number, EntityComponentDataset)} callback
|
|
190
|
+
* @param {*} [thisArg]
|
|
191
|
+
*/
|
|
192
|
+
static traverse(ecd, root_entity, callback, thisArg) {
|
|
193
|
+
traverse(ecd, root_entity, callback, thisArg);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
*
|
|
199
|
+
* @param {EntityComponentDataset} ecd
|
|
200
|
+
* @param {number} root_entity
|
|
201
|
+
* @param {function(number, EntityComponentDataset)} callback
|
|
202
|
+
* @param {*} [thisArg]
|
|
203
|
+
* @param {number[]} path keep track of where we came from, this is used to detect cycles
|
|
204
|
+
*/
|
|
205
|
+
function traverse(ecd, root_entity, callback, thisArg, path = []) {
|
|
206
|
+
|
|
207
|
+
callback.call(thisArg, root_entity, ecd);
|
|
208
|
+
|
|
209
|
+
const children = [];
|
|
210
|
+
const child_count = ParentEntitySystem.findChildrenOf(children, 0, ecd, root_entity);
|
|
211
|
+
|
|
212
|
+
for (let i = 0; i < child_count; i++) {
|
|
213
|
+
const entity = children[i];
|
|
214
|
+
|
|
215
|
+
if (path.includes(entity)) {
|
|
216
|
+
console.warn(`Loop in entity hierarchy detected: ${path.join('->')}`);
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
traverse(ecd, entity, callback, thisArg, path.concat(entity));
|
|
221
|
+
}
|
|
165
222
|
}
|
|
@@ -173,16 +173,16 @@ class Terrain {
|
|
|
173
173
|
*
|
|
174
174
|
* @type {WorkerProxy}
|
|
175
175
|
*/
|
|
176
|
-
this.
|
|
176
|
+
this.__buildWorker = makeTerrainWorkerProxy();
|
|
177
177
|
|
|
178
|
-
this.
|
|
178
|
+
this.__tiles = new TerrainTileManager({
|
|
179
179
|
material: this.material,
|
|
180
|
-
buildWorker: this.
|
|
180
|
+
buildWorker: this.__buildWorker
|
|
181
181
|
});
|
|
182
182
|
|
|
183
|
-
this.
|
|
183
|
+
this.__tiles.tileSize.set(TILE_SIZE, TILE_SIZE);
|
|
184
184
|
|
|
185
|
-
this.
|
|
185
|
+
this.__tiles.material.set(this.material);
|
|
186
186
|
|
|
187
187
|
/**
|
|
188
188
|
*
|
|
@@ -285,7 +285,7 @@ class Terrain {
|
|
|
285
285
|
const material = material_handle.getValue();
|
|
286
286
|
this.clouds.addMaterial(material);
|
|
287
287
|
|
|
288
|
-
this.
|
|
288
|
+
this.__tiles.material.set(material);
|
|
289
289
|
|
|
290
290
|
this.updateMaterial();
|
|
291
291
|
|
|
@@ -314,7 +314,7 @@ class Terrain {
|
|
|
314
314
|
// release material handle
|
|
315
315
|
this.__material_reference.release();
|
|
316
316
|
|
|
317
|
-
this.
|
|
317
|
+
this.__tiles.dispose();
|
|
318
318
|
this.splat.dispose();
|
|
319
319
|
this.layers.dispose();
|
|
320
320
|
|
|
@@ -428,11 +428,11 @@ class Terrain {
|
|
|
428
428
|
* @returns {boolean}
|
|
429
429
|
*/
|
|
430
430
|
raycastFirstSync(result, originX, originY, originZ, directionX, directionY, directionZ) {
|
|
431
|
-
if (this.
|
|
431
|
+
if (this.__tiles === undefined) {
|
|
432
432
|
return false;
|
|
433
433
|
}
|
|
434
434
|
|
|
435
|
-
return this.
|
|
435
|
+
return this.__tiles.raycastFirstSync(result, originX, originY, originZ, directionX, directionY, directionZ);
|
|
436
436
|
}
|
|
437
437
|
|
|
438
438
|
/**
|
|
@@ -443,7 +443,7 @@ class Terrain {
|
|
|
443
443
|
* @param {function} missCallback
|
|
444
444
|
*/
|
|
445
445
|
raycast(origin, direction, callback, missCallback) {
|
|
446
|
-
this.
|
|
446
|
+
this.__tiles.raycast(origin, direction, callback, missCallback);
|
|
447
447
|
}
|
|
448
448
|
|
|
449
449
|
/**
|
|
@@ -459,7 +459,7 @@ class Terrain {
|
|
|
459
459
|
assert.typeOf(missCallback, 'function', 'missCallback');
|
|
460
460
|
assert.typeOf(errorCallback, 'function', 'errorCallback');
|
|
461
461
|
|
|
462
|
-
this.
|
|
462
|
+
this.__tiles.raycastVertical(x, y, callback, missCallback);
|
|
463
463
|
}
|
|
464
464
|
|
|
465
465
|
/**
|
|
@@ -470,12 +470,12 @@ class Terrain {
|
|
|
470
470
|
* @return {boolean}
|
|
471
471
|
*/
|
|
472
472
|
raycastVerticalFirstSync(contact, x, y) {
|
|
473
|
-
if (this.
|
|
473
|
+
if (this.__tiles === undefined) {
|
|
474
474
|
//tiles don't exist
|
|
475
475
|
return false;
|
|
476
476
|
}
|
|
477
477
|
|
|
478
|
-
return this.
|
|
478
|
+
return this.__tiles.raycastVerticalFirstSync(contact, x, y);
|
|
479
479
|
}
|
|
480
480
|
|
|
481
481
|
/**
|
|
@@ -643,7 +643,7 @@ class Terrain {
|
|
|
643
643
|
*
|
|
644
644
|
* @type {TerrainTileManager}
|
|
645
645
|
*/
|
|
646
|
-
const tiles = this.
|
|
646
|
+
const tiles = this.__tiles;
|
|
647
647
|
|
|
648
648
|
const promisedTiles = [];
|
|
649
649
|
|
|
@@ -660,25 +660,6 @@ class Terrain {
|
|
|
660
660
|
return Promise.all(promisedTiles);
|
|
661
661
|
}
|
|
662
662
|
|
|
663
|
-
/**
|
|
664
|
-
* @deprecated use {@link #samplerHeight} instead
|
|
665
|
-
* @param {Sampler2D} v
|
|
666
|
-
*/
|
|
667
|
-
set heightMap(v) {
|
|
668
|
-
this.samplerHeight = v;
|
|
669
|
-
this.updateHeightTexture();
|
|
670
|
-
|
|
671
|
-
console.warn('Deprecated');
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
/**
|
|
675
|
-
* @deprecated use {@link #samplerHeight} instead
|
|
676
|
-
* @return {Sampler2D}
|
|
677
|
-
*/
|
|
678
|
-
get heightMap() {
|
|
679
|
-
return this.samplerHeight;
|
|
680
|
-
}
|
|
681
|
-
|
|
682
663
|
updateMaterial() {
|
|
683
664
|
let m = this.material;
|
|
684
665
|
|
|
@@ -724,6 +705,8 @@ class Terrain {
|
|
|
724
705
|
|
|
725
706
|
image.width = sampler.width;
|
|
726
707
|
image.height = sampler.height;
|
|
708
|
+
|
|
709
|
+
texture.needsUpdate = true;
|
|
727
710
|
}
|
|
728
711
|
|
|
729
712
|
/**
|
|
@@ -753,24 +736,24 @@ class Terrain {
|
|
|
753
736
|
}
|
|
754
737
|
|
|
755
738
|
startBuildService() {
|
|
756
|
-
this.
|
|
739
|
+
this.__buildWorker.start();
|
|
757
740
|
this.updateWorkerHeights();
|
|
758
741
|
}
|
|
759
742
|
|
|
760
743
|
async updateWorkerHeights() {
|
|
761
744
|
const s = this.samplerHeight;
|
|
762
|
-
const worker = this.
|
|
745
|
+
const worker = this.__buildWorker;
|
|
763
746
|
|
|
764
747
|
await worker.setHeightSampler(s.data, s.itemSize, s.width, s.height);
|
|
765
748
|
|
|
766
749
|
return await worker.computeHeightRange()
|
|
767
750
|
.then(({ min, max }) => {
|
|
768
|
-
this.
|
|
751
|
+
this.__tiles.setHeightRange(min, max);
|
|
769
752
|
});
|
|
770
753
|
}
|
|
771
754
|
|
|
772
755
|
stopBuildService() {
|
|
773
|
-
this.
|
|
756
|
+
this.__buildWorker.stop();
|
|
774
757
|
}
|
|
775
758
|
|
|
776
759
|
buildGridTransform() {
|
|
@@ -816,9 +799,9 @@ class Terrain {
|
|
|
816
799
|
|
|
817
800
|
this.overlay.tileImage.set(MeepSettings.ecs.Terrain['tile-decal']);
|
|
818
801
|
|
|
819
|
-
this.
|
|
820
|
-
this.
|
|
821
|
-
this.
|
|
802
|
+
this.__tiles.totalSize.copy(this.size);
|
|
803
|
+
this.__tiles.scale.set(this.gridScale, this.gridScale);
|
|
804
|
+
this.__tiles.resolution.set(this.resolution);
|
|
822
805
|
|
|
823
806
|
if (this.__legacyMaterialSpec !== null) {
|
|
824
807
|
this.buildFromLegacy(assetManager);
|
|
@@ -855,9 +838,9 @@ class Terrain {
|
|
|
855
838
|
* @type {Promise<TerrainTileManager>}
|
|
856
839
|
* @deprecated
|
|
857
840
|
*/
|
|
858
|
-
this.pTiles = Promise.resolve(this.
|
|
841
|
+
this.pTiles = Promise.resolve(this.__tiles);
|
|
859
842
|
|
|
860
|
-
this.
|
|
843
|
+
this.__tiles.initialize();
|
|
861
844
|
|
|
862
845
|
this.updateMaterial();
|
|
863
846
|
|
|
@@ -866,6 +849,24 @@ class Terrain {
|
|
|
866
849
|
this.setFlag(TerrainFlags.Built);
|
|
867
850
|
}
|
|
868
851
|
|
|
852
|
+
/**
|
|
853
|
+
*
|
|
854
|
+
* @returns {Texture|null}
|
|
855
|
+
*/
|
|
856
|
+
get aoMap() {
|
|
857
|
+
const ref = this.__material_reference;
|
|
858
|
+
if (ref === null) {
|
|
859
|
+
return null;
|
|
860
|
+
}
|
|
861
|
+
const mat = ref.getValue();
|
|
862
|
+
|
|
863
|
+
if (mat === null) {
|
|
864
|
+
return null;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
return mat.uniforms.aoMap.value;
|
|
868
|
+
}
|
|
869
|
+
|
|
869
870
|
/**
|
|
870
871
|
*
|
|
871
872
|
* @param {number} quality resolution in texels per grid cell (4 = 4x4 light map texels per single grid cell)
|
|
@@ -896,7 +897,7 @@ class Terrain {
|
|
|
896
897
|
texture,
|
|
897
898
|
heightSampler: this.samplerHeight,
|
|
898
899
|
worldSize: new Vector2(size_x * this.gridScale, size_y * this.gridScale),
|
|
899
|
-
resolution: new Vector2(size_x * quality, size_y *quality)
|
|
900
|
+
resolution: new Vector2(size_x * quality, size_y * quality)
|
|
900
901
|
});
|
|
901
902
|
|
|
902
903
|
|
|
@@ -131,7 +131,7 @@ class TerrainSystem extends System {
|
|
|
131
131
|
|
|
132
132
|
component.link(this.graphics);
|
|
133
133
|
|
|
134
|
-
const bvh = component.
|
|
134
|
+
const bvh = component.__tiles.bvh;
|
|
135
135
|
|
|
136
136
|
|
|
137
137
|
//record entity for editor
|
|
@@ -193,7 +193,7 @@ class TerrainSystem extends System {
|
|
|
193
193
|
assert.notEqual(terrain, null, 'terrain is null');
|
|
194
194
|
assert.notEqual(terrain, undefined, 'terrain is undefined');
|
|
195
195
|
|
|
196
|
-
const tileManager = terrain.
|
|
196
|
+
const tileManager = terrain.__tiles;
|
|
197
197
|
if (tileManager !== undefined) {
|
|
198
198
|
CameraSystem.getActiveFrustums(ecd, function (frustums) {
|
|
199
199
|
tileManager.bvh.threeTraverseFrustumsIntersections(frustums, function (leafNode) {
|
|
@@ -299,20 +299,26 @@ export class SplatMapping {
|
|
|
299
299
|
*/
|
|
300
300
|
sampleWeight(u, v, materialIndex) {
|
|
301
301
|
|
|
302
|
+
return this.getLayerWeightSampler(materialIndex).sampleChannelBilinearUV(u, v, 0);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
*
|
|
307
|
+
* @param {number} index
|
|
308
|
+
* @returns {Sampler2D}
|
|
309
|
+
*/
|
|
310
|
+
getLayerWeightSampler(index) {
|
|
311
|
+
|
|
302
312
|
const width = this.size.x;
|
|
303
313
|
const height = this.size.y;
|
|
304
314
|
|
|
305
315
|
const layerSize = width * height;
|
|
306
316
|
|
|
307
|
-
const startAddress = layerSize *
|
|
317
|
+
const startAddress = layerSize * index;
|
|
308
318
|
const endAddress = startAddress + layerSize;
|
|
309
319
|
|
|
310
320
|
//build a sampler for the layer
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
const result = sampler.sampleChannelBilinear(u * width, v * height, 0);
|
|
314
|
-
|
|
315
|
-
return result;
|
|
321
|
+
return new Sampler2D(this.weightData.subarray(startAddress, endAddress), 1, width, height);
|
|
316
322
|
}
|
|
317
323
|
|
|
318
324
|
/**
|
|
@@ -429,7 +435,12 @@ export class SplatMapping {
|
|
|
429
435
|
const startAddress = index * layerByteSize;
|
|
430
436
|
const endAddress = (index + 1) * layerByteSize;
|
|
431
437
|
|
|
432
|
-
const
|
|
438
|
+
const weightTexture = this.weightTexture;
|
|
439
|
+
|
|
440
|
+
// release memory
|
|
441
|
+
weightTexture.dispose();
|
|
442
|
+
|
|
443
|
+
const image = weightTexture.image;
|
|
433
444
|
|
|
434
445
|
const oldData = image.data;
|
|
435
446
|
|
|
@@ -444,7 +455,7 @@ export class SplatMapping {
|
|
|
444
455
|
|
|
445
456
|
image.depth = this.depth;
|
|
446
457
|
|
|
447
|
-
|
|
458
|
+
weightTexture.needsUpdate = true;
|
|
448
459
|
|
|
449
460
|
return true;
|
|
450
461
|
}
|
|
@@ -471,6 +482,8 @@ export class SplatMapping {
|
|
|
471
482
|
}
|
|
472
483
|
|
|
473
484
|
addWeightLayer() {
|
|
485
|
+
// release currently held GPU memory
|
|
486
|
+
this.weightTexture.dispose();
|
|
474
487
|
|
|
475
488
|
const layerByteSize = this.size.x * this.size.y;
|
|
476
489
|
|
|
@@ -500,29 +513,14 @@ export class SplatMapping {
|
|
|
500
513
|
|
|
501
514
|
this.depth = depth;
|
|
502
515
|
|
|
503
|
-
if (width !== oldWidth || height !== oldHeight) {
|
|
504
|
-
|
|
516
|
+
if (width !== oldWidth || height !== oldHeight || depth !== oldDepth) {
|
|
505
517
|
this.size.set(width, height);
|
|
506
|
-
|
|
507
|
-
const materialImage = this.materialTexture.image;
|
|
508
|
-
|
|
509
|
-
const oldMaterialData = materialImage.data;
|
|
510
|
-
|
|
511
|
-
materialImage.width = width;
|
|
512
|
-
materialImage.height = height;
|
|
513
|
-
materialImage.data = new Uint8Array(width * height * 4);
|
|
514
|
-
|
|
515
|
-
const source = new Sampler2D(oldMaterialData, 4, oldWidth, oldHeight);
|
|
516
|
-
const target = new Sampler2D(materialImage.data, 4, width, height);
|
|
517
|
-
|
|
518
|
-
scaleSampler2D(source, target);
|
|
519
|
-
|
|
520
|
-
this.weightTexture.needsUpdate = true;
|
|
521
518
|
}
|
|
522
519
|
|
|
523
|
-
|
|
520
|
+
const weightImage = this.weightTexture.image;
|
|
524
521
|
|
|
525
|
-
|
|
522
|
+
if (weightImage.width !== width || weightImage.height !== height || weightImage.depth !== depth) {
|
|
523
|
+
// this extra check is in case dimensions were modified from outside
|
|
526
524
|
|
|
527
525
|
const oldWeightData = weightImage.data;
|
|
528
526
|
|
|
@@ -543,7 +541,7 @@ export class SplatMapping {
|
|
|
543
541
|
}
|
|
544
542
|
|
|
545
543
|
this.weightTexture.needsUpdate = true;
|
|
546
|
-
}
|
|
547
544
|
|
|
545
|
+
}
|
|
548
546
|
}
|
|
549
547
|
}
|