コード例 #1
0
    public static void RegisterPlayer(string _netID, MultiPlayerManager _player)
    {
        string _playerID = PLAYER_ID_PREFIX + _netID;

        players.Add(_playerID, _player);
        _player.transform.name = _playerID;
    }
コード例 #2
0
 //================================================================================================//
 /// <summary>
 ///  check if linked route is set
 /// </summary>
 public int VerifyRouteSet()
 {
     // call route_set routine from main signal
     if (TrackJunctionNode > 0)
     {
         return(MainSignal.CheckRouteSet(JunctionMainNode, TrackJunctionNode) ? 1 : 0);
     }
     //added by JTang
     else if (MultiPlayerManager.IsMultiPlayer())
     {
         TrackNode node = Simulator.Instance.TrackDatabase.TrackDB.TrackNodes[MainSignal.TrackNode];
         if (!(node is TrackJunctionNode) && node.TrackPins != null && (int)MainSignal.TrackCircuitDirection < node.TrackPins.Length)
         {
             node = Simulator.Instance.TrackDatabase.TrackDB.TrackNodes[node.TrackPins[(int)MainSignal.TrackCircuitDirection].Link];
             if (!(node is TrackJunctionNode junctionNode))
             {
                 return(0);
             }
             for (int pin = junctionNode.InPins; pin < junctionNode.InPins + junctionNode.OutPins; pin++)
             {
                 if (junctionNode.TrackPins[pin].Link == MainSignal.TrackNode && pin - junctionNode.InPins != junctionNode.SelectedRoute)
                 {
                     return(0);
                 }
             }
         }
     }
     return(1);
 }
コード例 #3
0
ファイル: MultiScore.cs プロジェクト: Arkant0ss/Inertia
    void CmdPlayerShot(string _playerID, int _damage)
    {
        Debug.Log(_playerID + " has been shot");
        MultiPlayerManager _player = MultiManager.GetPlayer(_playerID);

        _player.RpcTakeDamage(_damage);
    }
コード例 #4
0
        internal override void BeginRender(RenderFrame frame)
        {
            // Do this here (instead of RenderProcess) because we only want to measure/time the running game.
            if (Game.Settings.Profiling)
            {
                if ((Game.Settings.ProfilingFrameCount > 0 && ++profileFrames > Game.Settings.ProfilingFrameCount) || (Game.Settings.ProfilingTime > 0 && Viewer?.RealTime >= Game.Settings.ProfilingTime))
                {
                    Game.PopState();
                }
            }

            if (firstFrame)
            {
                // Turn off the 10FPS fixed-time-step and return to running as fast as we can.
                Game.IsFixedTimeStep   = false;
                Game.InactiveSleepTime = TimeSpan.Zero;

                // We must create these forms on the main thread (Render) or they won't pump events correctly.

                if (MultiPlayerManager.IsMultiPlayer() || Game.Settings.ViewDispatcher)
                {
                    Program.DebugViewer = new DispatchViewer(Viewer);
                    Program.DebugViewer.Hide();
                    Viewer.DebugViewerEnabled = false;
                }

                Program.SoundDebugForm = new SoundDebugForm(Viewer);
                Program.SoundDebugForm.Hide();
                Viewer.SoundDebugFormEnabled = false;

                firstFrame = false;
            }
            Viewer.BeginRender(frame);
        }
コード例 #5
0
 public void onUserLeftRoom(RoomData eventObj, string username)
 {
     Debug.Log("onUserLeftRoom : " + username);
     if (username != MultiPlayerManager.Instance.Username && Globals.IS_IN_GAME && !GameManager.Instance.IsGameOver)
     {
         GameManager.Instance.WinGame(MultiPlayerManager.Instance.PlayerSide, MultiPlayerManager.ParseUsername(username) + " gave up");
     }
 }
