Skip to content

Commit

Permalink
Save entity state for legacy objects
Browse files Browse the repository at this point in the history
  • Loading branch information
Stalgia Grigg committed Jun 13, 2023
1 parent 39d3b83 commit 826ec75
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 4 deletions.
27 changes: 25 additions & 2 deletions src/bit-systems/network-receive-system.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { addComponent, defineQuery, enterQuery, hasComponent, removeComponent, r
import { HubsWorld } from "../app";
import { Networked, Owned } from "../bit-components";
import { renderAsNetworkedEntity } from "../utils/create-networked-entity";
import { deleteEntityState, hasSavedEntityState } from "../utils/entity-state-utils";
import { createEntityState, deleteEntityState, hasSavedEntityState } from "../utils/entity-state-utils";
import { networkableComponents, schemas, StoredComponent } from "../utils/network-schemas";
import type { ClientID, CursorBufferUpdateMessage, EntityID, StringID, UpdateMessage } from "../utils/networking-types";
import { hasPermissionToSpawn } from "../utils/permissions";
Expand Down Expand Up @@ -145,6 +145,29 @@ export function networkReceiveSystem(world: HubsWorld) {
}
}

// Handle save entity messages
for (let i = 0; i < pendingMessages.length; i++) {
const message = pendingMessages[i];

for (let j = 0; j < message.saves.length; j++) {
const { networkId: nidString } = message.saves[j];
const nid = APP.getSid(nidString);
const eid = world.nid2eid.get(nid);

if (!eid) {
console.warn(`Received save message for unknown entity ${nidString}.`);
continue;
}

if (!isNetworkInstantiated(eid)) {
console.warn(`Received save message for non-network-instantiated entity ${nidString}.`);
continue;
}

createEntityState(APP.hubChannel!, world, eid);
}
}

{
// If reticulum told us to reassign an entity's creator, do so now
pendingCreatorChanges.forEach(({ nid, creator }) => {
Expand Down Expand Up @@ -183,7 +206,7 @@ export function networkReceiveSystem(world: HubsWorld) {
}

// Process the stored message before other updates
pendingMessages.unshift({ creates: [], updates, deletes: [] });
pendingMessages.unshift({ creates: [], updates, deletes: [], saves: [] });
storedUpdates.delete(nid);
}
});
Expand Down
3 changes: 2 additions & 1 deletion src/utils/listen-for-network-messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ export function queueEntityStateAsMessage(entityState: EntityState) {
fromClientId: "reticulum",
creates: [entityState.create_message],
updates: entityState.update_messages,
deletes: []
deletes: [],
saves: []
});
pendingCreatorChanges.push({
nid: rootNid,
Expand Down
12 changes: 11 additions & 1 deletion src/utils/message-for.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import type {
EntityID,
Message,
NetworkID,
SaveMessage,
StorableUpdateMessage
} from "./networking-types";

Expand All @@ -36,7 +37,8 @@ export function messageFor(
const message: Message = {
creates: [],
updates: [],
deletes: []
deletes: [],
saves: []
};

created.forEach(eid => {
Expand Down Expand Up @@ -110,6 +112,7 @@ export interface LegacyRoomObject {
export function messageForLegacyRoomObjects(objects: LegacyRoomObject[]) {
const message: Message = {
creates: [],
saves: [],
updates: [],
deletes: []
};
Expand All @@ -131,6 +134,13 @@ export function messageForLegacyRoomObjects(objects: LegacyRoomObject[]) {
};
message.creates.push(createMessage);

if (obj.extensions.HUBS_components.pinnable.pinned) {
const saveMessage: SaveMessage = {
networkId: nid
};
message.saves.push(saveMessage);
}

const updateMessage: StorableUpdateMessage = {
data: {
"networked-transform": {
Expand Down
4 changes: 4 additions & 0 deletions src/utils/networking-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ export type CreateMessage = {
prefabName: PrefabName;
initialData: InitialData;
};
export type SaveMessage = {
networkId: NetworkID;
};
export interface CursorBuffer extends Array<any> {
cursor?: number;
}
Expand All @@ -38,6 +41,7 @@ export type Message = {
creates: CreateMessage[];
updates: UpdateMessage[];
deletes: DeleteMessage[];
saves: SaveMessage[];
};
export interface StorableMessage extends Message {
version: 1;
Expand Down

0 comments on commit 826ec75

Please sign in to comment.