Exemplo n.º 1
0
        private void InsertObstacleIntoBlueprint(LevelBlueprint bp)
        {
            var abspower = Obstacle_Width * BlackHoleBlueprint.DEFAULT_POWER_FACTOR * Obstacle_PowerFactor;

            switch (Obstacle_ObstacleType)
            {
            case ObstacleStub.ObstacleStubType.BlackHole:
                bp.BlueprintBlackHoles.Add(new BlackHoleBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width, -abspower));
                break;

            case ObstacleStub.ObstacleStubType.WhiteHole:
                bp.BlueprintBlackHoles.Add(new BlackHoleBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width, +abspower));
                break;

            case ObstacleStub.ObstacleStubType.GlassBlock:
                bp.BlueprintGlassBlocks.Add(new GlassBlockBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width, Obstacle_Height, Obstacle_Rotation * FloatMath.RadToDeg));
                break;

            case ObstacleStub.ObstacleStubType.MirrorBlock:
                bp.BlueprintMirrorBlocks.Add(new MirrorBlockBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width, Obstacle_Height, Obstacle_Rotation * FloatMath.RadToDeg));
                break;

            case ObstacleStub.ObstacleStubType.MirrorCircle:
                bp.BlueprintMirrorCircles.Add(new MirrorCircleBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width));
                break;

            case ObstacleStub.ObstacleStubType.VoidVircle:
                bp.BlueprintVoidCircles.Add(new VoidCircleBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width));
                break;

            default:
                SAMLog.Error("ABTA::IOIB", "Obstacle_ObstacleType: " + Obstacle_ObstacleType);
                return;
            }
        }
Exemplo n.º 2
0
        public void InsertIntoBlueprint(LevelBlueprint bp, ref byte cid)
        {
            switch (StubType)
            {
            case SCCMStubType.Cannon:
                InsertCannonIntoBlueprint(bp, ref cid);
                return;

            case SCCMStubType.Obstacle:
                InsertObstacleIntoBlueprint(bp);
                return;

            case SCCMStubType.Portal:
                InsertPortalIntoBlueprint(bp);
                return;

            case SCCMStubType.Wall:
                InsertWallIntoBlueprint(bp);
                return;

            default:
                SAMLog.Error("ABTA::IIBP", "StubType: " + StubType);
                return;
            }
        }
Exemplo n.º 3
0
        private void InsertWallIntoBlueprint(LevelBlueprint bp)
        {
            var center = FPoint.MiddlePoint(Wall_Point1, Wall_Point2);
            var length = (Wall_Point2 - Wall_Point1).Length();
            var degrot = (Wall_Point2 - Wall_Point1).ToDegAngle();

            switch (Wall_WallType)
            {
            case WallStub.WallStubType.Void:
                bp.BlueprintVoidWalls.Add(new VoidWallBlueprint(center.X, center.Y, length, degrot));
                break;

            case WallStub.WallStubType.Glass:
                bp.BlueprintGlassBlocks.Add(new GlassBlockBlueprint(center.X, center.Y, length, GlassBlockBlueprint.DEFAULT_WIDTH, degrot));
                break;

            case WallStub.WallStubType.Mirror:
                bp.BlueprintMirrorBlocks.Add(new MirrorBlockBlueprint(center.X, center.Y, length, GlassBlockBlueprint.DEFAULT_WIDTH, degrot));
                break;

            default:
                SAMLog.Error("ABTA::IWIBP", "Wall_WallType: " + Wall_WallType);
                return;
            }
        }
        public string GenerateASCIIMap(LevelBlueprint l)
        {
            var d = new LevelAsciiDrawer(l);

            d.Calc();
            return(d.Get());
        }
Exemplo n.º 5
0
        public static List <Tuple <string, LevelBlueprint, string> > ListUserLevelsFinished()
        {
            var allfiles = FileHelper.Inst.ListData();

            var result = new List <Tuple <string, LevelBlueprint, string> >();

            foreach (var file in allfiles)
            {
                if (!file.StartsWith("UPLOADEDLEVELDATA_"))
                {
                    continue;
                }

                byte[] content = null;
                try
                {
                    var dat = new LevelBlueprint();
                    content = FileHelper.Inst.ReadBinDataOrNull(file);
                    dat.BinaryDeserialize(new BinaryReader(new MemoryStream(content)));

                    var hash = ByteUtils.ByteToHexBitFiddle(MainGame.Inst.Bridge.DoSHA256(content));

                    result.Add(Tuple.Create(file, dat, hash));
                }
                catch (Exception e)
                {
                    SAMLog.Error("SCCMU::READFAIL_LULF", "Could not read CustomLevelData", $"Exception: {e}\n\n\nFile: {file}\n\n\nContent:{ByteUtils.ByteToHexBitFiddle(content)}");
                }
            }

            return(result);
        }
