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); } }
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); }