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); } }
private void Awake() { if (!networkManager) { networkManager = this; } DontDestroyOnLoad(this); }
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); } }
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; }
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; }
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); } }