private void SyncUserObjectToOtherUsers(User user) { if (null != user) { EntityInfo userInfo = user.Info; Msg_RC_CreateNpc bder = DataSyncUtility.BuildCreateNpcMessage(userInfo); Msg_RC_SyncProperty msg = DataSyncUtility.BuildSyncPropertyMessage(userInfo); RoomUserManager roomUserMgr = GetRoomUserManager(); if (null != userInfo && null != roomUserMgr && null != roomUserMgr.ActiveScene) { for (LinkedListNode <EntityInfo> linkNode = EntityManager.Entities.FirstNode; null != linkNode; linkNode = linkNode.Next) { EntityInfo npc = linkNode.Value; if (null != npc && npc != userInfo) { User other = npc.CustomData as User; if (null != other) { other.SendMessage(RoomMessageDefine.Msg_RC_CreateNpc, bder); other.SendMessage(RoomMessageDefine.Msg_RC_SyncProperty, msg); } } } } } }
public static void Execute(object msg, User user) { Msg_CR_Enter enter_msg = msg as Msg_CR_Enter; if (enter_msg == null) { return; } LogSys.Log(LOG_TYPE.DEBUG, "user {0}({1},{2},{3}) enter.", user.RoleId, user.GetKey(), user.Guid, user.Name); user.UserControlState = (int)UserControlState.User; user.IsEntered = true; RoomUserManager roomUserMgr = user.OwnRoomUserManager; if (null != roomUserMgr) { Scene scene = roomUserMgr.ActiveScene; if (null != scene) { EntityInfo userInfo = user.Info; if (null != userInfo) { if (scene.SceneState == SceneState.Running) { scene.SyncForNewUser(user); scene.StorySystem.SendMessage("user_enter_scene", userInfo.GetId(), userInfo.GetUnitId(), userInfo.GetCampId(), userInfo.GetMovementStateInfo().PositionX, userInfo.GetMovementStateInfo().PositionZ); } } } } }
private void TickPreloading() { long curTime = TimeUtility.GetLocalMilliseconds(); if (m_LastPreloadingTickTime + c_PreloadingTickInterval < curTime) { m_LastPreloadingTickTime = curTime; bool haveUser = false; bool canStart = true; foreach (User us in m_RoomInfo.RoomUsers) { if (us.IsEntered) { haveUser = true; } } if (!haveUser) { canStart = false; } if (canStart) { LoadObjects(); RoomUserManager roomUserMgr = GetRoomUserManager(); if (null != roomUserMgr) { foreach (User us in m_RoomInfo.RoomUsers) { EnterScene(us); } } //先让各客户端创建自己与场景相关信息 foreach (User us in m_RoomInfo.RoomUsers) { if (us.IsEntered) { //发玩家阵营给玩家 Msg_RC_CampChanged msg = new Msg_RC_CampChanged(); msg.obj_id = 0; msg.camp_id = us.LobbyUserData.Camp; us.SendMessage(RoomMessageDefine.Msg_RC_CampChanged, msg); //将场景里的对象发给玩家 SyncSceneObjectsToUser(us); } } //给观察者发初始玩家与场景对象信息 foreach (Observer observer in m_RoomInfo.RoomObservers) { if (null != observer && !observer.IsIdle && observer.IsEntered) { SyncForNewObserver(observer); } } m_SceneState = SceneState.Running; } } }
public Room() { m_Dispatcher = new Dispatcher(); m_DisconnectedUsers = new List <User>(); m_RequestDeleteUsers = new List <User>(); m_CanCloseTime = 0; m_RoomUserMgr = new RoomUserManager(); }
public void SyncForNewUser(User user) { if (null != user) { EntityInfo userInfo = user.Info; RoomUserManager roomUserMgr = GetRoomUserManager(); if (null != userInfo && null != roomUserMgr && null != roomUserMgr.ActiveScene) { //发阵营给自己 Msg_RC_CampChanged msg = new Msg_RC_CampChanged(); msg.obj_id = 0; msg.camp_id = user.LobbyUserData.Camp; user.SendMessage(RoomMessageDefine.Msg_RC_CampChanged, msg); //同步场景数据给自己 SyncSceneObjectsToUser(user); SyncUserObjectToOtherUsers(user); } } }
public void SyncForNewObserver(Observer observer) { if (null != observer) { RoomUserManager roomUserMgr = GetRoomUserManager(); if (null != roomUserMgr && null != roomUserMgr.ActiveScene) { //同步场景数据给观察者 for (LinkedListNode <EntityInfo> linkNode = EntityManager.Entities.FirstValue; null != linkNode; linkNode = linkNode.Next) { EntityInfo npc = linkNode.Value; if (null != npc) { Msg_RC_CreateNpc bder = DataSyncUtility.BuildCreateNpcMessage(npc); observer.SendMessage(RoomMessageDefine.Msg_RC_CreateNpc, bder); } } } } }
private void SyncSceneObjectsToUser(User user) { if (null != user) { EntityInfo userInfo = user.Info; RoomUserManager roomUserMgr = GetRoomUserManager(); if (null != userInfo && null != roomUserMgr && null != roomUserMgr.ActiveScene) { for (LinkedListNode <EntityInfo> linkNode = EntityManager.Entities.FirstNode; null != linkNode; linkNode = linkNode.Next) { EntityInfo npc = linkNode.Value; if (null != npc) { Msg_RC_CreateNpc bder = DataSyncUtility.BuildCreateNpcMessage(npc); user.SendMessage(RoomMessageDefine.Msg_RC_CreateNpc, bder); Msg_RC_SyncProperty msg = DataSyncUtility.BuildSyncPropertyMessage(npc); user.SendMessage(RoomMessageDefine.Msg_RC_SyncProperty, msg); } } } } }
public void SetRoomUserManager(RoomUserManager roomUserMgr) { m_RoomInfo = roomUserMgr; }