コード例 #6
0
ファイル: PlayerSetup.cs プロジェクト: Arkant0ss/Inertia
    public override void OnStartClient()
    {
        base.OnStartClient();

        string             _netID  = GetComponent <NetworkIdentity>().netId.ToString();
        MultiPlayerManager _player = GetComponent <MultiPlayerManager>();

        MultiManager.RegisterPlayer(_netID, _player);
    }
コード例 #7
0
        public void InitMessage()
        {
            Visible = true;
            keyboardInput.SuspendForOverlayInput();
            game.Window.TextInput += Window_TextInput;

            if (!string.IsNullOrEmpty(MultiPlayerManager.Instance().lastSender))
            {
                messageLabel.Text = MultiPlayerManager.Instance().lastSender + ":";
            }
        }
コード例 #8
0
        private void SendMessage()
        {
            //we need to send message out
            string user = "";

            if (string.IsNullOrEmpty(MultiPlayerManager.Instance().lastSender)) //server will broadcast the message to everyone
            {
                user = MultiPlayerManager.IsServer() ? string.Join("", MultiPlayerManager.OnlineTrains.Players.Keys.Select((string k) => $"{k}\r")) + "0END" : "0Server\r0END";
            }

            string msg   = messageText.ToString();
            int    index = msg.IndexOf(':');

            if (index > 0)
            {
                msg = messageText.ToString(index + 1, messageText.Length - index - 1);

                IEnumerable <string> onlinePlayers = messageLabel.Text.Substring(0, index)
                                                     .Split(',')
                                                     .Select((string n) => n.Trim())
                                                     .Where((string nt) => MultiPlayerManager.OnlineTrains.Players.ContainsKey(nt))
                                                     .Select((string nt) => $"{nt}\r");

                string newUser = string.Join("", onlinePlayers);
                if (newUser.Length > 0)
                {
                    user = newUser;
                }
                user += "0END";
            }

            string msgText = new MSGText(MultiPlayerManager.GetUserName(), user, msg).ToString();

            try
            {
                MultiPlayerManager.Notify(msgText);
            }
#pragma warning disable CA1031 // Do not catch general exception types
            catch
#pragma warning restore CA1031 // Do not catch general exception types
            {
            }
            finally
            {
                Visible = false;
                messageText.Clear();
                game.Window.TextInput -= Window_TextInput;
                keyboardInput.ResumeFromOverlayInput();
            }
        }
