public void AddCorrection(EntityCorrection correction) { corrections.Add(correction); }
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; } } } }
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); } }
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; } } } }