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 ConnectionComponent CreateSourceConnection( LevelComponent level, Point cell, string targetBranchName, byte targetDepth = 1) { var game = level.Game; var manager = game.Manager; var branch = game.GetBranch(targetBranchName) ?? Branch.Loader.Find(targetBranchName).Instantiate(game); var targetLevel = branch.Levels.FirstOrDefault(l => l.Depth == targetDepth); Point?targetCell = null; if (targetLevel != null) { var matchingConnection = manager.IncomingConnectionsToLevelRelationship[targetLevel.EntityId] .Select(c => c.Connection) .FirstOrDefault(c => c.TargetLevelId == level.EntityId && c.TargetLevelX == null); if (matchingConnection != null) { matchingConnection.TargetLevelCell = cell; targetCell = matchingConnection.Entity.Position.LevelCell; } } else { targetLevel = LevelGenerator.CreateEmpty(branch, targetDepth, level.GenerationRandom.Seed, manager); } return(CreateConnection(level, cell, targetLevel.EntityId, targetCell)); }
private PlayerComponent CreatePlayer(string name) { uint seed; using (RandomNumberGenerator rng = new RNGCryptoServiceProvider()) { var rngData = new byte[4]; rng.GetBytes(rngData); seed = (uint)(rngData[0] | rngData[1] << 8 | rngData[2] << 16 | rngData[3] << 24); } var game = new Game { InitialSeed = seed, Random = new SimpleRandom { Seed = seed } }; Initialize(game); _dbContext.Games.Add(game); _dbContext.SaveChanges(); var manager = game.Manager; var surfaceBranch = Branch.Loader.Find("surface").Instantiate(game); var surfaceLevel = LevelGenerator.CreateEmpty(surfaceBranch, depth: 1, seed, manager); LevelGenerator.EnsureGenerated(surfaceLevel); var initialLevelConnection = manager.ConnectionsToLevelRelationship[surfaceLevel.EntityId].Single().Connection; var initialLevelEntity = manager.FindEntity(initialLevelConnection.TargetLevelId); LevelGenerator.EnsureGenerated(initialLevelEntity.Level); // TODO: Set correct sex var playerEntity = PlayerRace.InstantiatePlayer( name, Sex.Male, initialLevelEntity, initialLevelConnection.TargetLevelCell.Value); ItemData.FlaskOfHealing.Instantiate(playerEntity); ItemData.MailArmor.Instantiate(playerEntity); ItemData.LongSword.Instantiate(playerEntity); ItemData.Dagger.Instantiate(playerEntity); ItemData.Shortbow.Instantiate(playerEntity); ItemData.ThrowingKnives.Instantiate(playerEntity); ItemData.FireStaff.Instantiate(playerEntity); ItemData.FreezingFocus.Instantiate(playerEntity); ItemData.FieryAegis.Instantiate(playerEntity); ItemData.PotionOfOgreness.Instantiate(playerEntity); ItemData.PotionOfElfness.Instantiate(playerEntity); ItemData.PotionOfDwarfness.Instantiate(playerEntity); ItemData.PotionOfExperience.Instantiate(playerEntity, quantity: 6); ItemData.SkillbookOfConjuration.Instantiate(playerEntity); manager.LoggingSystem.WriteLog(game.Services.Language.Welcome(playerEntity), playerEntity, manager); Turn(playerEntity.Player); _dbContext.ChangeTracker.AcceptAllChanges(); _gameServices.SharedCache.Set(game, game, new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromHours(1))); return(playerEntity.Player); }