/// <summary> /// 添加玩家 /// </summary> /// <param name="id">角色ID</param> public void AddPlayer(string id) { //多线程 可能会同时操作列表 需要加锁 lock (list) { ScenePlayer p = new ScenePlayer(); p.Id = id; list.Add(p); } }
/// <summary> /// 更新角色信息 /// </summary> /// <param name="id">角色ID</param> /// <param name="x">X坐标</param> /// <param name="y">Y坐标</param> /// <param name="z">Z坐标</param> /// <param name="score">角色分数</param> public void UpdateInfo(string id, float x, float y, float z, int score) { int count = list.Count; ProtocolBytes protocol = new ProtocolBytes(); ScenePlayer p = GetScenePlayer(id); if (p == null) { return; } p.X = x; p.Y = y; p.Z = z; p.Score = score; }
/// <summary> /// 向指定玩家发送 该场景中的角色列表 /// </summary> /// <param name="player">玩家</param> public void SendPlayerList(Player player) { int count = list.Count; ProtocolBytes protocol = new ProtocolBytes(); protocol.AddString("GetList"); protocol.AddInt(count); for (int i = 0; i < count; i++) { ScenePlayer p = list[i]; protocol.AddString(p.Id); protocol.AddFloat(p.X); protocol.AddFloat(p.Y); protocol.AddFloat(p.Z); protocol.AddInt(p.Score); } player.Send(protocol); }
/// <summary> /// 删除玩家 /// </summary> /// <param name="id">角色ID</param> public void DelPlayer(string id) { lock (list) { ScenePlayer p = GetScenePlayer(id); if (p != null) { list.Remove(p); } } //广播通知 其他玩家 该角色离开 //发送 PlayerLeave ProtocolBytes protocol = new ProtocolBytes(); protocol.AddString("PlayerLeave"); protocol.AddString(id); //广播 ServNet.instance.Broadcast(protocol); }