Esempio n. 1
0
        internal void Start()
        {
            PlatformRacing3Server.MatchListingManager.Die(this); //Kill us :(

            MultiplayerMatch match = PlatformRacing3Server.MatchManager.CreateMultiplayerMatch(this);

            StartGameOutgoingMessage startGame = new StartGameOutgoingMessage(this.Name, match.Name);
            foreach (ClientSession session in this._Clients.Values)
            {
                if (this._Clients.Remove(session))
                {
                    session.LobbySession.MatchListing = null;

                    if (match.Reserve(session))
                    {
                        session.SendPacket(startGame);
                    }
                }
            }

            match.Lock();

            foreach(ClientSession session in this.LobbyClients.Values)
            {
                if (this.LobbyClients.Remove(session))
                {
                    session.SendPacket(startGame);
                    session.UntrackUsersInRoom(this.Name);
                }
            }
        }
    internal void Start()
    {
        this.matchListingManager.Die(this);         //Kill us :(

        MultiplayerMatch match = this.matchManager.CreateMultiplayerMatch(this);

        Random random = new();

        StartGameOutgoingMessage startGame = new(this.Name, match.Name);

        foreach (ClientSession session in this._Clients.Sessions.OrderBy((s) => random.Next(int.MinValue, int.MaxValue)))
        {
            session.LobbySession.MatchListing = null;

            if (match.Reserve(session))
            {
                session.SendPacket(startGame);
            }
        }

        match.Lock();

        foreach (ClientSession session in this.LobbyClients.Sessions)
        {
            session.SendPacket(startGame);
            session.UntrackUsersInRoom(this.Name);
        }
    }
Esempio n. 3
0
 private void Awake()
 {
     if (!networkManager)
     {
         networkManager = this;
     }
     DontDestroyOnLoad(this);
 }
Esempio n. 4
0
        public void Handle(ClientSession session, IncomingMessage message)
        {
            MultiplayerMatch match = session.MultiplayerMatchSession?.Match;

            if (match != null)
            {
                int    x    = message.ReadInt();
                int    y    = message.ReadInt();
                string side = message.ReadString();
                string item = message.ReadString();

                match.TryGetItem(session, x, y, side, item);
            }
        }
Esempio n. 5
0
    internal MatchPlayer(MultiplayerMatch match, UserData userData, uint socketId, IPAddress ipAddress)
    {
        this.Match    = match;
        this.UserData = userData;

        this.SocketId  = socketId;
        this.IPAddress = ipAddress;

        this._Speed = (int)userData.Speed;
        this._Accel = (int)userData.Accel;
        this._Jump  = (int)userData.Jump;

        this._Hats = new Queue <MatchPlayerHat>();

        this.ToUpdate = UpdateStatus.None;
    }
Esempio n. 6
0
        internal override void Handle(ClientSession session, JsonSendToRoomIncomingMessage message)
        {
            if (!session.IsLoggedIn)
            {
                return;
            }

            switch (message.RoomType)
            {
            case "chat":
            {
                if (session.MultiplayerMatchSession?.Match.Name != message.RoomName)
                {
                    if (PlatformRacing3Server.ChatRoomManager.TryGet(message.RoomName, out ChatRoom chatRoom))
                    {
                        chatRoom.HandleData(session, message.Data, message.SendToSelf);
                    }
                }
                else
                {
                    session.MultiplayerMatchSession?.Match.HandleData(session, message.Data, message.SendToSelf);
                }
            }
            break;

            case "game":
            {
                MultiplayerMatch match = session.MultiplayerMatchSession?.Match;
                if (match.Name == message.RoomName)
                {
                    match.HandleData(session, message.Data, message.SendToSelf);
                }
            }
            break;
            }
        }
 internal void Die(MultiplayerMatch match)
 {
     this.MultiplayerMatches.TryRemove(match.Name, out _);
 }
 internal MultiplayerMatchSession(MultiplayerMatch match, MatchPlayer player)
 {
     this.Match       = match;
     this.MatchPlayer = player;
 }
Esempio n. 9
0
        public void Handle(ClientSession session, IncomingMessage message)
        {
            MultiplayerMatch match = session.MultiplayerMatchSession?.Match;

            if (match != null)
            {
                MatchPlayer matchPlayer = session.MultiplayerMatchSession.MatchPlayer;

                UpdateStatus status = (UpdateStatus)message.ReadUInt();
                if (status.HasFlag(UpdateStatus.X))
                {
                    matchPlayer.X = message.ReadDouble();
                }

                if (status.HasFlag(UpdateStatus.Y))
                {
                    matchPlayer.Y = message.ReadDouble();
                }

                if (status.HasFlag(UpdateStatus.VelX))
                {
                    matchPlayer.VelX = message.ReadFloat();
                }

                if (status.HasFlag(UpdateStatus.VelY))
                {
                    matchPlayer.VelY = message.ReadFloat();
                }

                if (status.HasFlag(UpdateStatus.ScaleX))
                {
                    matchPlayer.ScaleX = message.ReadByte();
                }

                if (status.HasFlag(UpdateStatus.Space))
                {
                    matchPlayer.Space = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Left))
                {
                    matchPlayer.Left = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Right))
                {
                    matchPlayer.Right = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Down))
                {
                    matchPlayer.Down = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Up))
                {
                    matchPlayer.Up = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Speed))
                {
                    matchPlayer.Speed = message.ReadInt();
                }

                if (status.HasFlag(UpdateStatus.Accel))
                {
                    matchPlayer.Accel = message.ReadInt();
                }

                if (status.HasFlag(UpdateStatus.Jump))
                {
                    matchPlayer.Jump = message.ReadInt();
                }

                if (status.HasFlag(UpdateStatus.Rot))
                {
                    matchPlayer.Rot = message.ReadInt();
                }

                if (status.HasFlag(UpdateStatus.Item))
                {
                    matchPlayer.Item = message.ReadString();
                }

                if (status.HasFlag(UpdateStatus.Life))
                {
                    matchPlayer.Life = message.ReadUInt();
                }

                if (status.HasFlag(UpdateStatus.Hurt))
                {
                    matchPlayer.Hurt = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Coins))
                {
                    matchPlayer.Coins = message.ReadUInt();
                }

                match.SendUpdateIfRequired(session, matchPlayer);
            }
        }