Skip to content

Commit 5920ae4

Browse files
committed
Better handle of bitECS/addons state
1 parent 0956082 commit 5920ae4

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

src/react-components/room/RoomSettingsSidebar.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useCallback, useEffect } from "react";
1+
import React, { useCallback, useEffect, useState } from "react";
22
import PropTypes from "prop-types";
33
import { useForm } from "react-hook-form";
44
import styles from "./RoomSettingsSidebar.scss";
@@ -61,6 +61,20 @@ export function RoomSettingsSidebar({
6161
[setValue]
6262
);
6363

64+
const [bitECSLoaderEnabled, setBitECSLoaderEnabled] = useState(shouldUseNewLoader());
65+
const handleBitECSChange = useCallback(
66+
evt => {
67+
setValue("user_data.hubs_use_bitecs_based_client", evt.target.checked);
68+
setBitECSLoaderEnabled(evt.target.checked);
69+
if (!evt.target.checked) {
70+
[...addons.entries()].map(([id, _]) => {
71+
setValue(`user_data.addons.${id}`, evt.target.checked);
72+
});
73+
}
74+
},
75+
[setValue, setBitECSLoaderEnabled]
76+
);
77+
6478
return (
6579
<Sidebar
6680
title={<FormattedMessage id="room-settings-sidebar.title" defaultMessage="Room Settings" />}
@@ -216,17 +230,18 @@ export function RoomSettingsSidebar({
216230
defaultMessage="Enable bitECS based Client"
217231
/>
218232
}
233+
defaultChecked={shouldUseNewLoader()}
234+
onChange={handleBitECSChange}
219235
description={
220236
<FormattedMessage
221237
id="room-settings-sidebar.bitecs-client-activation-description"
222238
defaultMessage="Enable or disable the new Client, which is implemented with bitECS for simplicity and extensibility."
223239
/>
224240
}
225-
{...register("user_data.hubs_use_bitecs_based_client")}
226241
/>
227242
</InputField>
228243
<InputField label={<FormattedMessage id="room-settings-sidebar.add-ons" defaultMessage="Add-ons" />} fullWidth>
229-
{!shouldUseNewLoader() && (
244+
{!bitECSLoaderEnabled && (
230245
<label className={styles.label}>
231246
<FormattedMessage
232247
id="room-settings-sidebar.addons-disabled"
@@ -239,7 +254,7 @@ export function RoomSettingsSidebar({
239254
key={addon.name}
240255
id={id}
241256
label={addon.name}
242-
disabled={!shouldUseNewLoader()}
257+
disabled={!bitECSLoaderEnabled}
243258
defaultChecked={isAddonEnabled(APP, id)}
244259
onChange={handleAddonChange}
245260
description={addon.description}

src/utils/bit-utils.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { HubsWorld } from "../app";
55
import { findAncestor, findAncestors, traverseSome } from "./three-utils";
66
import { EntityID } from "./networking-types";
77
import qsTruthy from "./qs_truthy";
8+
import configs from "./configs";
89

910
export type ElOrEid = EntityID | AElement;
1011

@@ -91,5 +92,12 @@ export function findChildrenWithComponent(world: HubsWorld, component: Component
9192

9293
const forceNewLoader = qsTruthy("newLoader");
9394
export function shouldUseNewLoader() {
94-
return forceNewLoader || APP.hub?.user_data?.hubs_use_bitecs_based_client;
95+
let shouldUseNewLoader = forceNewLoader;
96+
if (configs.feature("bitecs_loader") !== undefined) {
97+
shouldUseNewLoader ||= configs.feature("bitecs_loader");
98+
}
99+
if (APP.hub?.user_data?.hubs_use_bitecs_based_client !== undefined) {
100+
shouldUseNewLoader &&= APP.hub?.user_data?.hubs_use_bitecs_based_client;
101+
}
102+
return shouldUseNewLoader;
95103
}

0 commit comments

Comments
 (0)