private async void Internal_OnPlayerJoinedRoom(NeutronPlayer player, NeutronRoom room) { await NeutronSchedule.ScheduleTaskAsync(() => { MakeRoomContainer(room); }); OnPlayerJoinedRoom(player, room); }
private void MakeRoomContainer(NeutronRoom room) { if (Neutron.Server.MatchmakingMode == MatchmakingMode.Room || Neutron.Server.MatchmakingMode == MatchmakingMode.All) { if (room.Scene == null) { string containerName = $"Room({room.Id}) - [Container] - {SceneHelper.GetSideTag(IsServer)}"; //* Cria um container(scene) para a nova sala, somente se não existir um. room.Scene = SceneHelper.CreateContainer(containerName, Neutron.Server.LocalPhysicsMode); GameObject matchManager = SceneHelper.MakeMatchmakingManager(room.Owner, IsServer, Server); SceneHelper.MoveToContainer(matchManager, containerName); //* Registra os objetos de cena. NeutronSceneObject.OnSceneObjectRegister(room.Owner, IsServer, room.Scene, MatchmakingMode.Room, room, Server); } } }
protected virtual void OnPlayerCreatedRoom(NeutronRoom room, NeutronPlayer player, bool isMine, Neutron neutron) { }
private void MakeVirtualOwner(INeutronMatchmaking matchmaking, NeutronChannel channel, NeutronRoom room) { if (matchmaking.Owner != null) { LogHelper.Error("Matchmaking already has an owner!"); } else { //* Não pode aproveitar o Neutron.Server.Player? não, não podemos compartilhar a mesma instância pra vários matchmaking, um jogador só pode está em um Matchmaking ao mesmo tempo. NeutronPlayer player = PlayerHelper.MakeTheServerPlayer(); player.Channel = channel; player.Room = room; player.Matchmaking = MatchmakingHelper.Matchmaking(player); matchmaking.Owner = player; //! reforço: um jogador só pode está em um Matchmaking ao mesmo tempo. } }
protected virtual void OnPlayerJoinedRoom(NeutronPlayer player, NeutronRoom room) { }
protected virtual bool OnPlayerCreatedRoom(NeutronPlayer player, NeutronRoom room) { return(true); }