//进入游戏状态的初始化 public override void StateBegin() { inGameSystem = new InGameSystem(); inGameSystem.Init(inGameSystem.SynopsisSystem); //Debug.Log(GamingData.synData.npcState.Count); //Debug.Log((NpcState)GamingData.synData.npcState[1]); //Debug.Log((NpcState)GamingData.synData.npcState[2]); //Debug.Log((TaskState)GamingData.synData.taskState); }
/// <summary> /// 构造方法 /// </summary> public SynopsisSystem(InGameSystem _inGame) : base(_inGame) { _inGameSystem = _inGame; EventCenter.AddListener(EventDefine.ShowUIC, ShowUI); EventCenter.AddListener(EventDefine.ShowTalkTextC, ShowTalk); EventCenter.AddListener(EventDefine.ChangeNpcState, SetNpcState); EventCenter.AddListener(EventDefine.ShowTaskButtonC, ShowButton); EventCenter.AddListener(EventDefine.SetTaskPanelC, ShowTaskPanel); EventCenter.AddListener(EventDefine.MiniTaskShowC, ShowMiniTaskPanel); EventCenter.AddListener(EventDefine.Test, ShowProgress); taskSystem = new TaskSystem(this); npcSystem = new NpcSystem(this); talkSystem = new TalkSystem(this); currentTask = new Task(); //currentTask.taskState = TaskState.PickUp; }
public IMainGameSystem(InGameSystem _inGameSystem) { inGameSystem = _inGameSystem; }
public HeroSystem(InGameSystem _inGameSystem) : base(_inGameSystem) { }
/// <summary> /// On va lire les messages des clients et du masterserver /// </summary> async void ReceiveIncomingMessage(NetPeer peer) { var msg = peer.ReadMessage(); NetOutgoingMessage replyMessage = null; if (msg != null) { Log("t: " + msg.MessageType); if (msg.MessageType == NetIncomingMessageType.UnconnectedData) { // Self if (msg.ReadString() == "ARMY") { var army = msg.ReadArmyScheme(); army.Build(); Console.WriteLine("NORMAL::\n"); Console.WriteLine(PatapolisArmyScheme.ToString() + "\n"); Console.WriteLine("SERIALIZED::\n"); Console.WriteLine(army.ToString()); } } if (msg.MessageType == NetIncomingMessageType.ConnectionApproval) { msg.SenderConnection.Approve(); } if (msg.MessageType == NetIncomingMessageType.DebugMessage) { try { Log(msg.ReadString()); } catch { } } if (msg.MessageType == NetIncomingMessageType.WarningMessage) { Log("WA!!! : " + msg.ReadString()); } if (msg.MessageType == NetIncomingMessageType.StatusChanged) { Console.WriteLine("New status " + msg.SenderConnection.Status); if (msg.SenderConnection.GameUserExist()) { if (msg.SenderConnection.Status == NetConnectionStatus.Disconnected) { CheckUserStatus(); usersInRoom.Remove(msg.SenderConnection.GetGameUser().login); } } if (msg.SenderConnection.Peer == UsingPeer && msg.SenderConnection.Status == NetConnectionStatus.Disconnected) { shutdownSent = true; } } /*if (msg.MessageType == NetIncomingMessageType.Data) * { * try * { * if (msg.PeekString() == "REPLY") * { * msg.ReadString(); //< skip * var handle = msg.ReadInt64(); * Message.TriggerHandler(handle, msg); * } * } * catch { } * }*/ if (msg.MessageType == NetIncomingMessageType.Data) { var header = msg.PeekString(); Log("header:" + header); if (header == "USERCONNECT") { msg.ReadString(); msg.SenderConnection.Tag = "USER"; string login = msg.ReadString(); Log("(Connection) Wanted connection + " + login); if (!string.IsNullOrEmpty(login) && usersInRoom.TryGetValue(login, out var outputUser)) { outputUser.AddNetConnection(msg.SenderConnection); } else if (!string.IsNullOrEmpty(login)) { waitedUsers[login] = msg.SenderConnection; Log("(Connection) Will wait for " + login); } await Task.Factory.StartNew(() => { while (waitedUsers.ContainsKey(login)) { ; } }); foreach (var user in usersInRoom) { if (user.Value == null) { continue; } if (user.Value.ownedPlayers[0].EntitiesInPossession != null) { foreach (var entity in user.Value.ownedPlayers[0].EntitiesInPossession) { OutGameSystem.SendNewEntityTo(usersInRoom[login], user.Value.login, entity); } } } } PataMessage <object> pataMsg = null; if ((pataMsg = Message.Read <object>(msg)) != null) { Console.WriteLine("pataMsg received!" + pataMsg.contents.ContentType); switch (pataMsg.contents.ContentType) { case Constants.MESSAGETYPE.SYSTEM: { if (msg.PeekString() == Constants.SYSTEM.HANDLE) { msg.ReadString(); //< Skip var handle = msg.ReadInt32(); var sendMsg = UsingPeer.CreateMessage().Start(Constants.MESSAGETYPE.SYSTEM); sendMsg.Write(Constants.SYSTEM.HANDLE_SUCCESS); sendMsg.Write(handle); UsingPeer.SendMessage(sendMsg, msg.SenderConnection, NetDeliveryMethod.ReliableOrdered); } if (msg.PeekString() == Constants.SYSTEM.HANDLE_SUCCESS) { msg.ReadString(); //< Skip var handle = msg.ReadInt32(); var hash = (Hashtable)msg.SenderConnection.Peer.Tag; hash["handle"] = handle; } break; } // Si le message est de Type OUTGAME // Donc les connections des joueurs, hors gameplay quoi case Constants.MESSAGETYPE.OUTGAME: { OutGameSystem.Receive(msg, msg.ReadString()); break; } case Constants.MESSAGETYPE.INGAME: { InGameSystem.Receive(msg, msg.ReadString()); break; } case Constants.MESSAGETYPE.CHAT: { if (msg.ReadString() == Constants.CHAT.GO_SENDMESSAGE) { var messageFP = msg.ReadString(); var messageType = msg.ReadByte(); var sendMsg = UsingPeer.CreateMessage() .Start(Constants.MESSAGETYPE.CHAT); sendMsg.Write(Constants.CHAT.EVENT_ON_MESSAGERECEIVED); sendMsg.Write(msg.SenderConnection.GetGameUser()?.login); sendMsg.Write(messageFP); sendMsg.Write(messageType); var objSerialized = msg.SenderConnection.GetGameUser().Serialize(); sendMsg.Write(objSerialized.Length); sendMsg.Write(objSerialized); Log("Replying message... to:"); var userList = new List <NetConnection>(); foreach (var user in usersInRoom) { if (user.Value.IfInitiliazed() != null) { userList.Add(user.Value.GetNetConnection()); Log("<>" + user.Value.login); } } if (userList.Count > 0) { UsingPeer.SendMessage(sendMsg, userList, NetDeliveryMethod.ReliableOrdered, 0); } } break; } case Constants.SYSTEM.DEBUG: { Console.WriteLine(msg.ReadString()); break; } } } } } MasterMessageLoop(); ClientMessageLoop(); }