コード例 #9
0
        public static void RegisterInputEvents(Viewer viewer)
        {
            if (null == viewer)
            {
                throw new ArgumentNullException(nameof(viewer));
            }

            //In Multiplayer, I maybe the helper, but I can request to be the controller
            // Horn and bell are managed by UpdateHornAndBell in MSTSLocomotive.cs
            viewer.UserCommandController.AddEvent(UserCommand.GameRequestControl, KeyEventType.KeyPressed, MultiPlayerManager.RequestControl);
            viewer.UserCommandController.AddEvent(UserCommand.ControlPantograph1, KeyEventType.KeyPressed, () => MultiPlayerManager.Notify(new MSGEvent(MultiPlayerManager.GetUserName(), "PANTO1", (++panto1) % 2).ToString()));
            viewer.UserCommandController.AddEvent(UserCommand.ControlPantograph2, KeyEventType.KeyPressed, () => MultiPlayerManager.Notify(new MSGEvent(MultiPlayerManager.GetUserName(), "PANTO2", (++panto2) % 2).ToString()));
            viewer.UserCommandController.AddEvent(UserCommand.ControlPantograph3, KeyEventType.KeyPressed, () => MultiPlayerManager.Notify(new MSGEvent(MultiPlayerManager.GetUserName(), "PANTO3", (++panto3) % 2).ToString()));
            viewer.UserCommandController.AddEvent(UserCommand.ControlPantograph4, KeyEventType.KeyPressed, () => MultiPlayerManager.Notify(new MSGEvent(MultiPlayerManager.GetUserName(), "PANTO4", (++panto4) % 2).ToString()));
            viewer.UserCommandController.AddEvent(UserCommand.ControlWiper, KeyEventType.KeyPressed, () => MultiPlayerManager.Notify(new MSGEvent(MultiPlayerManager.GetUserName(), "WIPER", (++wiper) % 2).ToString()));
            viewer.UserCommandController.AddEvent(UserCommand.ControlDoorLeft, KeyEventType.KeyPressed, () => MultiPlayerManager.Notify(new MSGEvent(MultiPlayerManager.GetUserName(), "DOORL", (++doorLeft) % 2).ToString()));
            viewer.UserCommandController.AddEvent(UserCommand.ControlDoorRight, KeyEventType.KeyPressed, () => MultiPlayerManager.Notify(new MSGEvent(MultiPlayerManager.GetUserName(), "DOORR", (++doorRight) % 2).ToString()));
            viewer.UserCommandController.AddEvent(UserCommand.ControlMirror, KeyEventType.KeyPressed, () => MultiPlayerManager.Notify(new MSGEvent(MultiPlayerManager.GetUserName(), "MIRRORS", (++mirrors) % 2).ToString()));

            viewer.UserCommandController.AddEvent(UserCommand.ControlHeadlightIncrease, KeyEventType.KeyPressed, () =>
            {
                headlight++;
                if (headlight >= 3)
                {
                    headlight = 2;
                }
                MultiPlayerManager.Notify(new MSGEvent(MultiPlayerManager.GetUserName(), "HEADLIGHT", headlight).ToString());
            });

            viewer.UserCommandController.AddEvent(UserCommand.ControlHeadlightDecrease, KeyEventType.KeyPressed, () =>
            {
                headlight--;
                if (headlight < 0)
                {
                    headlight = 0;
                }
                MultiPlayerManager.Notify(new MSGEvent(MultiPlayerManager.GetUserName(), "HEADLIGHT", headlight).ToString());
            });
        }
コード例 #10
0
        private void ShowDispatchControls(bool dispatchView)
        {
            var multiPlayer = MultiPlayerManager.IsMultiPlayer() && dispatchView;

            F.msgAll.Visible             = multiPlayer;
            F.msgSelected.Visible        = multiPlayer;
            F.composeMSG.Visible         = multiPlayer;
            F.MSG.Visible                = multiPlayer;
            F.messages.Visible           = multiPlayer;
            F.AvatarView.Visible         = multiPlayer;
            F.composeMSG.Visible         = multiPlayer;
            F.reply2Selected.Visible     = multiPlayer;
            F.chkShowAvatars.Visible     = multiPlayer;
            F.chkAllowUserSwitch.Visible = multiPlayer;
            F.chkAllowNew.Visible        = multiPlayer;
            F.chkBoxPenalty.Visible      = multiPlayer;
            F.chkPreferGreen.Visible     = multiPlayer;
            F.btnAssist.Visible          = multiPlayer;
            F.btnNormal.Visible          = multiPlayer;
            F.rmvButton.Visible          = multiPlayer;

            if (multiPlayer)
            {
                F.chkShowAvatars.Checked = Simulator.Instance.Settings.ShowAvatar;
                F.pbCanvas.Location      = new System.Drawing.Point(F.pbCanvas.Location.X, F.label1.Location.Y + 18);
                F.refreshButton.Text     = "View Self";
            }

            F.chkDrawPath.Visible      = dispatchView;
            F.chkPickSignals.Visible   = dispatchView;
            F.chkPickSwitches.Visible  = dispatchView;
            F.btnSeeInGame.Visible     = dispatchView;
            F.btnFollow.Visible        = dispatchView;
            F.windowSizeUpDown.Visible = dispatchView;
            F.label1.Visible           = dispatchView;
            F.resLabel.Visible         = dispatchView;
            F.refreshButton.Visible    = dispatchView;
        }