Exemplo n.º 6
0
        private static void DrawMinigunCannons(LevelBlueprint level, Graphics g)
        {
            foreach (var c in level.BlueprintMinigun)
            {
                var rectBaseCircle  = new RectangleF(-0.500f, -0.500f, 1.000f, 1.000f);
                var rectOuterCircle = new RectangleF(-0.833f, -0.833f, 1.666f, 1.666f);
                var rectMidArea     = new RectangleF(-0.666f, -0.666f, 1.333f, 1.333f);
                var rectBarrel      = new RectangleF(+0.166f, -0.166f, 0.666f, 0.333f);

                var save = g.Save();
                {
                    g.TranslateTransform(c.X, c.Y);
                    g.ScaleTransform(c.Diameter, c.Diameter);

                    // Mid Area Alpha
                    g.FillRectangle(new SolidBrush(Color.FromArgb(64, CANNON_COLORS[c.Player])), rectMidArea);

                    // Barrel
                    g.RotateTransform(c.Rotation);
                    g.FillRectangle(new SolidBrush(CANNON_COLORS[c.Player]), rectBarrel);
                    g.DrawLine(new Pen(Color.Black, 0.008f), rectBarrel.Right - 1 * 0.05f, rectBarrel.Top, rectBarrel.Right - 1 * 0.05f, rectBarrel.Bottom);
                    g.DrawLine(new Pen(Color.Black, 0.008f), rectBarrel.Right - 2 * 0.05f, rectBarrel.Top, rectBarrel.Right - 2 * 0.05f, rectBarrel.Bottom);
                    g.DrawLine(new Pen(Color.Black, 0.008f), rectBarrel.Right - 3 * 0.05f, rectBarrel.Top, rectBarrel.Right - 3 * 0.05f, rectBarrel.Bottom);
                    g.DrawLine(new Pen(Color.Black, 0.008f), rectBarrel.Right - 4 * 0.05f, rectBarrel.Top, rectBarrel.Right - 4 * 0.05f, rectBarrel.Bottom);

                    // Base
                    g.FillEllipse(new SolidBrush(CANNON_COLORS[c.Player]), rectBaseCircle);
                    g.DrawEllipse(new Pen(Color.Black, 0.008f), rectBaseCircle);

                    // Radius
                    g.DrawEllipse(new Pen(CANNON_COLORS[c.Player], 0.032f), rectOuterCircle);
                }
                g.Restore(save);
            }
        }
Exemplo n.º 7
0
        private void ChangeID2(int delta)
        {
            if (_server.Mode != SAMNetworkConnection.ServerMode.CreatingNewGame)
            {
                return;
            }

            var data = _currentWorld.LevelNodes.Select(n => Levels.LEVELS[n.LevelID]).OrderBy(n => n.Name.Split('-').Last().PadLeft(3, '0')).ToList();
            var idx  = data.IndexOf(_currentLevel);

            idx = (idx + data.Count + delta) % data.Count;

            if (_server.ConnType == MultiplayerConnectionType.P2P)
            {
                for (int i = 0; i < 128; i++)
                {
                    if (BlueprintAnalyzer.PlayerCount(data[idx]) != 2)
                    {
                        idx++; continue;
                    }
                    break;
                }
            }

            _currentLevel = data[idx];
            UpdateLabels();
        }
