0.10.8
Added
planetSchema()(sceneSchemas.planet):<tosi-b3d-planet>described like the other scene primitives, with sections (World, Surface, Sea, Air, Clouds, Craters, Rings, Gas giant, Maps),heightMap/colorMapmarked as fetched, and theworld/gaslists taken from the preset tables so they cannot drift.x-preset-writtennames the attributes aworldpreset writes into the planet. A consumer that applies schema defaults on bind should show them but not write them back over the preset (#103, ensemble).lat/lonon<tosi-b3d-terrain>: where this ground is on its planet, the latitude and longitude of the terrain's origin in degrees, so "this ground is at 12° N, 40° E" is one attribute pair, in markup and interrainSchema().worldU/worldVare now JS properties over them (worldU = lon / 360,worldV = (lat + 90) / 180). Before, they were plain properties that markup could not set and that needed aregenerate(). Changinglat/lon(or either view of them) rebuilds the ground. The defaults (-45, 0) are the old 0.25 / 0, so nothing moves (#103).seamBlend/seamWeight(sphere-map): make a layer laid out in flat metres periodic round a world, mixed with its copy one circumference away near the far meridian and untouched elsewhere.
Fixed
- A widget bound to a tosijs box lets go of it (#100).
toggle3d,slider3dandselect3dsubscribed to a bound box and threw the unsubscribe away. Every bound row left a listener in tosijs's module-level list that held the row, its panel and its host, so ensemble's editor grew by 125 listeners and 5,360 nodes per round of panel rebuilds. Each now unsubscribes in itsdispose().B3dalready disposes the widget lists it rebuilds, andpanel3d(…)has adispose()that disposes its rows, for a consumer that drops its own panels. Not reaped byisConnected: an in-scene panel's SVG is never in the document. - Removing the last instance of a library model no longer turns every later one white (#102).
disposeMeshTreedisposed a material when no mesh in the scene used it, but a library's source meshes live in its AssetContainer, out of that list, so the guard could not see that the library still needed the material. Ensemble's editor lost the colour of a whole kit on its first rebuild, and a game would see it when the last enemy of a type despawned and the next one spawned white. It now disposes only materials the scene owns (scene.materials); a container's are the container's. - A frozen or paused scene builds its system bar (#3342). The bar and flat panels were built only on running frames, so a scene that started frozen (Manta freezes on every menu) showed the HTML lozenge, and a
<tosi-b3d-panel icon title>got no button until it unfroze. Stopped frames keep the scene's chrome current now, as they already did its fog. - A sphere terrain joins at the far meridian (#3318). Its noise is read on the sphere and always repeated; its profile fields (
blendProfiles,profileField) and landforms (craterField, …) read flat metres and did not. The ground opposite the terrain's origin (longitude 180 at the defaultworldU) was two different places: a 116 m step on Manta's cratered moon, 19.5 m without the craters. Within 5% of a turn of that meridian they are now mixed with their copy one turn away, so the two sides meet. Elsewhere the ground is exactly as before, and a place one whole turn round is the same place. Spheres only: a cylinder is used as a big flat world with things placed in metres. - A globe of a world with no sea is drawn at its size (#3319). A planet drawn from a
PlanetSurfacemeasured every height fromseaLevel, so a dry world that says "no sea" with a sea level far below its ground (Manta's -10000 m) gained that depth as ground. A globe meant to be 40 units across came out at 2476. The globe now measures from the higher of the sea and the lowest ground. A world with a real sea is unchanged, and on a dry world the lowest ground sits on the base radius. The convention for "no sea" is aseaLevelbelow all of the ground.
Size: barrel (min, packages external) 1109.1 KB raw / 377.6 KB gz, +0.38% on 0.10.7.