Example #1
0
 public void AddCorrection(EntityCorrection correction)
 {
     corrections.Add(correction);
 }
Example #2
0
        async void MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
        {
            using (DataReader dataReader = args.GetDataReader())
            {
                dataReader.ByteOrder = ByteOrder.LittleEndian;
                Debug.WriteLine("buffer lntgh: " + dataReader.UnconsumedBufferLength);
                while (dataReader.UnconsumedBufferLength != 0)
                {
                    Code   code = (Code)dataReader.ReadInt32();
                    Packet p;
                    switch (code)
                    {
                    case Code.Connecting:
                    {
                        Connected = true;
                        hostName  = args.RemoteAddress;
                        Debug.WriteLine("Connected to: " + hostName);
                        try
                        {
                            Stream output = (await socket.GetOutputStreamAsync(hostName, Port)).AsStreamForWrite();
                            writer = new BinaryWriter(output);
                        }
                        catch (Exception e)
                        {
                            Debug.WriteLine(e.Message);
                        }
                        send_buffer.Add(new Connected());
                        p = null;
                        break;
                    }

                    case Code.Ping:
                    {
                        p = Ping.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.Pong:
                    {
                        p = Pong.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.Acknowledge:
                    {
                        p = Acknowledge.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.OtherPlayerCreationData:
                    {
                        p = AddOtherPlayer.ConstructPacket(dataReader);
                        send_buffer.Add(new Acknowledge(p.Code));
                        break;
                    }

                    case Code.Input:
                    {
                        p = Input.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.EntityXYCorrection:
                    {
                        p = EntityCorrection.ConstructPacket(dataReader);
                        break;
                    }

                    default: p = null; break;
                    }

                    if (p != null)
                    {
                        receive_buffer.Add(p);
                    }
                    else
                    {
                        Debug.WriteLine("Unrecognized packet " + code);
                        break;
                    }
                }
            }
        }
Example #3
0
        public void Update()
        {
            while (corrections.Count != 0)
            {
                EntityCorrection correction = corrections[0];

                foreach (Entity entity in entities)
                {
                    if (entity.ID == correction.ID)
                    {
                        entity.Correct(correction.X, correction.Y);
                        break;
                    }
                }
                corrections.RemoveAt(0);
            }

            entities.AddRange(tmp);
            tmp.Clear();

            //Remove entities from map first
            if (map != null)
            {
                entities.ForEach(entity =>
                {
                    if (entity.IsRemoved())
                    {
                        map.RemoveEntity(entity);
                    }
                });
            }
            //Remove entities
            entities.RemoveAll(entity => entity.IsRemoved());

            players.RemoveAll(player => player.IsRemoved());

            //Maintain active entities
            active_entities.Clear();
            entities.ForEach(e =>
            {
                bool inside = false;
                players.ForEach(p =>
                {
                    if (p.IsWithin(e.GetXY()))
                    {
                        inside = true;
                    }
                });
                if (inside)
                {
                    active_entities.Add(e);
                }
            });

            //Update active entities
            active_entities.ForEach(entity => entity.Update());

            //Update map after entities
            if (map != null)
            {
                map.Update();
                map.UpdateSectors(active_entities);
            }
        }
Example #4
0
        void MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
        {
            using (DataReader dataReader = args.GetDataReader())
            {
                dataReader.ByteOrder = ByteOrder.LittleEndian;
                while (dataReader.UnconsumedBufferLength != 0)
                {
                    Code   code = (Code)dataReader.ReadInt32();
                    Packet p;
                    switch (code)
                    {
                    case Code.Connected:
                    {
                        Connected = true;
                        p         = null;
                        break;
                    }

                    case Code.Ping:
                    {
                        p = Ping.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.Pong:
                    {
                        p = Pong.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.LevelGenerationData:
                    {
                        p = LevelGenData.ConstructPacket(dataReader);
                        send_buffer.Add(new Acknowledge(p.Code));
                        break;
                    }

                    case Code.Acknowledge:
                    {
                        p = Acknowledge.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.OtherPlayerCreationData:
                    {
                        p = AddOtherPlayer.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.OtherPlayerID:
                    {
                        p = OtherPlayerID.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.Input:
                    {
                        p = Input.ConstructPacket(dataReader);
                        break;
                    }

                    case Code.EntityXYCorrection:
                    {
                        p = EntityCorrection.ConstructPacket(dataReader);
                        break;
                    }

                    default: p = null; break;
                    }

                    if (p != null)
                    {
                        receive_buffer.Add(p);
                    }
                    else
                    {
                        Debug.WriteLine("Unrecognized packet " + code);
                        break;
                    }
                }
            }
        }