Exemplo n.º 8
0
        private static void DrawBlackHoles(LevelBlueprint level, Graphics g)
        {
            var penBH1   = new Pen(Color.White, 2);
            var brushBH1 = Brushes.Black;
            var penBH2   = new Pen(Color.Black, 2);
            var brushBH2 = Brushes.White;

            foreach (var vhole in level.BlueprintBlackHoles)
            {
                var save = g.Save();
                {
                    g.TranslateTransform(vhole.X, vhole.Y);
                    if (vhole.Power < 0)
                    {
                        g.FillEllipse(brushBH1, new RectangleF(-vhole.Diameter / 2f, -vhole.Diameter / 2f, vhole.Diameter, vhole.Diameter));
                        for (int i = 1; i <= 6; i++)
                        {
                            var sz = i / 6f;
                            g.DrawEllipse(penBH1, new RectangleF(sz * -vhole.Diameter / 2f, sz * -vhole.Diameter / 2f, sz * vhole.Diameter, sz * vhole.Diameter));
                        }
                    }
                    else
                    {
                        g.FillEllipse(brushBH2, new RectangleF(-vhole.Diameter / 2f, -vhole.Diameter / 2f, vhole.Diameter, vhole.Diameter));
                        for (int i = 1; i <= 6; i++)
                        {
                            var sz = i / 6f;
                            g.DrawEllipse(penBH2, new RectangleF(sz * -vhole.Diameter / 2f, sz * -vhole.Diameter / 2f, sz * vhole.Diameter, sz * vhole.Diameter));
                        }
                    }
                }
                g.Restore(save);
            }
        }
Exemplo n.º 9
0
        private BulletPathBlueprint[] Precalc(LevelBlueprint lvl, ICannonBlueprint cannon)
        {
            var worldNormal = CreateRayWorld(lvl);

            var rayClock = new List <Tuple <BulletPathBlueprint, float> > [RESOLUTION];

            for (int ideg = 0; ideg < RESOLUTION; ideg++)
            {
                float deg  = ideg * (360f / RESOLUTION);
                var   rays = FindBulletPaths(lvl, worldNormal, cannon, deg);

                rayClock[ideg] = rays;
            }

            RemoveUntrusted(rayClock);

            List <BulletPathBlueprint> resultRays = new List <BulletPathBlueprint>();

            for (;;)
            {
                for (int ideg = 0; ideg < RESOLUTION; ideg++)
                {
                    if (rayClock[ideg].Any())
                    {
                        resultRays.Add(ExtractBestRay(rayClock, ideg, rayClock[ideg].First().Item1.TargetCannonID));
                    }
                }
                break;
            }

            return(resultRays.ToArray());
        }
Exemplo n.º 10
0
        private void RecreateMapForLevelFile(LevelBlueprint lp)
        {
            var rex = new Regex(@"^#<map>.*^#</map>", RegexOptions.Multiline | RegexOptions.Singleline);

            var newCode = rex.Replace(Code, GenerateASCIIMap(lp));
            int selS    = SelectionStart;
            int selL    = SelectionLength;
            int coff    = CaretOffset?.Get() ?? -1;

            if (newCode != Code)
            {
                int tc = TimerCountDown;

                Code = newCode;

                TimerCountDown  = tc;
                SelectionStart  = selS;
                SelectionLength = selL;
                if (coff >= 0)
                {
                    CaretOffset?.Set(coff);
                }

                Console.WriteLine("Regenerate map");
            }
        }
Exemplo n.º 11
0
        public BulletPathBlueprint[] PrecalcLaser(LevelBlueprint lvl, ICannonBlueprint cannon)
        {
            var worldNormal = CreateRayWorld(lvl, 0, 1);
            var worldExtend = CreateRayWorld(lvl, HITBOX_ENLARGE, 1.5f);

            var rayClock = new List <Tuple <BulletPathBlueprint, float> > [RESOLUTION];

            for (int ideg = 0; ideg < RESOLUTION; ideg++)
            {
                float deg  = ideg * (360f / RESOLUTION);
                var   rays = FindLaserPaths(lvl, worldNormal, worldExtend, cannon, deg);

                rayClock[ideg] = rays;
            }

            List <BulletPathBlueprint> resultRays = new List <BulletPathBlueprint>();

            for (;;)
            {
                for (int ideg = 0; ideg < RESOLUTION; ideg++)
                {
                    if (rayClock[ideg].Any())
                    {
                        resultRays.Add(ExtractBestRay(rayClock, ideg, rayClock[ideg].First().Item1.TargetCannonID));
                    }
                }
                break;
            }

            return(resultRays.ToArray());
        }
