void IRoomRPCMethodClient.onPlayerPropChange(int playerID, string name, object val) { log?.logTrace($"{this.name} 收到玩家属性改变事件。玩家ID:{playerID}, Key: {name}, Value: {val}"); cachedRoomData.setPlayerProp(playerID, name, val); OnRoomPlayerDataChanged?.Invoke(cachedRoomData.playerDataList.ToArray()); }
void IRoomRPCMethodClient.onPlayerRemove(int playerID) { log?.logTrace($"{name} 收到移除玩家事件。玩家ID:{playerID}"); if (!cachedRoomData.containsPlayer(playerID)) { log?.logWarn($"{name} 的房间信息中不存在存在ID为{playerID}的玩家,但却收到了 onPlayerRemove 事件,这是有问题的。"); return; } cachedRoomData.playerDataList.RemoveAll(p => p.id == playerID); OnRoomPlayerDataChanged?.Invoke(cachedRoomData.playerDataList.ToArray()); }
void IRoomRPCMethodClient.updatePlayerData(RoomPlayerData data) { log?.logTrace($"{name} 收到玩家信息改变事件。玩家信息: {data}"); for (int i = 0; i < cachedRoomData.playerDataList.Count; i++) { if (cachedRoomData.playerDataList[i].id == data.id) { cachedRoomData.playerDataList[i] = data; } } OnRoomPlayerDataChanged?.Invoke(cachedRoomData.playerDataList.ToArray()); }
void IRoomRPCMethodClient.onPlayerAdd(RoomPlayerData data) { log?.logTrace($"{name} 收到新增玩家事件。玩家信息:{data}"); if (cachedRoomData.containsPlayer(data.id)) { log?.logWarn($"{name} 的房间信息中已经存在ID为{data.id}的玩家,但却收到了 onPlayerAdd 事件,这是有问题的。"); for (int i = 0; i < cachedRoomData.playerDataList.Count; i++) { if (cachedRoomData.playerDataList[i].id == data.id) { cachedRoomData.playerDataList[i] = data; } } } else { cachedRoomData.playerDataList.Add(data); } OnRoomPlayerDataChanged?.Invoke(cachedRoomData.playerDataList.ToArray()); }
/// <summary> /// 触发 OnRoomPlayerDataChanged 事件 /// </summary> /// <param name="data"></param> protected void invokeOnRoomPlayerDataChanged(RoomPlayerData[] data) { OnRoomPlayerDataChanged?.Invoke(data); }