I get an empty list when processing the "Add" operation. The Unity example shows how the X and Y value is received though. This is what my code looks like. What could I be missing?
client.
room.Listen("players/:id", OnPlayerChange);
private void OnPlayerChange(DataChange change)
{
Debug.Log($"OnPlayerChange: {change.operation} > {change.path["id"]} > {change.value}");
if (change.operation == "add")
{
// extract data
IndexedDictionary<string, object> value = (IndexedDictionary<string, object>)change.value;
// this prints (0) - no values in the dictionary
Debug.LogWarning($"There are {value.Count} entries");
string id = change.path["id"];
Vector2 pos = new Vector3(Convert.ToSingle(value["x"]), Convert.ToSingle(value["y"]));
int hp = Convert.ToInt32(value["hp"]);
// create and add to list of players
gameController.CreateActor(id, pos, hp);
}
else if (change.operation == "remove")
{
// remove player
gameController.RemoveActor(change.path["id"]);
}
}
server
import { Client, Room, nosync } from "colyseus";
export class Player
{
x: number;
y: number;
hp: number;
@nosync client: Client;
@nosync room: Room;
constructor(client: Client, room: Room)
{
this.client = client;
this.room = room;
}
}
import { EntityMap, Client, Room } from "colyseus";
import { Player } from "./Player";
export class GameState
{
players: EntityMap<Player> = {};
addPlayer(client: Client, room: Room)
{
this.players[client.sessionId] = new Player(client, room);
}
removePlayer(client: Client)
{
delete this.players[client.sessionId];
}
performAction(client: Client, action: string)
{
if (action === "left")
{
this.players[client.sessionId].x -= 1;
}
else if (action === "right")
{
this.players[client.sessionId].x += 1;
}
}
}