Exemplo n.º 12
0
    protected override void ApplicationStarted()
    {
        defaultPool = PoolManager.GetPool();

        var levelBlueprint  = new LevelBlueprint();
        var levelEntity     = defaultPool.CreateEntity(levelBlueprint);
        var player          = defaultPool.CreateEntity(new PlayerBlueprint(_gameConfiguration.StartingFoodPoints));
        var playerView      = player.GetComponent <ViewComponent>();
        var playerComponent = player.GetComponent <PlayerComponent>();
        var levelComponent  = levelEntity.GetComponent <LevelComponent>();

        levelComponent.Level.DistinctUntilChanged()
        .Subscribe(x => {
            playerView.View.transform.position = Vector3.zero;
            SetupLevel(levelComponent);
        });

        _eventSystem.Receive <PlayerKilledEvent>()
        .Delay(TimeSpan.FromSeconds(_gameConfiguration.IntroLength))
        .Subscribe(x =>
        {
            levelBlueprint.UpdateLevel(levelComponent, 1);
            playerComponent.Food.Value = _gameConfiguration.StartingFoodPoints;
            SetupLevel(levelComponent);
        });
    }
    public LevelBlueprint ReturnRandomBlueprint()
    {
        int rand = Random.Range(0, levelBlueprints.Count);

        currentLevelBlueprint = levelBlueprints[rand];
        return(levelBlueprints[rand]);
    }
Exemplo n.º 14
0
        private void OpenBinLevel()
        {
            try
            {
                var ofd = new OpenFileDialog();
                ofd.Filter = "Userlevel (*.bin)|*";
                ofd.Title  = "Open Userlevel";
                if (ofd.ShowDialog() != true)
                {
                    return;
                }
                var filename = ofd.FileName;

                var bp = new LevelBlueprint();
                using (var ms = new MemoryStream(File.ReadAllBytes(filename)))
                {
                    using (var br = new BinaryReader(ms))
                    {
                        bp.BinaryDeserialize(br);
                    }
                }

                var bmp = CreateOverviewUnsafe(bp);
                PreviewImage         = ImageHelper.CreateImageSource(bmp).Item1;
                _currentDisplayLevel = null;
                return;
            }
            catch (Exception e)
            {
                MessageBox.Show("OpenXNB:\r\n" + e);
            }
        }
Exemplo n.º 15
0
        public LaserRenderer(GDGameScreen scrn, LaserNetwork nw, LevelBlueprint bp) : base(scrn, GDConstants.ORDER_GAME_LASER)
        {
            _network = nw;

            Position           = new FPoint(bp.LevelWidth / 2f, bp.LevelHeight / 2f);
            DrawingBoundingBox = new FSize(bp.LevelWidth, bp.LevelHeight);
        }
Exemplo n.º 16
0
    public void AcceptNewBlueprint()
    {
        int rand = Random.Range(0, levelBlueprints.Count);

        currentLevelBlueprint = levelBlueprints[rand];
        currentLevelBlueprint.gameObject.SetActive(true);
    }
    public void ActivateBlueprint()
    {
        int rand = Random.Range(0, levelBlueprints.Count);

        currentLevelBlueprint = levelBlueprints[rand];
        Instantiate(currentLevelBlueprint.ground);
    }
Exemplo n.º 18
0
        public Bitmap DrawOverview(LevelBlueprint level)
        {
            Bitmap img;

            try
            {
                img = Draw(level, -1);
            }
            catch (Exception)
            {
                img = Draw(null, -1);
            }

            Bitmap r = new Bitmap(img.Width + 16, img.Height + 48 + 48 + 16);

            using (Graphics g = Graphics.FromImage(r))
            {
                g.Clear(Color.White);
                g.DrawImageUnscaled(img, 0, 16 + 48);
                g.DrawString(level.Name + ": " + level.FullName, new Font("Calibri", 28, FontStyle.Bold), Brushes.DarkRed, 24, 16 + 8);
                g.DrawString("{" + $"{ByteMath.SplitGuid(level.UniqueID).Item5:X12}" + "}", new Font("Courier New", 28, FontStyle.Bold), Brushes.DarkRed, 24, 16 + 8 + img.Height + 48);


                var kitRect = new RectangleF(img.Width - 16, 48, 32, 32);
                g.FillEllipse(COLORS_KITYPE[level.KIType - 10], kitRect);
                g.DrawString((level.KIType - 10).ToString(), new Font("Courier New", 24, FontStyle.Bold), Brushes.Black, kitRect, new StringFormat {
                    Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center
                });
            }
            return(r);
        }
