예제 #1
0
        private static void ReceivePackets(int channel = -1)
        {
            int i   = 0;
            int max = 10;

            if (channel != -1)
            {
                i   = channel;
                max = channel + 1;
            }
            for (i = 0; i < max; i++)
            {
                while (SteamNetworking.IsP2PPacketAvailable(out uint messageSize, i))
                {
                    Console.WriteLine("Packet available of size: " + messageSize);
                    byte[] pubDest = new byte[messageSize];
                    if (SteamNetworking.ReadP2PPacket(pubDest, messageSize, out uint bytesRead, out CSteamID steamIdRemote, i))
                    {
                        switch (i)
                        {
                        case BB_LevelData:
                            IsActive = true;
                            WorldConfigFile config = (WorldConfigFile)CalcHelper.ConvertToObject(pubDest);
                            config.LoadIntoEditor();
                            break;

                        case BB_Ready:
                            _playersReadyCount++;
                            break;

                        case BB_StartTime:
                            _startTime = new DateTime((long)CalcHelper.ConvertToObject(pubDest));
                            break;

                        case BB_TileIdChange:
                            Packet.TileIdChange packet = (Packet.TileIdChange)CalcHelper.ConvertToObject(pubDest);
                            LevelEditor.UpdateTileFromP2P(packet);
                            break;

                        case BB_AllEntities:
                            UpdateEntities(pubDest);
                            break;

                        case BB_EntityUpdate:
                            UpdateEntities(pubDest);
                            break;
                        }

                        // Relay message to others.
                        if (IsHost)
                        {
                            var allButSender = (from client in OtherPlayers
                                                where client != steamIdRemote
                                                select client).ToList();
                            Send(pubDest, EP2PSend.k_EP2PSendReliable, i, allButSender);
                        }
                    }
                }
            }
        }
예제 #2
0
        public static void SendLevel()
        {
            DataFolder.DeleteLevel(DataFolder.LevelDirectory + "/temp.lvl");
            string filePath = DataFolder.CreateNewLevel("temp", 256, 256);

            WorldConfigFile config = DataFolder.GetWorldConfigFile(filePath);

            byte[] levelData = CalcHelper.ToByteArray(config);

            Send(levelData, EP2PSend.k_EP2PSendReliable, BB_LevelData, null);

            config.LoadIntoEditor();
        }
예제 #3
0
        /// <summary>
        /// Used to load a level into gameworld and edit it.
        /// </summary>
        /// <param name="filePath"></param>
        public static void EditLevel(string filePath)
        {
            WorldConfigFile config = GetWorldConfigFile(filePath);

            if (config.TileIDs.Length == 0)
            {
                TMBAW_Game.MessageBox.Show("There is something wrong with this level and it cannot be loaded.");
                return;
            }

            if (!config.CanBeEdited)
            {
                TMBAW_Game.MessageBox.Show("This level cannot be edited.");
                return;
            }

            CurrentLevelFilePath = filePath;
            config.LoadIntoEditor();
        }
예제 #4
0
 public void CreateNewWorld(string levelName)
 {
     WorldConfigFile config = new WorldConfigFile(levelName,256, 256);
     config.LoadIntoEditor();
 }