コード例 #11
0
        /// <summary>
        /// Retrieve a formatted list <see cref="ListLabel"/>s to be displayed as an in-browser Track Monitor.
        /// </summary>
        /// <param name="viewer">The Viewer to read train data from.</param>
        /// <returns>A list of <see cref="ListLabel"/>s, one per row of the popup.</returns>
        public IEnumerable <ListLabel> MultiPlayerWindowList(Viewer viewer)
        {
            //Update data
            keyPressed = "";
            labels     = new List <ListLabel>();
            void AddLabel(ListLabel label)
            {
                CheckLabel(ref label);
            }

            void AddSeparator() => AddLabel(new ListLabel
            {
                FirstCol = "Sprtr",
            });

            labels.Clear();
            UpdateDataEnded = false;
            // First Block
            // Client and server may have a time difference.
            var time = FormatStrings.FormatTime(viewer.Simulator.ClockTime + (MultiPlayerManager.IsClient() ? MultiPlayerManager.Instance().serverTimeDifference : 0));

            AddLabel(new ListLabel
            {
                FirstCol = $"{CatalogManager.Catalog.GetString("Time")}: {time}",
                LastCol  = ""
            });

            // Separator
            AddSeparator();

            // MultiPlayer
            if (MultiPlayerManager.IsMultiPlayer())
            {
                string text = MultiPlayerManager.Instance().GetOnlineUsersInfo();
                string multiPlayerStatus = MultiPlayerManager.IsServer()
                    ? $"{CatalogManager.Catalog.GetString("Dispatcher")} ({MultiPlayerManager.Client.UserName})" : MultiPlayerManager.Instance().AmAider
                    ? CatalogManager.Catalog.GetString("Helper") : MultiPlayerManager.IsClient()
                    ? $"{CatalogManager.Catalog.GetString("Client")} ({MultiPlayerManager.Client.UserName})" : "";

                var status = $"{CatalogManager.Catalog.GetString("Status")}: {multiPlayerStatus}";

                AddLabel(new ListLabel
                {
                    FirstCol = status,
                    LastCol  = ""
                });

                AddLabel(new ListLabel());

                // Number of player and trains
                foreach (var t in text.Split('\t'))
                {
                    AddLabel(new ListLabel
                    {
                        FirstCol = $"{t}",
                        LastCol  = ""
                    });
                }
                AddLabel(new ListLabel());
            }
            else if (Simulator.Instance.Confirmer != null)
            {
                var status = $"{CatalogManager.Catalog.GetString("Status")}: {CatalogManager.Catalog.GetString("Connection to the server is lost, will play as single mode")}";
                AddLabel(new ListLabel
                {
                    FirstCol = status,
                    LastCol  = ""
                });

                AddLabel(new ListLabel());
            }

            AddLabel(new ListLabel());
            UpdateDataEnded = true;
            return(labels);
        }
コード例 #12
0
 private void SendMultiPlayerSkyChangeNotification()
 {
     MultiPlayerManager.Instance().SetEnvInfo(mstsskyovercastFactor, mstsskyfogDistance);
     MultiPlayerManager.Notify(new MSGWeather(-1, mstsskyovercastFactor, -1, mstsskyfogDistance).ToString());
 }