Exemplo n.º 19
0
 public static LevelBlueprint WithBorderWalls(this LevelBlueprint levelBlueprint, bool withBorderWalls = true)
 {
     if (withBorderWalls)
     {
         levelBlueprint.GenerateBorderWalls();
     }
     return(levelBlueprint);
 }
Exemplo n.º 20
0
        public void SetWorldMapScreenZoomedOut(GraphBlueprint g, LevelBlueprint initFocus = null)
        {
            var screen = new GDWorldMapScreen(this, Graphics, g, initFocus?.UniqueID);

            SetCurrentScreen(screen);
//			screen.ZoomInstantOut();
            screen.ZoomOut();
        }
Exemplo n.º 21
0
        public GDGameScreen_SCCMTest(MainGame game, GraphicsDeviceManager gdm, LevelBlueprint bp, FractionDifficulty diff, SCCMLevelData dat, GameSpeedModes speed)
            : base(game, gdm, bp, diff, false, false, false)
        {
            SCCMData = dat;

            GameSpeedMode = _lastSpeed = speed;
            UpdateGameSpeed();
        }
Exemplo n.º 22
0
        public GDGameScreen_SP(MainGame game, GraphicsDeviceManager gdm, LevelBlueprint bp, FractionDifficulty diff, GraphBlueprint ws)
            : base(game, gdm, bp, diff, false, false, diff == FractionDifficulty.DIFF_0 && bp.UniqueID == Levels.LEVELID_1_1)
        {
            WorldBlueprint = ws;

            GameSpeedMode = MainGame.Inst.Profile.SingleplayerGameSpeed;
            UpdateGameSpeed();
        }
Exemplo n.º 23
0
        private static bool CheckBoardGeneration(IList <Item> items, LevelBlueprint config)
        {
            return
                // Search if match3 line exist
                (!SearchItemInChaine(items, 3, Axis.X, Axis.X, Axis.Y).SelectMany(ls => ls.Slinq())
                 .Concat(SearchItemInChaine(items, 2, Axis.Y, Axis.Y, Axis.X).SelectMany(ls => ls.Slinq()))
                 .Select(InitItem, config)
                 .Aggregate(false, (b, item) => true) &&

                 // Search if steps avaliable
                 !SearchItemInChaine(items, 2, Axis.X, Axis.X, Axis.Y)
                 .Where((ls, _items) => IsStepAllowed(_items, ls[0].sprite,
                                                      ls[0].position + Vector2.down,
                                                      Vector2.right,
                                                      Vector2.down,
                                                      Vector2.left) ||
                        IsStepAllowed(_items, ls[ls.Count - 1].sprite,
                                      ls[ls.Count - 1].position + Vector2.up,
                                      Vector2.left,
                                      Vector2.up,
                                      Vector2.right), items)
                 .SelectMany(ls => ls.Slinq())
                 .Concat(SearchItemInChaine(items, 2, Axis.Y, Axis.Y, Axis.X)
                         .Where((ls, _items) => IsStepAllowed(_items, ls[0].sprite,
                                                              ls[0].position + Vector2.left,
                                                              Vector2.left,
                                                              Vector2.up,
                                                              Vector2.down) ||
                                IsStepAllowed(_items, ls[ls.Count - 1].sprite,
                                              ls[ls.Count - 1].position + Vector2.right,
                                              Vector2.right,
                                              Vector2.up,
                                              Vector2.down), items)
                         .SelectMany(ls => ls.Slinq()))
                 .Concat(items
                         .Slinq()
                         .OrderBy((i1, i2) => OrderBy(i1, i2, Axis.Y, Axis.X))
                         .Where(
                             (i, t) => IsAllowSpetMiddlePattern(t.Item1, i, t.Item2, Axis.Y, Vector2.up,
                                                                Vector2.down),
                             Tuple.Create(items, new List <Item>())))
                 .Concat(items.Slinq().OrderBy((i1, i2) => OrderBy(i1, i2, Axis.X, Axis.Y))
                         .Where(
                             (i, t) => IsAllowSpetMiddlePattern(t.Item1, i, t.Item2, Axis.X, Vector2.left,
                                                                Vector2.right),
                             Tuple.Create(items, new List <Item>())))
                 .Any()
                 .ToSome()
                 .Where(v => !v)
                 .ForEach((v, _items) => _items
                          .SlinqWithIndex()
                          .Where(t => t.Item2 % 3 == 0)
                          .Select(t => t.Item1)
                          .ForEach((i, c) => InitItem(i, c), config)
                          , items)
                 .ValueOr(false));
        }
