//////////////////////////////// // Senders (Server) //////////////////////////////// public static void SendWormholesAndSettingsViaServer(WormholesMod mymod, Player player) { if (Main.netMode != 2) { return; } // Server only WormholesWorld modworld = mymod.GetModWorld <WormholesWorld>(); ModPacket packet = mymod.GetPacket(); // Be sure our wormholes are ready to send (if not already) modworld.SetupWormholes(); packet.Write((byte)WormholeNetProtocolTypes.WormholesAndModSettings); packet.Write((string)mymod.Config.SerializeMe()); packet.Write((int)WormholeManager.PortalCount); for (int i = 0; i < WormholeManager.PortalCount; i++) { var link = modworld.Wormholes.Links[i]; packet.Write((string)link.ID.ToString()); packet.Write((float)link.LeftPortal.Pos.X); packet.Write((float)link.LeftPortal.Pos.Y); packet.Write((float)link.RightPortal.Pos.X); packet.Write((float)link.RightPortal.Pos.Y); } packet.Send(player.whoAmI); }
public static void BroadcastWormholeUpdateViaServer(WormholesMod mymod, string id) { if (Main.netMode != 2) { return; } // Server only WormholesWorld modworld = mymod.GetModWorld <WormholesWorld>(); WormholeLink link = modworld.Wormholes.GetLinkById(id); ModPacket packet = mymod.GetPacket(); if (link == null) { ErrorLogger.Log("WormholesNetProtocol.BroadcastWormholeUpdateViaServer - Invalid wormhole link id."); return; } packet.Write((byte)WormholeNetProtocolTypes.WormholeUpdate); packet.Write((string)id); packet.Write((float)link.RightPortal.Pos.X); packet.Write((float)link.RightPortal.Pos.Y); packet.Write((float)link.LeftPortal.Pos.X); packet.Write((float)link.LeftPortal.Pos.Y); packet.Send(); // Broadcast }
//////////////////////////////// // Recipients (Client) //////////////////////////////// private static void ReceiveWormholesAndSettingsOnClient(WormholesMod mymod, BinaryReader reader) { if (Main.netMode != 1) { return; } // Clients only WormholesWorld modworld = mymod.GetModWorld <WormholesWorld>(); string json = reader.ReadString(); int wormhole_count = reader.ReadInt32(); mymod.Config.DeserializeMe(json); for (int i = 0; i < wormhole_count; i++) { string id = reader.ReadString(); float worm_l_x = reader.ReadSingle(); float worm_l_y = reader.ReadSingle(); float worm_r_x = reader.ReadSingle(); float worm_r_y = reader.ReadSingle(); Vector2 pos_l = new Vector2(worm_l_x, worm_l_y); Vector2 pos_r = new Vector2(worm_r_x, worm_r_y); var link = new WormholeLink(id, WormholeLink.GetColor(i), pos_l, pos_r); modworld.Wormholes.Links.Insert(i, link); } }