コード例 #13
0
        /// <summary>
        /// SkyDrawer constructor
        /// </summary>
        public MSTSSkyDrawer(Viewer viewer)
        {
            MSTSSkyViewer   = viewer;
            MSTSSkyMaterial = viewer.MaterialManager.Load("MSTSSky");
            // Instantiate classes
            MSTSSkyMesh    = new MSTSSkyMesh(MSTSSkyViewer.RenderProcess);
            MSTSSkyVectors = new SunMoonPos();

            //viewer.World.MSTSSky.MSTSSkyMaterial.Viewer.MaterialManager.sunDirection.Y < 0
            // Set default values
            mstsskyseasonType = (int)MSTSSkyViewer.Simulator.Season;
            date.ordinalDate  = 82 + mstsskyseasonType * 91;
            // TODO: Set the following three externally from ORTS route files (future)
            date.month = 1 + date.ordinalDate / 30;
            date.day   = 21;
            date.year  = 2010;
            // Default wind speed and direction
            mstsskywindSpeed     = 5.0f; // m/s (approx 11 mph)
            mstsskywindDirection = 4.7f; // radians (approx 270 deg, i.e. westerly)

            // The following keyboard commands are used for viewing sky and weather effects in "demo" mode.
            // Control- and Control+ for overcast, Shift- and Shift+ for fog and - and + for time.

            // Don't let multiplayer clients adjust the weather.
            if (!MultiPlayerManager.IsClient())
            {
                // Overcast ranges from 0 (completely clear) to 1 (completely overcast).
                viewer.UserCommandController.AddEvent(UserCommand.DebugOvercastIncrease, KeyEventType.KeyDown, (GameTime gameTIme) =>
                {
                    mstsskyovercastFactor = (float)MathHelperD.Clamp(mstsskyovercastFactor + gameTIme.ElapsedGameTime.TotalSeconds / 10, 0, 1);
                });
                viewer.UserCommandController.AddEvent(UserCommand.DebugOvercastDecrease, KeyEventType.KeyDown, (GameTime gameTIme) =>
                {
                    mstsskyovercastFactor = (float)MathHelperD.Clamp(mstsskyovercastFactor - gameTIme.ElapsedGameTime.TotalSeconds / 10, 0, 1);
                });
                // Fog ranges from 10m (can't see anything) to 100km (clear arctic conditions).
                viewer.UserCommandController.AddEvent(UserCommand.DebugFogIncrease, KeyEventType.KeyDown, (GameTime gameTIme) =>
                {
                    mstsskyfogDistance = (float)MathHelperD.Clamp(mstsskyfogDistance - gameTIme.ElapsedGameTime.TotalSeconds * mstsskyfogDistance, 10, 100000);
                });
                viewer.UserCommandController.AddEvent(UserCommand.DebugFogDecrease, KeyEventType.KeyDown, (GameTime gameTIme) =>
                {
                    mstsskyfogDistance = (float)MathHelperD.Clamp(mstsskyfogDistance + gameTIme.ElapsedGameTime.TotalSeconds * mstsskyfogDistance, 10, 100000);
                });
            }
            // Don't let clock shift if multiplayer.
            if (!MultiPlayerManager.IsMultiPlayer())
            {
                // Shift the clock forwards or backwards at 1h-per-second.
                viewer.UserCommandController.AddEvent(UserCommand.DebugClockForwards, KeyEventType.KeyDown, (GameTime gameTIme) =>
                {
                    MSTSSkyViewer.Simulator.ClockTime += gameTIme.ElapsedGameTime.TotalSeconds * 3600;
                });
                viewer.UserCommandController.AddEvent(UserCommand.DebugClockBackwards, KeyEventType.KeyDown, (GameTime gameTIme) =>
                {
                    MSTSSkyViewer.Simulator.ClockTime -= gameTIme.ElapsedGameTime.TotalSeconds * 3600;
                });
            }
            // Server needs to notify clients of weather changes.
            if (MultiPlayerManager.IsServer())
            {
                viewer.UserCommandController.AddEvent(UserCommand.DebugOvercastIncrease, KeyEventType.KeyReleased, SendMultiPlayerSkyChangeNotification);
                viewer.UserCommandController.AddEvent(UserCommand.DebugOvercastDecrease, KeyEventType.KeyReleased, SendMultiPlayerSkyChangeNotification);
                viewer.UserCommandController.AddEvent(UserCommand.DebugFogIncrease, KeyEventType.KeyReleased, SendMultiPlayerSkyChangeNotification);
                viewer.UserCommandController.AddEvent(UserCommand.DebugFogDecrease, KeyEventType.KeyReleased, SendMultiPlayerSkyChangeNotification);
            }
        }