Exemplo n.º 24
0
        public GDGameScreen_SCCMUpload(MainGame game, GraphicsDeviceManager gdm, LevelBlueprint bp, SCCMLevelData dat, GameSpeedModes speed, bool toast)
            : base(game, gdm, bp, FractionDifficulty.DIFF_3, false, false, false)
        {
            SCCMData = dat;
            _toast   = toast;

            GameSpeedMode = _lastSpeed = speed;
            UpdateGameSpeed();
        }
Exemplo n.º 25
0
        public override void ShowScorePanel(LevelBlueprint lvl, PlayerProfile profile, HashSet <FractionDifficulty> newDifficulties, bool playerHasWon, int addPoints, int time)
        {
            ((GDGameHUD)HUD).BtnPause.IsEnabled = false;
            ((GDGameHUD)HUD).BtnSpeed.IsEnabled = false;

            GameSpeedMode = GameSpeedModes.NORMAL;

            HUD.AddModal(new HUDSCCMTestScorePanel(lvl, SCCMData, Difficulty, _lastSpeed, time), false);
        }
Exemplo n.º 26
0
        public override void ShowScorePanel(LevelBlueprint lvl, PlayerProfile profile, HashSet <FractionDifficulty> newDifficulties, bool playerHasWon, int addPoints)
        {
            ((GDGameHUD)HUD).BtnPause.IsEnabled = false;
            ((GDGameHUD)HUD).BtnSpeed.IsEnabled = false;

            GameSpeedMode = GameSpeedModes.NORMAL;

            HUD.AddModal(new HUDTutorialScorePanel(profile, addPoints), false);
        }
Exemplo n.º 27
0
        public HUDSCCMScorePanel_Lost(LevelBlueprint lvl, FractionDifficulty d)
        {
            _level             = lvl;
            SelectedDifficulty = d;

            RelativePosition = FPoint.Zero;
            Size             = new FSize(WIDTH, HEIGHT);
            Alignment        = HUDAlignment.CENTER;
            Background       = FlatColors.BackgroundHUD;
        }
Exemplo n.º 28
0
        public GDCellularBackground(GDGameScreen scrn, LevelBlueprint lvl) : base(scrn)
        {
            tileCountX = FloatMath.Ceiling(lvl.LevelWidth / 64f) + 2 * MAX_EXTENSION_X;
            tileCountY = FloatMath.Ceiling(lvl.LevelHeight / 64f) + 2 * MAX_EXTENSION_Y;
            wrapMode   = scrn.WrapMode;

            _grid = new GridCellMembership[tileCountX, tileCountY];

            Initialize();
        }
Exemplo n.º 29
0
        public LevelAsciiDrawer(LevelBlueprint f)
        {
            level = f;

            MAPWIDTH_I  = (int)(f.LevelWidth / 64);
            MAPHEIGHT_I = (int)(f.LevelHeight / 64);

            MAPWIDTH  = MAPWIDTH_I * 2 + 1;
            MAPHEIGHT = MAPHEIGHT_I * 2 + 1;
        }
Exemplo n.º 30
0
        private void ChangeID1(int delta)
        {
            int i1 = Levels.WORLDS_MULTIPLAYER.ToList().IndexOf(_currentWorld);

            i1            = (i1 + delta + Levels.WORLDS_MULTIPLAYER.Length) % Levels.WORLDS_MULTIPLAYER.Length;
            _currentWorld = Levels.WORLDS_MULTIPLAYER[i1];

            _currentLevel = Levels.LEVELS[_currentWorld.LevelNodes.First().LevelID];
            UpdateLabels();
        }