Ejemplo n.º 1
0
        /// <summary>
        /// Update 
        /// </summary>
        /// <param name="simulation">Simulation.</param>
        /// <param name="items">Items.</param>
        public void Update(SimulationComponent simulation, Dictionary<int, ItemCacheEntry> items)
        {
            Message m;
            while (messages.TryDequeue(out m))
            {
                switch (m.MessageType)
                {
                    case MessageType.ClientClose:
                        Close(null, true);
                        break;
                    case MessageType.ClientUpdateVelocity:
                        Player.Velocity = new Vector2(
                            BitConverter.ToSingle(m.Payload, 0), 
                            BitConverter.ToSingle(m.Payload, 4));
                        break;
                    case MessageType.ClientTriggerAttack:
                        Player.AttackSignal = true;
                        break;
                    case MessageType.ClientQuestUpdate:
                        using (MemoryStream stream = new MemoryStream(m.Payload))
                        {
                            using (BinaryReader br = new BinaryReader(stream))
                            {
                                string quest = br.ReadString();
                                string progress = br.ReadString();
                                QuestState state = (QuestState)br.ReadByte();
                                switch (state)
                                {
                                    case QuestState.Active:
                                        simulation.SetQuestProgress(quest, progress);
                                        break;
                                    case QuestState.Failed:
                                        simulation.SetQuestFail(quest, progress);
                                        break;
                                    case QuestState.Succeeded:
                                        simulation.SetQuestSuccess(quest, progress);
                                        break;
                                }
                            }
                        }
                        break;
                    case MessageType.ClientTransferItem:
                        int itemId = BitConverter.ToInt32(m.Payload, 0);
                        int senderId = BitConverter.ToInt32(m.Payload, 4);
                        int receiverId = BitConverter.ToInt32(m.Payload, 8);

                        Item item = null;
                        if (items.ContainsKey(itemId))
                            item = items[itemId].Item;

                        Item sender = null;
                        if (items.ContainsKey(senderId))
                            sender = items[senderId].Item;

                        Item receiver = null;
                        if (items.ContainsKey(receiverId))
                            receiver = items[receiverId].Item;

                        if (item != null && sender != null)
                            simulation.Transfer(item, sender as IInventory, receiver as IInventory);

                        break;
                }
            }
        }