8000 Client-only Schema updates · Issue #141 · colyseus/schema · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content 8000
Client-only Schema updates #141
Open
@thomaswp

Description

@thomaswp

I'm using colyseus.js with a javascript front end. Is there any way to update a Schema on the client side and have those updates propagate to listeners (onChange, onAdd, etc.). I know traditionally updates should come from the server, not client, but I'll explain why below.

For example, is there a way to have this work?

let mySchema = new MySchema(); // extends Schema

mySchema. => {
  // listen client-side for a change, as usual
  console.log(changes);
};

// try to trigger change client-side
// currently does nothing
myScema.foo = 3;

This is somewhat counterintuitive, and while I'm guess it's not a bug per se, I'm hoping there's a way to work around it.

Rationale: My game uses Colyseus for networking, and I've separated my game logic out so that the server can it and the client responds to state update. That works great. However, I'd like to build a client-only single-player version of the game, which doesn't require a server to run. This in theory should be fine. The game logic doesn't depend on anything in node.js, so the client should be able to run it. I've got messages to work just fine, but the problem is that when my game logic updates the state, the client's listeners don't trigger.

I've tried a naive approach, creating a readState (for client updates) and writeState (for game logic mutations, which would normally run on the server). Then I try:

let bytes = this.writeState.encode();
console.log(bytes);
this.readState.decode(bytes);

But this doesn't seem to be recursive, and I'm guessing I've got it wrong. Is there a better workaround. Thanks for any help!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0