From 394ad6d4609496de74487dd8701e700d23d0989b Mon Sep 17 00:00:00 2001 From: Kieran Farr Date: Sat, 17 Aug 2024 21:36:01 -0700 Subject: [PATCH 01/10] barely working new layer order --- src/assets.js | 8 +-- .../AddLayerPanel/AddLayerPanel.component.jsx | 4 +- .../components/AddLayerPanel/LayersOptions.js | 56 +++++++++---------- .../components/AddLayerPanel/layersData.js | 15 ++++- 4 files changed, 49 insertions(+), 34 deletions(-) diff --git a/src/assets.js b/src/assets.js index 37b5c6255..8d7eb5c30 100644 --- a/src/assets.js +++ b/src/assets.js @@ -70,14 +70,14 @@ function buildAssetHTML(assetUrl, categories) { `, vehicles: ` - - - - + + + + `, 'vehicles-rigged': ` diff --git a/src/editor/components/components/AddLayerPanel/AddLayerPanel.component.jsx b/src/editor/components/components/AddLayerPanel/AddLayerPanel.component.jsx index c9cc9702d..9013b9909 100644 --- a/src/editor/components/components/AddLayerPanel/AddLayerPanel.component.jsx +++ b/src/editor/components/components/AddLayerPanel/AddLayerPanel.component.jsx @@ -13,7 +13,7 @@ import mixinCatalog from '../../../../catalog.json'; import posthog from 'posthog-js'; import Events from '../../../lib/Events'; import pickPointOnGroundPlane from '../../../lib/pick-point-on-ground-plane'; -import { layersData } from './layersData.js'; +import { layersData, streetLayersData } from './layersData.js'; import { LayersOptions } from './LayersOptions.js'; // Create an empty image @@ -293,6 +293,8 @@ const AddLayerPanel = ({ onClose, isAddLayerPanelOpen }) => { const selectedCards = useMemo(() => { if (selectedOption === 'Pro Layers') { return layersData; + } else if (selectedOption === 'Street Layers') { + return streetLayersData; } else { return getSelectedMixinCards(groupedMixins, selectedOption); } diff --git a/src/editor/components/components/AddLayerPanel/LayersOptions.js b/src/editor/components/components/AddLayerPanel/LayersOptions.js index 42e0f465a..630b2b4b3 100644 --- a/src/editor/components/components/AddLayerPanel/LayersOptions.js +++ b/src/editor/components/components/AddLayerPanel/LayersOptions.js @@ -1,50 +1,50 @@ const LayersOptions = [ { - value: 'Models: Personal Vehicles', - label: 'Models: Personal Vehicles', - mixinGroups: ['vehicles', 'vehicles-rigged'], - onClick: () => console.log('Models: Personal Vehicles') + value: 'Street Layers', + label: 'Street Layers', + onClick: () => {} }, { - value: 'Pro Layers', - label: 'Pro Layers', - onClick: () => console.log('Layers: Streets & Intersections') + value: 'Dividers & Traffic Control', + label: 'Dividers & Traffic Control', + mixinGroups: ['dividers'], + onClick: () => {} }, { - value: 'Models: Transit Vehicles', - label: 'Models: Transit Vehicles', - mixinGroups: ['vehicles-transit'], - onClick: () => console.log('Models: Transit Vehicles') + value: 'Motor Vehicles', + label: 'Motor Vehicles', + mixinGroups: ['vehicles-rigged', 'vehicles-transit'], + onClick: () => {} }, { - value: 'Models: Utility Vehicles', - label: 'Models: Utility Vehicles', - mixinGroups: ['vehicles-rigged'], - onClick: () => console.log('Models: Utility Vehicles') + value: 'People Power Vehicles', + label: 'People Power Vehicles', + mixinGroups: ['vehicles', 'cyclists'], + onClick: () => {} }, { - value: 'Models: Characters', - label: 'Models: Characters', - mixinGroups: ['people', 'people-rigged'], - onClick: () => console.log('Models: Characters') + value: 'Pro Layers', + label: 'Pro Layers', + onClick: () => {} }, { - value: 'Models: Street Props', - label: 'Models: Street Props', - mixinGroups: ['sidewalk-props', 'intersection-props'], - onClick: () => console.log('Models: Street Props') + value: 'Characters', + label: 'Characters', + mixinGroups: ['people'], + onClick: () => {} }, { - value: 'Models: Dividers & Traffic Control', - label: 'Models: Dividers & Traffic Control', - mixinGroups: ['dividers'], - onClick: () => console.log('Models: dividers') + value: 'Sidewalk Props', + label: 'Sidewalk Props', + mixinGroups: ['sidewalk-props', 'intersection-props'], + onClick: () => {} }, + { value: 'Models: Buildings', label: 'Models: Buildings', mixinGroups: ['buildings'], - onClick: () => console.log('Models: Buildings') + onClick: () => {} } ]; diff --git a/src/editor/components/components/AddLayerPanel/layersData.js b/src/editor/components/components/AddLayerPanel/layersData.js index 6605c8953..cacf08b24 100644 --- a/src/editor/components/components/AddLayerPanel/layersData.js +++ b/src/editor/components/components/AddLayerPanel/layersData.js @@ -8,6 +8,19 @@ import { createIntersection } from './createLayerFunctions'; +const streetLayersData = [ + { + name: 'Street from Streetmix URL', + img: 'ui_assets/cards/streetmix.jpg', + icon: 'ui_assets/cards/icons/streetmix24.png', + requiresPro: false, + description: + 'Create an additional Streetmix street in your 3DStreet scene without replacing any existing streets.', + id: 1, + handlerFunction: createStreetmixStreet + } +]; + // data for PRO layers cards const layersData = [ { @@ -82,4 +95,4 @@ const layersData = [ } ]; -export { layersData }; +export { layersData, streetLayersData }; From b7bab24a0219828bf49b8782eba46dfe5d6f67d4 Mon Sep 17 00:00:00 2001 From: Kieran Farr Date: Sat, 17 Aug 2024 21:43:45 -0700 Subject: [PATCH 02/10] add some emojis for each group --- .../components/AddLayerPanel/LayersOptions.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/editor/components/components/AddLayerPanel/LayersOptions.js b/src/editor/components/components/AddLayerPanel/LayersOptions.js index 630b2b4b3..092035a00 100644 --- a/src/editor/components/components/AddLayerPanel/LayersOptions.js +++ b/src/editor/components/components/AddLayerPanel/LayersOptions.js @@ -1,48 +1,48 @@ const LayersOptions = [ { value: 'Street Layers', - label: 'Street Layers', + label: 'ꈨ Street Layers', onClick: () => {} }, { value: 'Dividers & Traffic Control', - label: 'Dividers & Traffic Control', + label: '🚧 Dividers & Traffic Control', mixinGroups: ['dividers'], onClick: () => {} }, { value: 'Motor Vehicles', - label: 'Motor Vehicles', + label: 'πŸš— Motor Vehicles', mixinGroups: ['vehicles-rigged', 'vehicles-transit'], onClick: () => {} }, { value: 'People Power Vehicles', - label: 'People Power Vehicles', + label: '🚲 People Power Vehicles', mixinGroups: ['vehicles', 'cyclists'], onClick: () => {} }, { value: 'Pro Layers', - label: 'Pro Layers', + label: '🌏 Pro Layers', onClick: () => {} }, { value: 'Characters', - label: 'Characters', + label: '🚢 Characters', mixinGroups: ['people'], onClick: () => {} }, { value: 'Sidewalk Props', - label: 'Sidewalk Props', + label: '🌳 Sidewalk Props', mixinGroups: ['sidewalk-props', 'intersection-props'], onClick: () => {} }, { - value: 'Models: Buildings', - label: 'Models: Buildings', + value: 'Buildings', + label: '🏠 Buildings', mixinGroups: ['buildings'], onClick: () => {} } From 50f123323bcdf12086f7a195b59b26e6addbe092 Mon Sep 17 00:00:00 2001 From: Kieran Farr Date: Sat, 17 Aug 2024 22:37:38 -0700 Subject: [PATCH 03/10] add more example streets --- .../AddLayerPanel/createLayerFunctions.js | 50 ++++++++++++++++--- .../components/AddLayerPanel/layersData.js | 48 +++++++++++++++++- 2 files changed, 90 insertions(+), 8 deletions(-) diff --git a/src/editor/components/components/AddLayerPanel/createLayerFunctions.js b/src/editor/components/components/AddLayerPanel/createLayerFunctions.js index cda2612df..df086dc0a 100644 --- a/src/editor/components/components/AddLayerPanel/createLayerFunctions.js +++ b/src/editor/components/components/AddLayerPanel/createLayerFunctions.js @@ -55,13 +55,15 @@ function createMapbox() { Events.emit('entitycreated', geoLayer); } -function createStreetmixStreet(position) { +function createStreetmixStreet(position, streetmixURL) { // This code snippet allows the creation of an additional Streetmix street // in your 3DStreet scene without replacing any existing streets. - const streetmixURL = prompt( - 'Please enter a Streetmix URL', - 'https://streetmix.net/kfarr/3/3dstreet-demo-street' - ); + if (streetmixURL === undefined) { + streetmixURL = prompt( + 'Please enter a Streetmix URL', + 'https://streetmix.net/kfarr/3/3dstreet-demo-street' + ); + } if (streetmixURL && streetmixURL !== '') { const newEl = document.createElement('a-entity'); newEl.setAttribute('id', streetmixURL); @@ -83,6 +85,37 @@ function createStreetmixStreet(position) { } } +function create40ftRightOfWay(position) { + createStreetmixStreet( + position, + 'https://streetmix.net/3dstreetapp/1/40ft-right-of-way-24ft-road-width' + ); +} +function create60ftRightOfWay(position) { + createStreetmixStreet( + position, + 'https://streetmix.net/3dstreetapp/2/60ft-right-of-way-36ft-road-width' + ); +} +function create80ftRightOfWay(position) { + createStreetmixStreet( + position, + 'https://streetmix.net/3dstreetapp/3/80ft-right-of-way-56ft-road-width' + ); +} +function create94ftRightOfWay(position) { + createStreetmixStreet( + position, + 'https://streetmix.net/3dstreetapp/4/94ft-right-of-way-70ft-road-width' + ); +} +function create150ftRightOfWay(position) { + createStreetmixStreet( + position, + 'https://streetmix.net/3dstreetapp/5/150ft-right-of-way-124ft-road-width' + ); +} + function create3DTiles() { // This code snippet adds an entity to load and display 3d tiles from // Google Maps Tiles API 3D Tiles endpoint. This will break your scene @@ -225,5 +258,10 @@ export { createCustomModel, createPrimitiveGeometry, createIntersection, - createSplatObject + createSplatObject, + create40ftRightOfWay, + create60ftRightOfWay, + create80ftRightOfWay, + create94ftRightOfWay, + create150ftRightOfWay }; diff --git a/src/editor/components/components/AddLayerPanel/layersData.js b/src/editor/components/components/AddLayerPanel/layersData.js index cacf08b24..382cd9ca8 100644 --- a/src/editor/components/components/AddLayerPanel/layersData.js +++ b/src/editor/components/components/AddLayerPanel/layersData.js @@ -5,7 +5,12 @@ import { create3DTiles, createCustomModel, createPrimitiveGeometry, - createIntersection + createIntersection, + create40ftRightOfWay, + create60ftRightOfWay, + create80ftRightOfWay, + create94ftRightOfWay, + create150ftRightOfWay } from './createLayerFunctions'; const streetLayersData = [ @@ -13,11 +18,50 @@ const streetLayersData = [ name: 'Street from Streetmix URL', img: 'ui_assets/cards/streetmix.jpg', icon: 'ui_assets/cards/icons/streetmix24.png', - requiresPro: false, description: 'Create an additional Streetmix street in your 3DStreet scene without replacing any existing streets.', id: 1, handlerFunction: createStreetmixStreet + }, + { + name: '40ft RoW / 24ft Roadway Width', + img: 'ui_assets/cards/streetmix.jpg', + icon: 'ui_assets/cards/icons/streetmix24.png', + description: 'Premade Street 40ft Right of Way / 24ft Roadway Width', + id: 2, + handlerFunction: create40ftRightOfWay + }, + { + name: '60ft RoW / 36ft Roadway Width', + img: 'ui_assets/cards/streetmix.jpg', + icon: 'ui_assets/cards/icons/streetmix24.png', + description: 'Premade Street 60ft Right of Way / 36ft Roadway Width', + id: 3, + handlerFunction: create60ftRightOfWay + }, + { + name: '80ft RoW / 56ft Roadway Width', + img: 'ui_assets/cards/streetmix.jpg', + icon: 'ui_assets/cards/icons/streetmix24.png', + description: 'Premade Street 80ft Right of Way / 56ft Roadway Width', + id: 4, + handlerFunction: create80ftRightOfWay + }, + { + name: '94ft RoW / 70ft Roadway Width', + img: 'ui_assets/cards/streetmix.jpg', + icon: 'ui_assets/cards/icons/streetmix24.png', + description: 'Premade Street 94ft Right of Way / 70ft Roadway Width', + id: 5, + handlerFunction: create94ftRightOfWay + }, + { + name: '150ft RoW / 124ft Roadway Width', + img: 'ui_assets/cards/streetmix.jpg', + icon: 'ui_assets/cards/icons/streetmix24.png', + description: 'Premade Street 150ft Right of Way / 124ft Roadway Width', + id: 6, + handlerFunction: create150ftRightOfWay } ]; From 50b1b121f4020d369989f46a4a8c54b04fe3b069 Mon Sep 17 00:00:00 2001 From: Vincent Fretin Date: Sun, 18 Aug 2024 10:19:32 +0200 Subject: [PATCH 04/10] use selectedCards instead of layersData to get the card by id --- .../components/AddLayerPanel/AddLayerPanel.component.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editor/components/components/AddLayerPanel/AddLayerPanel.component.jsx b/src/editor/components/components/AddLayerPanel/AddLayerPanel.component.jsx index 9013b9909..6f2796f7d 100644 --- a/src/editor/components/components/AddLayerPanel/AddLayerPanel.component.jsx +++ b/src/editor/components/components/AddLayerPanel/AddLayerPanel.component.jsx @@ -393,7 +393,7 @@ const AddLayerPanel = ({ onClose, isAddLayerPanelOpen }) => { if (transferredData.mixinId) { createEntityOnPosition(transferredData.mixinId, position); } else if (transferredData.layerCardId) { - layersData + selectedCards .find((card) => card.id === transferredData.layerCardId) ?.handlerFunction(position); } From 6f43c9dc72bacb6edfd8bf81f4fb774344b8eff2 Mon Sep 17 00:00:00 2001 From: Vincent Fretin Date: Sun, 18 Aug 2024 10:23:44 +0200 Subject: [PATCH 05/10] use named export --- .../AddLayerPanel/createLayerFunctions.js | 42 ++++++------------- .../components/AddLayerPanel/layersData.js | 6 +-- 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/src/editor/components/components/AddLayerPanel/createLayerFunctions.js b/src/editor/components/components/AddLayerPanel/createLayerFunctions.js index df086dc0a..b2a66429e 100644 --- a/src/editor/components/components/AddLayerPanel/createLayerFunctions.js +++ b/src/editor/components/components/AddLayerPanel/createLayerFunctions.js @@ -1,7 +1,7 @@ import Events from '../../../lib/Events'; import { loadScript, roundCoord } from '../../../../../src/utils.js'; -function createSvgExtrudedEntity() { +export function createSvgExtrudedEntity() { // This component accepts a svgString and creates a new entity with geometry extruded // from the svg and applies the default mixin material grass. const svgString = prompt( @@ -31,7 +31,7 @@ function createSvgExtrudedEntity() { } } -function createMapbox() { +export function createMapbox() { // This component accepts a long / lat and renders a plane with dimensions that // (should be) at a correct scale. const geoLayer = document.getElementById('reference-layers'); @@ -55,7 +55,7 @@ function createMapbox() { Events.emit('entitycreated', geoLayer); } -function createStreetmixStreet(position, streetmixURL) { +export function createStreetmixStreet(position, streetmixURL) { // This code snippet allows the creation of an additional Streetmix street // in your 3DStreet scene without replacing any existing streets. if (streetmixURL === undefined) { @@ -85,38 +85,38 @@ function createStreetmixStreet(position, streetmixURL) { } } -function create40ftRightOfWay(position) { +export function create40ftRightOfWay(position) { createStreetmixStreet( position, 'https://streetmix.net/3dstreetapp/1/40ft-right-of-way-24ft-road-width' ); } -function create60ftRightOfWay(position) { +export function create60ftRightOfWay(position) { createStreetmixStreet( position, 'https://streetmix.net/3dstreetapp/2/60ft-right-of-way-36ft-road-width' ); } -function create80ftRightOfWay(position) { +export function create80ftRightOfWay(position) { createStreetmixStreet( position, 'https://streetmix.net/3dstreetapp/3/80ft-right-of-way-56ft-road-width' ); } -function create94ftRightOfWay(position) { +export function create94ftRightOfWay(position) { createStreetmixStreet( position, 'https://streetmix.net/3dstreetapp/4/94ft-right-of-way-70ft-road-width' ); } -function create150ftRightOfWay(position) { +export function create150ftRightOfWay(position) { createStreetmixStreet( position, 'https://streetmix.net/3dstreetapp/5/150ft-right-of-way-124ft-road-width' ); } -function create3DTiles() { +export function create3DTiles() { // This code snippet adds an entity to load and display 3d tiles from // Google Maps Tiles API 3D Tiles endpoint. This will break your scene // and you cannot save it yet, so beware before testing. @@ -159,7 +159,7 @@ function create3DTiles() { } } -function createCustomModel() { +export function createCustomModel() { // accepts a path for a glTF (or glb) file hosted on any publicly accessible HTTP server. // Then create entity with model from that path by using gltf-model component const modelUrl = prompt( @@ -184,7 +184,7 @@ function createCustomModel() { } } -function createPrimitiveGeometry() { +export function createPrimitiveGeometry() { const newEl = document.createElement('a-entity'); newEl.setAttribute('geometry', 'primitive: circle; radius: 50;'); newEl.setAttribute('rotation', '-90 -90 0'); @@ -205,7 +205,7 @@ function createPrimitiveGeometry() { parentEl.appendChild(newEl); } -function createIntersection() { +export function createIntersection() { const newEl = document.createElement('a-entity'); newEl.setAttribute('intersection', ''); newEl.setAttribute('data-layer-name', 'Street β€’ Intersection 90ΒΊ'); @@ -222,7 +222,7 @@ function createIntersection() { parentEl.appendChild(newEl); } -function createSplatObject() { +export function createSplatObject() { // accepts a path for a .splat file hosted on any publicly accessible HTTP server. // Then create entity with model from that path by using gaussian_splatting component const modelUrl = prompt( @@ -249,19 +249,3 @@ function createSplatObject() { parentEl.appendChild(newEl); } } - -export { - createSvgExtrudedEntity, - createMapbox, - createStreetmixStreet, - create3DTiles, - createCustomModel, - createPrimitiveGeometry, - createIntersection, - createSplatObject, - create40ftRightOfWay, - create60ftRightOfWay, - create80ftRightOfWay, - create94ftRightOfWay, - create150ftRightOfWay -}; diff --git a/src/editor/components/components/AddLayerPanel/layersData.js b/src/editor/components/components/AddLayerPanel/layersData.js index 382cd9ca8..5a02aded6 100644 --- a/src/editor/components/components/AddLayerPanel/layersData.js +++ b/src/editor/components/components/AddLayerPanel/layersData.js @@ -13,7 +13,7 @@ import { create150ftRightOfWay } from './createLayerFunctions'; -const streetLayersData = [ +export const streetLayersData = [ { name: 'Street from Streetmix URL', img: 'ui_assets/cards/streetmix.jpg', @@ -66,7 +66,7 @@ const streetLayersData = [ ]; // data for PRO layers cards -const layersData = [ +export const layersData = [ { name: 'Mapbox 2D Aerial', img: 'ui_assets/cards/mapbox2d.jpg', @@ -138,5 +138,3 @@ const layersData = [ handlerFunction: createIntersection } ]; - -export { layersData, streetLayersData }; From fad06654b08cc968598e10b1770667120c3f2cc1 Mon Sep 17 00:00:00 2001 From: Kieran Farr Date: Mon, 19 Aug 2024 12:28:22 -0700 Subject: [PATCH 06/10] fix street layer symbol --- src/editor/components/components/AddLayerPanel/LayersOptions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editor/components/components/AddLayerPanel/LayersOptions.js b/src/editor/components/components/AddLayerPanel/LayersOptions.js index 092035a00..f42f6d9d8 100644 --- a/src/editor/components/components/AddLayerPanel/LayersOptions.js +++ b/src/editor/components/components/AddLayerPanel/LayersOptions.js @@ -1,7 +1,7 @@ const LayersOptions = [ { value: 'Street Layers', - label: 'ꈨ Street Layers', + label: 'πŸ›£οΈ Street Layers', onClick: () => {} }, { From b424f41fc7681ea936b703dfad2da08062d641f7 Mon Sep 17 00:00:00 2001 From: Kieran Farr Date: Tue, 20 Aug 2024 22:23:09 -0700 Subject: [PATCH 07/10] hide buildings for new street layers --- .../AddLayerPanel/createLayerFunctions.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/editor/components/components/AddLayerPanel/createLayerFunctions.js b/src/editor/components/components/AddLayerPanel/createLayerFunctions.js index b2a66429e..4c50c3313 100644 --- a/src/editor/components/components/AddLayerPanel/createLayerFunctions.js +++ b/src/editor/components/components/AddLayerPanel/createLayerFunctions.js @@ -55,7 +55,7 @@ export function createMapbox() { Events.emit('entitycreated', geoLayer); } -export function createStreetmixStreet(position, streetmixURL) { +export function createStreetmixStreet(position, streetmixURL, hideBuildings) { // This code snippet allows the creation of an additional Streetmix street // in your 3DStreet scene without replacing any existing streets. if (streetmixURL === undefined) { @@ -76,7 +76,7 @@ export function createStreetmixStreet(position, streetmixURL) { newEl.setAttribute( 'streetmix-loader', - `streetmixStreetURL: ${streetmixURL}` + `streetmixStreetURL: ${streetmixURL}; showBuildings: ${!hideBuildings}` ); const parentEl = document.querySelector('#street-container'); parentEl.appendChild(newEl); @@ -88,31 +88,36 @@ export function createStreetmixStreet(position, streetmixURL) { export function create40ftRightOfWay(position) { createStreetmixStreet( position, - 'https://streetmix.net/3dstreetapp/1/40ft-right-of-way-24ft-road-width' + 'https://streetmix.net/3dstreetapp/1/40ft-right-of-way-24ft-road-width', + true ); } export function create60ftRightOfWay(position) { createStreetmixStreet( position, - 'https://streetmix.net/3dstreetapp/2/60ft-right-of-way-36ft-road-width' + 'https://streetmix.net/3dstreetapp/2/60ft-right-of-way-36ft-road-width', + true ); } export function create80ftRightOfWay(position) { createStreetmixStreet( position, - 'https://streetmix.net/3dstreetapp/3/80ft-right-of-way-56ft-road-width' + 'https://streetmix.net/3dstreetapp/3/80ft-right-of-way-56ft-road-width', + true ); } export function create94ftRightOfWay(position) { createStreetmixStreet( position, - 'https://streetmix.net/3dstreetapp/4/94ft-right-of-way-70ft-road-width' + 'https://streetmix.net/3dstreetapp/4/94ft-right-of-way-70ft-road-width', + true ); } export function create150ftRightOfWay(position) { createStreetmixStreet( position, - 'https://streetmix.net/3dstreetapp/5/150ft-right-of-way-124ft-road-width' + 'https://streetmix.net/3dstreetapp/5/150ft-right-of-way-124ft-road-width', + true ); } From c184e1835601858def23eecf1e13d729a0f0b28a Mon Sep 17 00:00:00 2001 From: Kieran Farr Date: Tue, 20 Aug 2024 23:19:19 -0700 Subject: [PATCH 08/10] add card images --- .../components/AddLayerPanel/layersData.js | 10 +++++----- ui_assets/cards/street-preset-150-124.jpg | Bin 0 -> 6863 bytes ui_assets/cards/street-preset-40-24.jpg | Bin 0 -> 3795 bytes ui_assets/cards/street-preset-60-36.jpg | Bin 0 -> 5107 bytes ui_assets/cards/street-preset-80-56.jpg | Bin 0 -> 6079 bytes ui_assets/cards/street-preset-94-70.jpg | Bin 0 -> 6335 bytes 6 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 ui_assets/cards/street-preset-150-124.jpg create mode 100644 ui_assets/cards/street-preset-40-24.jpg create mode 100644 ui_assets/cards/street-preset-60-36.jpg create mode 100644 ui_assets/cards/street-preset-80-56.jpg create mode 100644 ui_assets/cards/street-preset-94-70.jpg diff --git a/src/editor/components/components/AddLayerPanel/layersData.js b/src/editor/components/components/AddLayerPanel/layersData.js index 5a02aded6..762d8221e 100644 --- a/src/editor/components/components/AddLayerPanel/layersData.js +++ b/src/editor/components/components/AddLayerPanel/layersData.js @@ -25,7 +25,7 @@ export const streetLayersData = [ }, { name: '40ft RoW / 24ft Roadway Width', - img: 'ui_assets/cards/streetmix.jpg', + img: 'ui_assets/cards/street-preset-40-24.jpg', icon: 'ui_assets/cards/icons/streetmix24.png', description: 'Premade Street 40ft Right of Way / 24ft Roadway Width', id: 2, @@ -33,7 +33,7 @@ export const streetLayersData = [ }, { name: '60ft RoW / 36ft Roadway Width', - img: 'ui_assets/cards/streetmix.jpg', + img: 'ui_assets/cards/street-preset-60-36.jpg', icon: 'ui_assets/cards/icons/streetmix24.png', description: 'Premade Street 60ft Right of Way / 36ft Roadway Width', id: 3, @@ -41,7 +41,7 @@ export const streetLayersData = [ }, { name: '80ft RoW / 56ft Roadway Width', - img: 'ui_assets/cards/streetmix.jpg', + img: 'ui_assets/cards/street-preset-80-56.jpg', icon: 'ui_assets/cards/icons/streetmix24.png', description: 'Premade Street 80ft Right of Way / 56ft Roadway Width', id: 4, @@ -49,7 +49,7 @@ export const streetLayersData = [ }, { name: '94ft RoW / 70ft Roadway Width', - img: 'ui_assets/cards/streetmix.jpg', + img: 'ui_assets/cards/street-preset-94-70.jpg', icon: 'ui_assets/cards/icons/streetmix24.png', description: 'Premade Street 94ft Right of Way / 70ft Roadway Width', id: 5, @@ -57,7 +57,7 @@ export const streetLayersData = [ }, { name: '150ft RoW / 124ft Roadway Width', - img: 'ui_assets/cards/streetmix.jpg', + img: 'ui_assets/cards/street-preset-150-124.jpg', icon: 'ui_assets/cards/icons/streetmix24.png', description: 'Premade Street 150ft Right of Way / 124ft Roadway Width', id: 6, diff --git a/ui_assets/cards/street-preset-150-124.jpg b/ui_assets/cards/street-preset-150-124.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d138a4f966660feeae2aa5edbe9ed51f180fbf35 GIT binary patch literal 6863 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 literal 0 HcmV?d00001 diff --git a/ui_assets/cards/street-preset-40-24.jpg b/ui_assets/cards/street-preset-40-24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..116dd95b8a4fe2adf8bb585b66855f2c5b68a40b GIT binary patch literal 3795 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 G>Hh$7IA`bp literal 0 HcmV?d00001 diff --git a/ui_assets/cards/street-preset-80-56.jpg b/ui_assets/cards/street-preset-80-56.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9fc4188d0f95e6ef959b6c184529f62f2f3ca627 GIT binary patch literal 6079 zcmb7IcRZWl+m2ZjwY5U6*t<20T2-rBdqgNjMXf~4(rWBIqDEt{mc*zCB`CFP3u?3! zwQFlp`mHzm`~C5K|9jv2c|PZJ&V8=ydhX{uXFTVePoFOUm<;b4+y#)4kpc8c7vTIe zKnK7=&%nfRnT3gwiH((o9Vp2Iym}R=C?duusi|^DM?>Ydx}M2nYds?;WA)p%!C)tM zFJFYOuI01nP@kyBFkkNr5i(XbHXtWZo`*-?+u*i=_y60@+X2ipfITuz3NirzIWrjr zGue3;fC~U1ryvFUFC!zTproQE)u}T9$S6rADryR9YH|t^gp34crexul(=w%EWixXU zfFsk2YH!^1mDe_ZRQ!Qm5D|{sqXy}WEt2S0NsVyP4*#+XX;KX@Gs#VQEP!)z=mb+dm=-K` zcg(#=!f?WiqdIllGF=8ii9%v^45~2$7Ar|Mb&QpQ>lij4H1x9|q(`A$nE{0Ug}G6d zL&z6%Zph?H^;Gt=UNY&5ZiIS;Wq;Lx_%5qe7x;vQ66#v2Eo){It z0%=nvKJdHtbmknuhw1;A%)#`niPEzG+ET}BuA91`H#|ibJlLG4IhUVVMljs`HX!3q z5ATtWzMQ&43Qhl4v2#A8mpVZJdsaD@YS6`Z0RJ;^-zQ z+cI8$sq2>PvyAvc{Det4N=la|1}dtbp&41lfh>~HEgYo_z~Z+NUaF+Vq7iZjTP0|Y zW|V$22Ei>1Bp|;b6^GgPT+`fVx)SQvYj)gLUiwUiXWY%;OfnWMFN>$2Ih)^va^J^% zq6)RDSl(F(Ii=h~Jlej=s3t|v$N*)mBTS}A2Iu7-%i1T!$Z9XlPY`(01S3b(PrE#Ik`qz&R@<_BfMqjc}=D?95)(dadfnD1}dj($O_HF*-)JAr^ZbW9wgsc

`+LYE|a9MZD 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 literal 0 HcmV?d00001 diff --git a/ui_assets/cards/street-preset-94-70.jpg b/ui_assets/cards/street-preset-94-70.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8742311113d008c61e9c63d603d937ce9e221b03 GIT binary patch literal 6335 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 Date: Wed, 21 Aug 2024 14:35:57 -0700 Subject: [PATCH 09/10] dividers as default new entity group --- .../components/AddLayerPanel/LayersOptions.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/editor/components/components/AddLayerPanel/LayersOptions.js b/src/editor/components/components/AddLayerPanel/LayersOptions.js index f42f6d9d8..438a563d3 100644 --- a/src/editor/components/components/AddLayerPanel/LayersOptions.js +++ b/src/editor/components/components/AddLayerPanel/LayersOptions.js @@ -1,13 +1,18 @@ const LayersOptions = [ + { + value: 'Dividers & Traffic Control', + label: '🚧 Dividers & Traffic Control', + mixinGroups: ['dividers'], + onClick: () => {} + }, { value: 'Street Layers', label: 'πŸ›£οΈ Street Layers', onClick: () => {} }, { - value: 'Dividers & Traffic Control', - label: '🚧 Dividers & Traffic Control', - mixinGroups: ['dividers'], + value: 'Pro Layers', + label: '🌏 Pro Layers', onClick: () => {} }, { @@ -22,11 +27,6 @@ const LayersOptions = [ mixinGroups: ['vehicles', 'cyclists'], onClick: () => {} }, - { - value: 'Pro Layers', - label: '🌏 Pro Layers', - onClick: () => {} - }, { value: 'Characters', label: '🚢 Characters', From 2de0deae365e59dd678d8eff1bb448ab2a065364 Mon Sep 17 00:00:00 2001 From: Kieran Farr Date: Wed, 21 Aug 2024 14:36:12 -0700 Subject: [PATCH 10/10] remove streetmix from pro new entity layer group --- .../components/AddLayerPanel/layersData.js | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/editor/components/components/AddLayerPanel/layersData.js b/src/editor/components/components/AddLayerPanel/layersData.js index 762d8221e..7055e6557 100644 --- a/src/editor/components/components/AddLayerPanel/layersData.js +++ b/src/editor/components/components/AddLayerPanel/layersData.js @@ -78,14 +78,14 @@ export const layersData = [ handlerFunction: createMapbox }, { - name: 'Street from Streetmix URL', - img: 'ui_assets/cards/streetmix.jpg', - icon: 'ui_assets/cards/icons/streetmix24.png', + name: 'Google Maps 3D Tiles', + img: 'ui_assets/cards/google3d.jpg', + icon: 'ui_assets/cards/icons/google24.png', requiresPro: true, description: - 'Create an additional Streetmix street in your 3DStreet scene without replacing any existing streets.', + 'Adds an entity to load and display 3d tiles from Google Maps Tiles API 3D Tiles endpoint. This will break your scene and you cannot save it yet, so beware before testing.', id: 2, - handlerFunction: createStreetmixStreet + handlerFunction: create3DTiles }, { name: 'Entity from extruded SVG', @@ -97,16 +97,6 @@ export const layersData = [ id: 3, handlerFunction: createSvgExtrudedEntity }, - { - name: 'Google Maps 3D Tiles', - img: 'ui_assets/cards/google3d.jpg', - icon: 'ui_assets/cards/icons/google24.png', - requiresPro: true, - description: - 'Adds an entity to load and display 3d tiles from Google Maps Tiles API 3D Tiles endpoint. This will break your scene and you cannot save it yet, so beware before testing.', - id: 4, - handlerFunction: create3DTiles - }, { name: 'glTF model from URL', img: '', @@ -114,7 +104,7 @@ export const layersData = [ icon: '', description: 'Create entity with model from path for a glTF (or Glb) file hosted on any publicly accessible HTTP server.', - id: 5, + id: 4, handlerFunction: createCustomModel }, { @@ -124,7 +114,7 @@ export const layersData = [ icon: '', description: 'Create entity with A-Frame primitive geometry. Geometry type could be changed in properties panel.', - id: 6, + id: 5, handlerFunction: createPrimitiveGeometry }, { @@ -134,7 +124,7 @@ export const layersData = [ icon: '', description: 'Create intersection entity. Parameters of intersection component could be changed in properties panel.', - id: 7, + id: 6, handlerFunction: createIntersection } ];