Give entrance its own dedicated section separate from objects
This commit is contained in:
@@ -284,64 +284,60 @@ export function ControlPanel({
|
||||
|
||||
<div className="section">
|
||||
<div className="section-title">Scene</div>
|
||||
<div className="row">
|
||||
<button onClick={placeEntrance} style={{ flex: 1 }}>
|
||||
<button onClick={createObject} style={{ width: '100%' }}>
|
||||
Create Object
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div className="section">
|
||||
<div className="section-title">Entrance</div>
|
||||
{state.entrance ? (
|
||||
<>
|
||||
<div className="grid-2">
|
||||
<label className="field">
|
||||
<span>X</span>
|
||||
<NumberField value={state.entrance.x} width="100%" onChange={(v) => setEntrance({ x: v })} />
|
||||
</label>
|
||||
<label className="field">
|
||||
<span>Y</span>
|
||||
<NumberField value={state.entrance.y} width="100%" onChange={(v) => setEntrance({ y: v })} />
|
||||
</label>
|
||||
<label className="field">
|
||||
<span>Width</span>
|
||||
<NumberField
|
||||
value={state.entrance.width ?? 20}
|
||||
min={10}
|
||||
width="100%"
|
||||
onChange={(v) => setEntrance({ width: v })}
|
||||
/>
|
||||
</label>
|
||||
<label className="field">
|
||||
<span>Height</span>
|
||||
<NumberField
|
||||
value={state.entrance.height ?? 20}
|
||||
min={10}
|
||||
width="100%"
|
||||
onChange={(v) => setEntrance({ height: v })}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
<button
|
||||
style={{ marginTop: 8, width: '100%' }}
|
||||
onClick={() => onStateChange({ ...state, entrance: null })}
|
||||
>
|
||||
Remove Entrance
|
||||
</button>
|
||||
</>
|
||||
) : (
|
||||
<button onClick={placeEntrance} style={{ width: '100%' }}>
|
||||
Place Entrance
|
||||
</button>
|
||||
<button onClick={createObject} style={{ flex: 1 }}>
|
||||
Create Object
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="section">
|
||||
<div className="section-title">Objects</div>
|
||||
<div className="obj-list">{objects.map(renderObjectCard)}</div>
|
||||
|
||||
{state.entrance && (
|
||||
<div
|
||||
className={`obj-card ${selectedId === '__entrance__' ? 'selected' : ''}`}
|
||||
style={{ marginTop: 6 }}
|
||||
>
|
||||
<div className="obj-head" onClick={() => onSelect('__entrance__')}>
|
||||
<span className="obj-swatch" style={{ background: '#3fbf7f' }} />
|
||||
<span className="obj-name">Entrance</span>
|
||||
<span className="obj-badge">fixed</span>
|
||||
</div>
|
||||
{selectedId === '__entrance__' && (
|
||||
<div className="obj-body">
|
||||
<div className="grid-2">
|
||||
<label className="field">
|
||||
<span>X</span>
|
||||
<NumberField value={state.entrance.x} width="100%" onChange={(v) => setEntrance({ x: v })} />
|
||||
</label>
|
||||
<label className="field">
|
||||
<span>Y</span>
|
||||
<NumberField value={state.entrance.y} width="100%" onChange={(v) => setEntrance({ y: v })} />
|
||||
</label>
|
||||
<label className="field">
|
||||
<span>Width</span>
|
||||
<NumberField
|
||||
value={state.entrance.width ?? 20}
|
||||
min={10}
|
||||
width="100%"
|
||||
onChange={(v) => setEntrance({ width: v })}
|
||||
/>
|
||||
</label>
|
||||
<label className="field">
|
||||
<span>Height</span>
|
||||
<NumberField
|
||||
value={state.entrance.height ?? 20}
|
||||
min={10}
|
||||
width="100%"
|
||||
onChange={(v) => setEntrance({ height: v })}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user