Skip to content

Commit 7a074f6

Browse files
authored
Merge pull request #1017 from 3DStreet/managed-street-ui-changes
Manage street - simpler UI
2 parents bab0570 + ad71c4c commit 7a074f6

File tree

3 files changed

+70
-100
lines changed

3 files changed

+70
-100
lines changed

src/components/managed-street.js

+35-73
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,6 @@ function createCloneConfig(name, tags) {
207207

208208
AFRAME.registerComponent('managed-street', {
209209
schema: {
210-
width: {
211-
type: 'number'
212-
},
213210
length: {
214211
type: 'number',
215212
default: 60
@@ -221,28 +218,9 @@ AFRAME.registerComponent('managed-street', {
221218
sourceValue: {
222219
type: 'string'
223220
},
224-
sourceId: {
225-
type: 'string'
226-
},
227221
synchronize: {
228222
type: 'boolean',
229223
default: false
230-
},
231-
showVehicles: {
232-
type: 'boolean',
233-
default: true
234-
},
235-
showStriping: {
236-
type: 'boolean',
237-
default: true
238-
},
239-
enableAlignment: {
240-
type: 'boolean',
241-
default: true
242-
},
243-
showGround: {
244-
type: 'boolean',
245-
default: true
246224
}
247225
},
248226
init: function () {
@@ -253,10 +231,10 @@ AFRAME.registerComponent('managed-street', {
253231
this.refreshFromSource = this.refreshFromSource.bind(this);
254232
this.onSegmentWidthChanged = this.onSegmentWidthChanged.bind(this);
255233

256-
if (this.data.enableAlignment && !this.el.hasAttribute('street-align')) {
234+
if (!this.el.hasAttribute('street-align')) {
257235
this.el.setAttribute('street-align', '');
258236
}
259-
if (this.data.showGround && !this.el.hasAttribute('street-ground')) {
237+
if (!this.el.hasAttribute('street-ground')) {
260238
this.el.setAttribute('street-ground', '');
261239
}
262240
if (!this.el.hasAttribute('street-label')) {
@@ -347,7 +325,7 @@ AFRAME.registerComponent('managed-street', {
347325
const totalWidth = this.managedEntities.reduce((sum, segment) => {
348326
return sum + (segment.getAttribute('street-segment').width || 0);
349327
}, 0);
350-
this.el.setAttribute('managed-street', 'width', totalWidth);
328+
this.actualWidth = totalWidth;
351329

352330
// If we have a previous segment, check if we need to add stripe separators
353331
// TODO: Check striping here in the future
@@ -410,6 +388,7 @@ AFRAME.registerComponent('managed-street', {
410388
oldValue: event.detail.oldWidth,
411389
newValue: event.detail.newWidth
412390
});
391+
this.refreshManagedEntities();
413392
},
414393
update: function (oldData) {
415394
const data = this.data;
@@ -472,7 +451,6 @@ AFRAME.registerComponent('managed-street', {
472451
this.actualWidth = this.managedEntities.reduce((sum, segment) => {
473452
return sum + (segment.getAttribute('street-segment')?.width || 0);
474453
}, 0);
475-
console.log('actual width', this.actualWidth);
476454
},
477455
parseStreetObject: function (streetObject) {
478456
// reset and delete all existing entities
@@ -483,7 +461,6 @@ AFRAME.registerComponent('managed-street', {
483461
'data-layer-name',
484462
'Managed Street • ' + streetObject.name
485463
);
486-
this.el.setAttribute('managed-street', 'width', streetObject.width);
487464
this.el.setAttribute('managed-street', 'length', streetObject.length);
488465

489466
for (let i = 0; i < streetObject.segments.length; i++) {
@@ -739,18 +716,12 @@ AFRAME.registerComponent('managed-street', {
739716
const streetmixName = streetmixResponseObject.name;
740717

741718
this.el.setAttribute('data-layer-name', 'Street • ' + streetmixName);
742-
const streetWidth = streetmixSegments.reduce(
743-
(streetWidth, segmentData) => streetWidth + segmentData.width,
744-
0
745-
);
746-
this.el.setAttribute('managed-street', 'width', streetWidth);
719+
// const streetWidth = streetmixSegments.reduce(
720+
// (streetWidth, segmentData) => streetWidth + segmentData.width,
721+
// 0
722+
// );
747723

748-
const segmentEls = parseStreetmixSegments(
749-
streetmixSegments,
750-
data.showStriping,
751-
data.length,
752-
data.showVehicles
753-
);
724+
const segmentEls = parseStreetmixSegments(streetmixSegments, data.length);
754725
this.el.append(...segmentEls);
755726

756727
this.pendingEntities = segmentEls;
@@ -938,7 +909,7 @@ function supportCheck(segmentType, segmentVariantString) {
938909

939910
// OLD: takes a street's `segments` (array) from streetmix and a `streetElementId` (string) and places objects to make up a street with all segments
940911
// NEW: takes a `segments` (array) from streetmix and return an element and its children which represent the 3D street scene
941-
function parseStreetmixSegments(segments, showStriping, length, showVehicles) {
912+
function parseStreetmixSegments(segments, length) {
942913
// create and center offset to center the street around global x position of 0
943914
const segmentEls = [];
944915

@@ -1010,19 +981,17 @@ function parseStreetmixSegments(segments, showStriping, length, showVehicles) {
1010981
// get the mixin id for the vehicle (is it a trolley or a tram?)
1011982
const objectMixinId =
1012983
segments[i].type === 'streetcar' ? 'trolley' : 'tram';
1013-
if (showVehicles) {
1014-
segmentParentEl.setAttribute(
1015-
'street-generated-clones',
1016-
`mode: random; model: ${objectMixinId}; length: ${length}; spacing: 20; direction: ${direction}; count: 1;`
1017-
);
1018-
}
984+
segmentParentEl.setAttribute(
985+
'street-generated-clones',
986+
`mode: random; model: ${objectMixinId}; length: ${length}; spacing: 20; direction: ${direction}; count: 1;`
987+
);
1019988
segmentParentEl.setAttribute(
1020989
'street-generated-rail',
1021990
`length: ${length}; gauge: ${segments[i].type === 'streetcar' ? 1067 : 1435};`
1022991
);
1023992
} else if (segments[i].type === 'turn-lane') {
1024993
segmentPreset = 'drive-lane'; // use normal drive lane road material
1025-
if (showVehicles && variantList[1] !== 'shared') {
994+
if (variantList[1] !== 'shared') {
1026995
segmentParentEl.setAttribute(
1027996
'street-generated-clones',
1028997
`mode: random;
@@ -1162,29 +1131,24 @@ function parseStreetmixSegments(segments, showStriping, length, showVehicles) {
11621131
segmentPreset = 'bus-lane';
11631132
// get the color for a bus lane
11641133
segmentColor = getSegmentColor(variantList[1]);
1165-
1166-
if (showVehicles) {
1167-
segmentParentEl.setAttribute(
1168-
'street-generated-clones',
1169-
`mode: random; model: bus; length: ${length}; spacing: 15; direction: ${direction}; count: 1;`
1170-
);
1171-
}
1134+
segmentParentEl.setAttribute(
1135+
'street-generated-clones',
1136+
`mode: random; model: bus; length: ${length}; spacing: 15; direction: ${direction}; count: 1;`
1137+
);
11721138
segmentParentEl.setAttribute(
11731139
'street-generated-stencil',
11741140
`stencils: word-only, word-taxi, word-bus; length: ${length}; spacing: 40; padding: 10; direction: ${direction}`
11751141
);
11761142
} else if (segments[i].type === 'drive-lane') {
1177-
if (showVehicles) {
1178-
segmentParentEl.setAttribute(
1179-
'street-generated-clones',
1180-
`mode: random;
1181-
modelsArray: sedan-rig, box-truck-rig, self-driving-waymo-car, suv-rig, motorbike;
1182-
length: ${length};
1183-
spacing: 7.3;
1184-
direction: ${direction};
1185-
count: ${getRandomIntInclusive(2, 4)};`
1186-
);
1187-
}
1143+
segmentParentEl.setAttribute(
1144+
'street-generated-clones',
1145+
`mode: random;
1146+
modelsArray: sedan-rig, box-truck-rig, self-driving-waymo-car, suv-rig, motorbike;
1147+
length: ${length};
1148+
spacing: 7.3;
1149+
direction: ${direction};
1150+
count: ${getRandomIntInclusive(2, 4)};`
1151+
);
11881152
} else if (segments[i].type === 'food-truck') {
11891153
segmentPreset = 'drive-lane';
11901154
segmentParentEl.setAttribute(
@@ -1193,14 +1157,12 @@ function parseStreetmixSegments(segments, showStriping, length, showVehicles) {
11931157
);
11941158
} else if (segments[i].type === 'flex-zone') {
11951159
segmentPreset = 'parking-lane';
1196-
if (showVehicles) {
1197-
const objectMixinId =
1198-
variantList[0] === 'taxi' ? 'sedan-taxi-rig' : 'sedan-rig';
1199-
segmentParentEl.setAttribute(
1200-
'street-generated-clones',
1201-
`mode: random; model: ${objectMixinId}; length: ${length}; spacing: 6; direction: ${direction}; count: 4;`
1202-
);
1203-
}
1160+
const objectMixinId =
1161+
variantList[0] === 'taxi' ? 'sedan-taxi-rig' : 'sedan-rig';
1162+
segmentParentEl.setAttribute(
1163+
'street-generated-clones',
1164+
`mode: random; model: ${objectMixinId}; length: ${length}; spacing: 6; direction: ${direction}; count: 4;`
1165+
);
12041166
segmentParentEl.setAttribute(
12051167
'street-generated-stencil',
12061168
`stencils: word-loading-small, word-only-small; length: ${length}; spacing: 40; padding: 10; direction: ${direction}`
@@ -1426,7 +1388,7 @@ function parseStreetmixSegments(segments, showStriping, length, showVehicles) {
14261388
let previousSegment = segments[i - 1];
14271389
let separatorMixinId = getSeparatorMixinId(previousSegment, currentSegment);
14281390

1429-
if (separatorMixinId && showStriping) {
1391+
if (separatorMixinId) {
14301392
segmentParentEl.setAttribute(
14311393
'street-generated-striping',
14321394
`striping: ${separatorMixinId}; length: ${length}; segmentWidth: ${segmentWidthInMeters};`

src/editor/components/components/CommonComponents.js

+4
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ export default class CommonComponents extends React.Component {
4747
const entity = this.props.entity;
4848
// return ['position', 'rotation', 'scale', 'visible']
4949
return ['position', 'rotation', 'scale'].map((componentName) => {
50+
// if entity has managed-street component, then don't show scale
51+
if (componentName === 'scale' && entity.components['managed-street']) {
52+
return null;
53+
}
5054
const schema = AFRAME.components[componentName].schema;
5155
var data = entity.object3D[componentName];
5256
if (componentName === 'rotation') {

src/editor/components/components/ManagedStreetSidebar.js

+31-27
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,44 @@ import PropertyRow from './PropertyRow';
33

44
const ManagedStreetSidebar = ({ entity }) => {
55
const componentName = 'managed-street';
6+
const labelComponentName = 'street-label';
67
// Check if entity and its components exist
78
const component = entity?.components?.[componentName];
9+
const labelComponent = entity?.components?.[labelComponentName];
810

911
return (
1012
<div className="managed-street-sidebar">
1113
<div className="street-controls">
1214
<div className="details">
13-
{component && component.schema && component.data && (
14-
<>
15-
<PropertyRow
16-
key="length"
17-
name="length"
18-
label="Street Length"
19-
schema={component.schema.length}
20-
data={component.data.length}
21-
componentname={componentName}
22-
isSingle={false}
23-
entity={entity}
24-
/>
25-
<PropertyRow
26-
key="width"
27-
name="width"
28-
label="Street Width"
29-
schema={component.schema.width}
30-
data={component.data.width}
31-
componentname={componentName}
32-
isSingle={false}
33-
entity={entity}
34-
/>
35-
<div className="propertyRow">
36-
<div className="text">-----</div>
37-
</div>
38-
</>
39-
)}
15+
{component &&
16+
component.schema &&
17+
component.data &&
18+
labelComponent &&
19+
labelComponent.schema &&
20+
labelComponent.data && (
21+
<>
22+
<PropertyRow
23+
key="length"
24+
name="length"
25+
label="Street Length"
26+
schema={component.schema.length}
27+
data={component.data.length}
28+
componentname={componentName}
29+
isSingle={false}
30+
entity={entity}
31+
/>
32+
<PropertyRow
33+
key="enabled"
34+
name="enabled"
35+
label="Labels"
36+
schema={labelComponent.schema.enabled}
37+
data={labelComponent.data.enabled}
38+
componentname={labelComponentName}
39+
isSingle={false}
40+
entity={entity}
41+
/>
42+
</>
43+
)}
4044
</div>
4145
</div>
4246
</div>

0 commit comments

Comments
 (0)