public static LevelComponent CreateEmpty(GameBranch branch, byte depth, uint seed, GameManager manager)
        {
            if (branch.Length < depth)
            {
                throw new InvalidOperationException("Level created beyond branch length");
            }

            using (var levelEntityReference = manager.CreateEntity())
            {
                var level = manager.CreateComponent <LevelComponent>(EntityComponent.Level);
                level.BranchName        = branch.Name;
                level.Depth             = depth;
                level.Terrain           = new byte[0];
                level.KnownTerrain      = new byte[0];
                level.WallNeighbours    = new byte[0];
                level.VisibleTerrain    = new byte[0];
                level.VisibleNeighbours = new byte[0];
                level.VisibleTerrain    = new byte[0];
                level.Difficulty        = branch.Difficulty + depth;
                if (level.Difficulty > MaxDifficulty)
                {
                    throw new InvalidOperationException(
                              $"Difficulty {level.Difficulty} greater than max {MaxDifficulty}");
                }

                levelEntityReference.Referenced.Level = level;
                level.GenerationRandom = new SimpleRandom {
                    Seed = seed
                };
                branch.Levels.Add(level);
                level.Branch = branch;

                return(level);
            }
        }
示例#2
0
        public static (LevelComponent, IReadOnlyList <Room>) CreateLevel(DefiningMapFragment fragment, Game game)
        {
            var branch = new GameBranch
            {
                Game       = game,
                Name       = "test branch",
                Length     = 1,
                Difficulty = 1
            };

            game.Branches.Add(branch);

            fragment.EnsureInitialized(game);
            if (fragment.Height != 0)
            {
                fragment.LevelHeight = fragment.Height;
            }

            if (fragment.Width != 0)
            {
                fragment.LevelWidth = fragment.Width;
            }

            var level = LevelGenerator.CreateEmpty(branch, 0, game.Random.Seed, game.Manager);
            var rooms = LevelGenerator.Generate(level, fragment);

            return(level, rooms);
        }
        public static void Attach(GameBranch branch, GameDbContext context)
        {
            var branchEntry = context.Entry(branch);

            if (branchEntry.State != EntityState.Detached)
            {
                return;
            }

            branchEntry.State = EntityState.Unchanged;

            Attach(branch.Game, context);
        }